[통신]

CAN (Controller Area Network) 통신이란?

Neo Park 2012. 9. 17. 12:02

 

CAN (Controller Area Network)은 1985년 자동차 업체인 벤츠의 요구에 의하여 자동차 부품 업체인 독일의 Bosch사에서 차량 네트워크용으로 최초로 개발되었다고 합니다.
 
초기에는 자동차 제조업체들은 일대일(Point To Point)통신 시스템을 사용하여 차량 내 전자장치(ECU)를

연결하였습니다.  하지만 차량 내에 탑재되는 전자장치들이 많아짐에 따라 배선 장치는 공간 및 무게로 인한 비용이

증가하게 되었습니다. 또한, 서로 다른 세 개의 전자장치간을 통신을 위해서는 일대일(Point To Point)통신 방식이

적합하지 않아 다중통신 (Multi Master Communication) 방식이 필요하게 되어 CAN이 탄생하게 되었습니다.
이에 업체들은 배선의 비용, 배선의 복잡성, 배선의 공간 그리고 무게를 경감시킬 수 있었습니다.
그후 최초의 집적화된 CAN 부품은 1987년 인텔에 의해 생산되어졌다고 합니다.
 
CAN (Controller Area Network)은 차량용 네트워크를 위해 고안된 시리얼 통신 네트워크의 통신 방식입니다.
장점으로는 2개의 선으로 여러가지 ECU를 병렬로 연결하여 ECU 상호간의 정보 교환을 우선순위대로 처리하는 방식이

있으며, 네트워크 상의 모든 디바이스는 전송되는 모든 메세지를 확인할 수 있으며, 해당 메시지를 필터링되어야 할 지

여부를 결정할 수 있습니다.
또한 CAN은 노이즈에 강한 통신으로 인정을 받고 있습니다.
 
1993년에는 ISO에서 국제 표준 규격 (ISO 11898)으로 제정되었으며, 1994부터 CANopen, DeviceNet 등 CAN에 대한 여러 가지 상위 레벨 프로토콜이 표준화되었습니다.
 
CAN은 차량용으로 개발되었지만 안정성과 장점이 입증되어 다른 분야에서도 광범위하게 CAN 버스를 도입하고 있습니다.
적용되는 분야를 보면 철도(지하철, 경전철....), 항공기, 의료기, 승강기 등 다양한 분야에서 적용을 하고 있습니다.
 
-------------------------------------------------------------------------------------------------------------
CAN(Controller Area Network) 통신의 장점입니다.
 
1. 2선 twist pair 을 이용한 전기적 differential 통신을 하여 전기적인 노이즈에 매우 강합니다.
 
2. 2032개의 디바이스를 연결할 수 있으나 이것은 이론적이며, 현재의 CAN 트랜시버 한계는 하나의 버스라인에 최대 110개까지의 노드 연결이 가능합니다. 또한 CAN 트랜시버에 따라 최대 노드수는 달라 집니다.
 
3. RS-485의 경우에는 하나의 Master만 존재하지만 통신 버스를 공유하고 있는 CAN 컨트롤러들은 모두가 Master 가 될 수 있는 Multi Master 통신을 합니다.
 
4. 통신 속도는 최대 1Mbps로 속도가 빠릅니다.. 아래 그림은 CAN(Controller Area Network) 통신의 속도와 거리 관한 표입니다.


           

 

 

5. 8byte 데이터 전송을 하는 하드웨어 패킷을 제공합니다.
 
6. 우선 순위가 있습니다.

 

7. 하드웨어적인 오류 보정이 있으며, 설정된 ID만을 수신 할 수 있습니다.

-------------------------------------------------------------------------------------------------------------
CAN 통신 규약은 두가지의 Data Format 을 가지고 있습니다.
 
1. Standard Format
 
    - ISO 11898
    - CAN 2.0A 버전
    - 11bit 식별자
 
   
 
2. Extended Format

    - ISO 11898    
    - CAN 2.0B 버전
    - 29bit 식별자
 
 

-------------------------------------------------------------------------------------------------------------
용어 설명
1) SOF (Start Of Frame)
     메시지 시작을 표시하며, 무부하 기간 이후 버스의 노드를 동기화하기 위해 사용
2) Identifier (식별자)
   표준 CAN 11비트 식별자는 메시지의 우선순위를 가린다. 2진 값이 더욱 낮을수록 우선순위는 더욱 높아짐
3) RTR (Remote Transmission Request)
   원격 전송 요청 비트,
   이 비트가 0이면 데이타 프레임이고, 1이면 CAN메세지가 원격 전송 요청을 의미
4) SRR (Substitute Remote Request)
   표준 프레임의 RTR 위치에 점유
5) IDE ( (IDentifier Extension)
   이 비트가 0이면 표준 CAN  식별자를 전송하고, 1이면 확장 CAN  식별자를 전송을 의미
6) R0, R1
  예약비트
7) DLC (Data Length Code)
  데이터 프레임의 데이터 바이트 수
8) Data Field
  전송 데이터. 8byte( 64bit )
9) CRC (Cyclic Redundancy Check)
  16bit ( 15bit + 구획문자 ) 체크섬으로 오류 검출  Field.
10) ACK (ACKnowledge Field)
  2bit ( 1bit + 구획문자)로  오류가 없는 메시지가 전송되었다는 것을 나타낸다.
11) EOF (End Of Frame Field)
  메세지(프레임) 종료 필드
12) IFS (Inter Frame Space) 
  컨트롤러가 요구하는 시간의 양을 포함하며, 메시지 버퍼 영역에서 적절한 위치로 정확하게 수신된 프레임을 이동시킴
-------------------------------------------------------------------------------------------------------------


기본적인 이론은 이것으로 끝내겠습니다.
더 많은 이론적인 것은 CAN 관련 내용을 인터넷을 찾아보면 많은 정보들이 있습니다.
 
다음에는 EZ-S3C6410에 CAN 컨트롤러를 연결하는 회로를 꾸며 보도록 하겠습니다
 
SJA1000 Can 컨트롤러를 이용한 회로도 입니다.
 

 

CAN 통신을 위한 컨트롤러 회로도는 CAN 통신 -IV 에서 소개하였다. CAN 통신의 컨트롤러에 CAN Transceiver 가 필요하다.
CAN Transceiver 는 다음에 회로도를 올리도록 하겠습니다.
이에 앞서 CAN 통신 컨트롤러 회로도 잠시 설명하도록 하겠습니다.
 
현재 사용한 CAN 컨트롤러는 SJA1000 입니다. 이 칩은 ALE 신호가 있어 DATA 신호와 ADDR 신호를 같이 사용합니다.
따라서 회로도에서 ALE_CAN0# 신호와 CS_CAN0# 신호는 S3C6410에서 나오는 CS 신호를 74LVC138을 이용하여 디코딩한 신호이다.
 
또한  ALE_CAN0# 는 High일때 Addr 래치가 되기 때문에 ALE_CAN0#는 Active Low 이므로 74HC14를 달아서 반전하여 Active High 상태로 되게 하였습니다.
 
SJA1000는 5V로 구동하고, S3C6410의 경우에는 3.3V로 전압레벨이 다릅니다. 따라서 74LVC245(74LCX245)로 전압레벨을 맞추었습니다.
CAN_RD0#과 CAN_WR0# 도 전압레벨을 위하여 74LVC32를 사용하였습니다.
 
CAN 통신은 CAN 컨트롤러만으로는 동작은 하지 않는다.
따라서 반드시 CAN 트랜시버를 달아야 한다.
CAN 트랜시버로는 TJA1040, TJA1041, TJA1050, PCA82C250/C251 등 많은 칩들이 있습니다.
이 중에서 일반적으로 사용하는  PCA82C250/C251 를 이용한 회로도 입니다.
 
CAN 통신 - IV의 회로도에 이어서..
 

 
 
커넥터는 업체마다 다르다. 하지만 통상적으로 DSUB9를 사용할 경우에는 아래와 같은 PIN 맵을 갖습니다.
 
 
 
1 : No Connection
2 : CAN_L
3 : No Connection
4 : No Connection
5 : SHILD
6 : No Connection
7 : CAN_H
8 : No Connection
9 : No Connectio
 
CAN관련 회로를 그렸다면 CAN을 사용하기 위해서는 CAN 디바이스 드라이버가 필요합니다.
 
SJA1000 관련 칩의 드라이버는 아래와 같습니다.
 
2.6.31 버전부터 커널에 포함된 soketCAN을 사용하거나, can4linux를 사용하면 됩니다.
 
SocketCAN 은 아래의 사이트 또는 2.6.31 이상의 버젼에서 제공을 하고 있습니다. 
   http://developer.berlios.de/projects/socketcan
  
  
can4linux 는 아래의 사이트에서 드라이버를 다운로드 받을 수 있습니다.
   http://www.port.de/pages/misc/can4linux.php
  
커널 버전에 따라서 위의 두개의 드라이버를 사용하면 되지만,
 SocketCAN의 경우 2.6.31 부터 커널에서 제공 하므로 2.6.31이전 버전에 적용시에는 여러가지 사항을 고려해서 작업을 해야 합니다.

 

 

참조: http://cafe.naver.com/2hw/1257