1. Data Link
Layer
앞서 CAN 통신은 통신 프로토콜인 ISO 11898을 따르며, 이는 네트워크상의 디바이스들 간에 정보가 어떻게 교류될 수 있는지를 기술하며,
계층(Layer) 관점에서 정의된 OSI(Open
Systems Interconnection) 모델을 따릅니다. 구체적으로 말한다면, 주로 물리적 계층에서 만든 0,1의 두가지 신호를 실질적으로 데이터로 만드는 encoding, 인코딩해서
만들어진 데이터를 가지고 프레임을 형성하는 framing, 오류발생을 막기위한 error detection, 각 포인트와 포인트간에 속도차를 극복하기 위해서 흐름을 제어하는 flow control등의 역할을 수행합니다.
표준 CAN과 확장 CAN
CAN 통신 프로토콜은
CSMA/CD+AMP(Carrier-Sense Multiple-Access protocol with Collision Detection and
Arbitration on Message Priority) 방식이다. CSMA는 버스의
각 노드가 메시지 전송을 시도하기 전, 비활성의 규정 기간을 기다려야 한다. CD+AMP는 충돌이 메시지 식별 필드에서 프로그램된 각 메시지의 우선 순위에 기반해 비트 와이즈 중재(Bit-wise Arbitration)를 통해 해결된다는 것을 의미한다. 더
높은 우선순위의 식별자가 항상 버스에 액세스 된다.
표 1에 나타난 표준 CAN의 최초 버전, ISO 11519(저속 CAN)는 표준 11비트 식별자를 갖춘 최고 125kbps의 애플리케이션을 위한 것이다. 2차 버전, ISO 11898(1993) 역시 11비트 식별자를 이용해 125kbps에서 1Mbps까지 신호 속도를 제공한다. 가장 최근의 ISO 11898 개정 버전(1995)은 확장 29비트 식별자를 도입했다. ISO 11898 11비트 버전은 표준 CAN 버전 2.0A으로도 종종 불리며, ISO 11898 개정 버전은 확장 CAN 버전 2.0B로 불린다. 그림 2에서
표준 CAN 11비트 식별자 필드는 211 즉, 2048개의 다른 메시지 식별자를 제공하면서, 그림 3에서 확장 CAN 29비트 식별자는 229 즉 5억 3,700만
개의 식별자를 제공한다.
▶ 통신
방법의 개요
1) 각각의 Message는
자신의 고유 ID를 갖는다 (ID의 크기 : CAN 2.0A = 11bit, CAN 2.0B = 29bit - 확장형 )
2) 모든 node는 bus idle 상태에서 데이터 전송가능 (multi master)
3) Message 충돌의 중재는 ID를 통하여 우선 순위 결정
4) 수신 node는 message ID를 check 하여 무시 또는 저장
5) 수신 node는 message 수신 후 acknowledge 신호를 발생
6) Message format error를 판단하면 bus에 error 신호를 발생
▶ Message frame의 구성
1) Frame: 하나의
message를 이루는 field 또는 bit들의
집합
2) Data frame : 일반적으로 전송되는 데이터 message
3) Remote frame : 특정한 ID의 data frame 전송을 요청
4) Error frame : Error를 판단한 node가
전송하는 message
5) Overload frame : Data
frame 사이에 delay가 필요한 경우 전송하는 frame
[아래의 그림은 Data frame을
나타냅니다] :: CAN
2.0A
*
SOF- 단일 도미넌트(dominant) SOF(start of frame) 주요한 (logic 0) 비트로 메시지의 시작을 표시합니다.
또한 무부하 기간 이후 버스의 노드를 동기화하기 위해 사용된다.
* 식별자(Identifier) - 메시지를 식별하고 메시지의 우선 순위를 지정합니다. 프레임에는 11 비트 중재 ID를
사용하는 표준 및 29 비트 중재
ID를 사용하는 확장의 두 가지 포맷이 있습니다. 2진 값이 더욱 낮을수록 우선순위는 더욱 높아진다.
* RTR - 단일 원격 전송 요청(RTR: remote transmission request) 비트는 리모트 프레임과 데이터 프레임을 구별하는 역할을 합니다.
주요한 (logic 0) RTR 비트는 데이터 프레임을 나타냅니다. 열성 (logic 1) RTR 비트는 리모트 프레임을 나타냅니다.
*
IDE- 도미넌트 싱글 IDE(identifier extension) 표준과 확장 프레임을 구분합니다
* r0- 역 비트 (추후 표준 개정으로 사용 가능)
* DLC- 4비트 DLC(data length code)는 데이터 필드의 바이트의 수를 나타냅니다
(IDE ~ R0 , DLC는 Control field
(6bits) 를 의미한다)
* 데이터 - 애플리케이션 데이터의 최고 64비트가 전송될
수 있다.
* CRC- 16비트(15비트+구획문자)의 순환 중복 확인 CRC(cyclic redundancy check)는
15 비트의 주기적인 중복 체크 코드 + 리세시브 delimiter 비트로 구성됩니다. CRC 필드는 오류 검출에 사용됩니다.
* ACK-
메시지를 정확하게 수신한 모든 CAN 컨트롤러는 메시지의 말미에 ACK 비트를 전송합니다. 전송 노드는 버스 상에 ACK 비트 유무를 확인하고, ACK가 발견되지 않을 경우 전송을 재시도합니다. NI Series 2
CAN 인터페이스에는 수신 전용 모드 기능이 있습니다. 이 때문에, 모니터링 하드웨어에 의한 ACK 비트의 전송이 금지되어 버스의 작동에
영향을 주지 않게 됩니다. ACK는 2비트이며 이 중 1비트는
승인 비트, 2번째 비트는 구획문자이다.
* EOF-프레임 종료 (EOF)의 7비트 필드는 CAN 프레임(메시지)의 종료를 나타내고, 비트
스터핑(bit-stuffing)을 억제시키며, 도미넌트 일
때
스터핑 오류를 가리킨다. 동일한
로직 레벨의 5비트가 정상 동작기간 동안 연속적으로 발생할 때, 반대
로직 레벨의 비트는 데이터로
스터프 된다.
* IFS- 7비트의 IFS(inter-frame space)는 컨트롤러가 요구하는
시간의 양을 포함하며, 메시지 버퍼 영역에서 적절한 위치로 정확하게 수신된
프레임을 이동시킨다.
확장 CAN (Data frame) :: CAN
2.0B
그림 3에서처럼, 확장 CAN 메시지는
다음과 같은 내용이 추가되어 표준 메시지로 동일하다.
*
SRR-SRR(substitute remote request) 비트는 표준 메시지 위치에서 RTR 비트를 대신해 확장 포맷에서 플레이스홀더(placeholder)가 된다.
*
IDE-IDE(identifier extension)에서
리세시브 비트는 따라야 할 더욱 많은 식별자 비트가 있다는 것을 나타낸다. 18비트 확장은 IDE를 따른다.
*
r1-RTR과 r0 비트를 따르는 추가적인 리세시브 비트는 DLC 비트에 앞서 포함된다.