CAN 버스에서 SAME ID로 다른 메시지 전송


12

CAN 중재는 ID로 수행되며 버스의 모든 노드는 모든 ID로 전송할 수 있습니다 (이상적으로는 좋지 않지만 불쾌한 노드는 할 수 있음).

동일한 CAN 버스에 연결된 두 개의 서로 다른 노드가 ID는 동일하지만 데이터 바이트가 다른 메시지를 전송하면 어떻게됩니까?

내 생각 : 버스에서 쓰레기를 생성 할 것입니다. 지배적 인 비트를 가진 사람은 누구나 전송됩니다.


1
그들이 왜 이런 식으로했는지 잘 모르겠습니다. 중재가 전체 메시지에 적용되는 것이 더 합리적이라고 생각했을 것입니다.
Rocketmagnet

답변:


12

CAN 사양의 6.1 절 :

BIT ERROR : 버스에서 비트를 전송하는 장치도 버스를 모니터링합니다. 모니터링되는 비트 값이 전송 된 비트 값과 다른 경우 해당 비트 시간에 비트 오류가 감지되어야합니다. 중재 필드의 채워진 비트 스트림 동안 또는 ACK 슬롯 동안 '열성'비트를 보내는 것은 예외입니다.

따라서 다른 하나가 '0'을 전송할 때 먼저 '1'을 전송하는 노드는 비트 오류를 ​​기록한 다음 공식적으로 설명 된대로 오류 플래그를 전송하여 오류를 정상으로 신호합니다 (3.1.3 절 참조). 섹션 6.2.

비공식적으로, 해당 노드가 오류 활성 인 경우 (일반적인 경우 여야 함) 6 개의 우세 비트의 오류 플래그를 전송하며 다른 모든 노드도 (물량 오류로) 감지합니다. 이는 해당 메시지를 완전히 파기하는 효과가 있습니다.

  • 아무도 그것을받지 못할 것이다
  • 어떤 송신기도 자신이 성공적으로 전송 한 것으로 생각하지 않습니다.

각 송신기는 재전송의 정확한 타이밍에 따라 하나의 버스의 게인 제어 전에 충분히 시작될 수 있습니다. 그렇지 않으면 동일한 시퀀스가 ​​다시 발생할 수 있습니다. (또는 다른 우선 순위가 높은 메시지가 잠시 동안 둘 다 해제 될 수 있습니다!)


아래 @clabbacchio의 답변에서 영감을 얻은 확장 답변.

"불쾌한 노드"를 언급하고 clabbacchio는 두 노드가 서로 다른 시간에 전송하는 경우 각 수신기가 다중 수신으로 수행 할 작업을 결정해야한다는 유효한 지점을 만듭니다.

이것은 작년에 해킹에 의해 입증되었습니다 . 이 백서에서는 "PSCM 사양"섹션에서 공격자가 버스의 일반 메시지와 동기화하고 "좋은"ECU가 전송하려고하는 메시지 바로 전에 악의적 인 메시지를 재생하는 방법에 대해 설명합니다. 수신 ECU는 메시지 카운터가 증가하지 않았기 때문에 이전 메시지를 수락하고 메시지 카운터를 업데이트 한 다음 "양호한"메시지를 잘못된 것으로 버립니다.


1

귀하의 질문에, 당신은이 가설을 세웁니다 :

지배적 인 비트를 가진 사람은 누구나 전송됩니다.

두 메시지가 정확히 동시에 전송된다고 가정합니다. 이는 더 일반적인 문제의 특정 사례입니다. Martin의 유효한 답변은이 특정 문제를 다루지 만 두 노드가 서로 다른 시간에 전송하는 (보다 일반적인) 경우는 무시합니다.

이 경우, ID는 동일하지만 버스 상에 서로 다른 페이로드가 순환하는 두 개의 메시지가 있으며, 두 메시지를 구별하고 수신해야하는 컨텐츠인지 여부를 결정하는 것은 수신자의 논리에 달려 있습니다. 두 메시지를 구별하지 못하면 데이터를 잘못 해석하여 오류 프레임보다 더 심각한 문제를 일으킬 수 있습니다.

예를 들어, 하나의 메시지에는 온도 센서의 판독 값이 포함되고 다른 하나에는 동일한 바이트에서 액추에이터의 목표 위치가 포함된다고 말하고 (SHOULD NEVER HAPPEN IN REAL LIFE), 액추에이터가 알지 못하는 상태에서 목표 값으로 얻도록 할 수 있습니다.


예, 두 메시지를 구별하기 위해 논리를 구현해야합니다. 그러나 내 질문은 ID를 기준으로 중재가 이루어지면 메시지 ID가 동일하고 데이터가 다르면 어떻게 될까요?
Swanand

@Swanand 동시 전송의 가설에 대해서만? 그냥 코너 케이스, 반대가 더 가능성이 높습니다
clabacchio

0

메시지 데이터 필드가 다르면 잘못된 CRC로 인해 버스에 오류 프레임이 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.