7.
The
principle of CAN protocol
CAN버스에서는 각각의 노드(ECU)가 CAN 버스에 흘러 다니는 데이터를 읽거나 쓰기 위해 액세스(access)할 때 전체 노드를 제어하는 마스터(master)가 없습니다. 따라서, 각 노드에서 데이터를 전송할 준비가 되면, 먼저 전송 준비가 되었는지를 버스에 확인하고 그 후 CAN 프레임을 네트워크에
전송하는데, 전송되는 CAN 프레임은 전송이나
수신 노드 중 어느 노드의 주소도 포함하고 있지 않으며, 대신, 고유한 ID를 통해 프레임을 분류하여 데이터를
인식하게 됩니다.
각 노드들이 동시에 메시지를 CAN 버스로 전송하려는 경우 최우선
순위를 가진 노드 (가장 낮은 중재 ID)가 자동적으로 버스에
액세스된다. (낮을수록 우선순위가 높은방식)
예를들어, CAN 통신을 통해 데이터를 액세스하는 과정은 아래와 같습니다.
① 먼저 CAN 버스라인이 사용 중인지를 확인한다.
② CAN 버스라인이 사용 중이 아니면, CAN 네트워크상의 모든 노드(ECU)는 메시지를 수신하여 자신에게
필요한 메시지인지를 식별자를 통해 확인한다.
③ 자신에게 필요한 메시지일 경우 입력받아 데이터를 분석하게 되고, 불필요
한 메시지는 무시하게 된다.
④ 여러 노드의 데이터가 동시에 자신의 노드로 유입되는 경우에, 식별자의
숫자를 비교하여 먼저 취할 메시지의 우선순위를 정한다. 식별자의 숫자가 낮은 경우가 우선순위가 가장
높다.
⑤ 각각의 CAN 메시지는 11비트의
식별자(CAN 2.0A) 또는 29비트의 식별자 (CAN 2.0B)를 가지며 CAN 메시지의 맨 처음 시작부분에 위치한다.
⑥ CAN 프레임의 식별자(ID)는
메시지의 내용을 식별시켜 주는 역할과 메시지 의 우선순위를 부여하는 역할을 한다.
⑦ 각 노드로부터 출력되는 데이터 메시지는 송신측이나 수신측의 주소를 가지 고 있지 않다. 대신 각 노드(ECU)를 식별할 수 있도록 각 노드마다 고유한 식별자를
가지고 있다.
8.
The
arbitration of a Can Message
->결론적으로 말해서 CAN통신은 I^2C통신과 동일한 버스구조와 중재구조를 가집니다. 중재
가 필요한 이유는 CAN과 같은 동기식 통신에서 같은 시간 Time에 다른 메세지가 버스를 사용
할경우 충돌이 일어나게되는데 이를 해결하기위한 방법이 필요하기 때문이다.
CAN의 주요한
기능 중 하나인 중재는 11Bit 또는 18Bit의 Identifier(식별자)가 존재하기 때문에 가능한 기능입니다. 아래의 그림에서 보이는 CAN의 기본특성은 버스와 드라이버 입력 및
수신기의 출력간이 반대 로직 이라는 특성입니다. 보통의 버스에서
High신호는 1에 가깝고 Low신호는 0에 가깝지만 CAN버스 반대입니다.
일단 CAN버스의 액세스는 event-driven형태이며
만약, 2개의 노드가 버스를 동시에 차지 할 경우, 액세
스의
형태는 중재(nondestructive, bit-wise arbitration)가 구현된다. Nondestructive의 의미는 중재의
형태가 메시지로 지속된다는 것을 의미한다. 이 말은 충돌이 일어났을 때 메시지는 다른 노드에 의해서
훼손되지 않으며, 오류를
발생시키지도 않는다는 것을 의미한다.
앞서 말했듯이, CAN의 특징 중 식별자에서 메시지의 우선 순위를
배치하는 특징이 존재한다고 하였다.
이점이 바로 CAN을
실시간 제어 환경으로 만들어주며 우선적인 특정 이벤트를 먼저 실행시키는 기능을
한다. 2진법 메시지
식별자 숫자가 더 낮을수록 우선순위는 더 높으며 만약 제로로 구성된 식별자는 네트
워크 상에서 가장 우선 순위의 메시지이다. 버스 도미넌트가 가장 긴 것을 가지고 있기 때문이다.
따라서 2개의 노드가 동시에 전송을 시작하면, 이 노드는 0(도미넌트:
dominant)으로 전송하는 반면, 다
른 노드는 1(리세시브: recessive)로 전송해, CAN 버스를 제어하고 완벽한 메시지를
전송한다. 도미넌트
비트는 CAN 버스에서 리세시브 비트에
겹쳐 쓴다.
[CAN BUS 의
LOGIC]
위 그림은 중재의 과정을 보여준다. 그림에서
하나의 노드라도 우성(Dominant)상태, 즉 Zero이게 되면
버스의 상태는 우성이 됩니다. 또한 어느 노드 하나라도
우성이 아니게 되면 그 버스의 상태는 열성 (recessive)상태 즉,
one이 됩니다. 한마디로 해석하자면 CAN 버스
상에서는 우성비트는 열성비트를
무시하게 되는 것입니다. 따라서 버스의 상태가 우성이냐 열성이냐에 따라 데이터 전송을 제어할 수 있는
것입니다.
CAN 프로토콜은
"Carrier Sence Multiple Access With Collision Detection" 따라 버스 Access를 처리합니다. 만약 충돌이 발생하여도 메세지들은 결코 파괴되는
일이 발생하지 않고 충돌로 인해 낭비되는 대역폭도 생기지 않습니다. 이점으로 Ethernet과 달리 CAN에서는 충돌이 해결되는 부분이 되고 더
높은 우선순위를 가진 메시지가 버스에 접근할 수 있게 되는 것입니다. 그래서 각각의 노드들은 식별자를
가지고 있는 것입니다.
아래의
그림으로 CAN의 중재에 대해서 다시 설명한다면,
먼저 제일
윗 줄에 있는 노드1, 그 밑에 있는 노드 2와 노드 3가 동시에 버스를 차지하기 위한 요청이 발생하였을 경우에 먼저 Start
Of Frame을 시작으로하는데 이 부분은 무조건 우성으로 설정되 있어야 데이터 전송에 문제가 없을 것입니다. 다음에 나오는 것이 중재 필드 부분으로 데이터 프레임에 작성되어있습니다. 그림에서
왼쪽 갈색선이 첫번째 중재하는 영역으로 노드1과 노드3가
중재에서 승리하고 노드2는 열성비트로 인해 우선순위에서 최하위로 밀려나게 되고 다음 오른쪽 갈색선에서는
노드1과 노드2가 중재를 받게 되는데 여기서 노드1이 우성비트를 가지고 있으므로 우선순위 1위가 되어 제일 먼저 버스를
차지하게 되는 것입니다. 그 다음 노드2가 전송되고 마지막으로
대기상태였던 노드3이 전송되는 것이다. 비교적 간단한 개념이지만
이것으로 인해 CAN 통신의 신뢰성은 많이 향상될 수 있습니다.
이번에는 TI사에서 제공하는 report에
있는 그림으로
보겠습니다.
그림 5는 중재(arbitration)
과정을 보여줍니다. 노드가 지속적으로 자체 전송을 감시하기 때문에, 노드 B's recessive bit가 노드 C의 더 높은 우선 순위인 dominant bit에 겹쳐
쓰이는 경우, B는 버스 상태가 전송된 비트와 맞지 않는다는 것을 검출합니다. 따라서 노드 B는 전송을 중지시키는 동안, 노드 C는 메시지를 가지고 지속됩니다. 그리고 후에 버스가 노드 C에 의해 released 되면, 이전에 전송을
중지한 노드 B의 전송도 이루어집니다. 이 기능은 ISO 11898 물리 신호 계층의 일부로, CAN 컨트롤러 내에
포함되어 CAN 사용자들이 필수적으로 알아야합니다.