차량에 여러 컴퓨터가 있다면 무엇을 공유해야 하는가
차량의 센서·제어 장치가 값을 주고받는 통신을 차량 내 네트워크, IVN(In-Vehicle Network)이라고 한다. ECU(Electronic Control Unit)는 그 안에서 특정 기능을 맡는 전자 제어 장치다. 센서 값을 읽는 ECU와 표시하는 ECU가 다를 수 있으므로 전기 신호뿐 아니라 값의 뜻·단위·유효 시각도 맞아야 한다.
IVN은 한 가지 통신 규격의 이름이 아니다. 여기서는 고속 Classical CAN의 선형 버스와 표준 11bit 데이터 프레임을 다룬다. CAN은 Controller Area Network의 약자다. 이후의 CAN FD나 29bit 확장 프레임에 이 단위의 길이 계산을 그대로 적용하지 않는다. 차량 전체가 하나의 CAN 선으로 이어진다고도 가정하지 않는다. 다른 네트워크/게이트웨이를 거치면 주소·전달·시간 계약이 추가된다.
기본 활동은 자체 가상 버스의 종이 분석이다. 아래 ECU A/B, ID·종단·속도는 교육용 조건이며 실제 차종의 배선/신호 정의가 아니다. 일반 코딩 지식으로 바로 알 수 없는 계층·물리·시간 개념을 먼저 익힌다.
응용 프로그램·CAN 제어기·트랜시버를 나눈다
Microchip의 CAN 개요는 노드를 응용 제어기·CAN 제어기·트랜시버로 구분한다. MCU에 CAN 제어기가 내장되어도 이 역할 구분은 유효하다.
그림 M28.01-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
| 부분 | 맡는 일과 별도로 확인할 것 |
|---|---|
| 응용 프로그램 | 속도/상태 등 payload의 뜻·단위/축·버전·유효성·명령/관측 구별 |
| CAN 제어기(controller) | 프레임 생성/수신·ID 필터·중재·오류 검출. MCU 내부 또는 외부 장치일 수 있음 |
| CAN 트랜시버(transceiver) | 제어기의 논리 TXD/RXD와 버스의 차동 CANH/CANL 사이 전기 변환 |
| 배선/접속·종단 | 간선과 분기·양끝 종단·연결/전원·공통모드 범위 등의 물리 조건 |
TXD/RXD는 제어기와 트랜시버 사이 논리 신호다. CANH/CANL은 버스의 두 선이며 두 전압의 차이를 이용한다. MCU GPIO를 CANH/CANL에 직접 연결하는 그림으로 바꾸면 전기 변환 계층이 빠진다. 논리 0/1과 특정 핀 전압을 같은 것으로 취급하지 않는다. 실제 전압 범위·전원/논리 호환·허용 공통모드는 사용할 트랜시버 자료에서 확인해야 한다.
M03.04 전기 인터페이스의 정격/논리 호환과 M04.04 버스의 통신/데이터 유효성 구분을 그대로 이어 간다. 프레임을 읽었다고 속도 단위나 실제 물리 동작까지 확인한 것은 아니다.
고속 버스의 끝은 ECU 개수와 다르다
다음은 고속 CAN의 개념 배치다. 두 종단은 간선 양끝의 CANH와 CANL 사이에 놓는다. ASCII 선은 실제 치수/배선도나 접지/보호 회로를 대신하지 않는다.
종단120Ω (간선 끝1)
║
╠══ ECU A
║
╠══ ECU B
║
종단120Ω (간선 끝2)
여기서 ║와 ═는 CANH/CANL 두 선을 묶어 그린 기호다. 각 ECU는 트랜시버를 통해 두 선에 접속하고, 각 종단은 CANH와 CANL 사이에 연결한다.
TI SLOA101B p6는 고속 간선과 양끝 120Ω 종단을 설명한다. 목적은 케이블 끝의 반사를 줄이는 것이며, 노드마다 무조건 종단 하나씩 붙이는 규칙이 아니다. 간선/분기 길이와 전파 지연은 속도·토폴로지에 영향을 주므로 임의의 긴 별 모양 분기로 바꾸고 같은 성능을 가정하지 않는다.
종이 계산에서 배선 저항과 다른 경로를 무시하고 120Ω 저항만 병렬로 두었다고 하자. 같은 두 선 사이의 이상 등가 저항은 다음과 같다.
| 종단 수 | 계산 | 이상 등가값 |
|---|---|---|
| 1개 | 120 | 120Ω |
| 2개 | 1/(1/120+1/120) | 60Ω |
| 3개 | 1/(1/120+1/120+1/120) | 40Ω |
이 계산은 제시한 저항망의 결과다. 60Ω이라는 수치만으로 종단 위치·단선·분기/반사·전원/공통모드·실제 통신 정상까지 판정할 수 없다. 두 저항이 잘못된 같은 쪽에 몰려 있어도 이상 병렬값은 같을 수 있다. 실제 차량에 저항계를 연결하는 절차나 실측 결과를 제공한 것이 아니다.
ID는 메시지의 식별/우선순위이며 노드의 인증서가 아니다
가상 버스에서 ID 0x120을 '축 속도 관측 v1'로 약속했다고 하자. 이 약속과 payload 해석 표는 응용 설계에 속한다. CAN ID 자체에 속도 단위·발신 장치 이름·생성 시각이 자동으로 들어 있지는 않다.
프레임은 같은 버스에 방송되고 각 제어기는 ID 필터 등으로 필요한 프레임을 받아들인다. ID를 일반적인 목적지 주소와 혼동하지 않는다. 모든 ECU가 모든 메시지를 응용까지 처리한다는 뜻도 아니다. 예상 ID가 보였다는 사실만으로 발신자를 인증하거나 명령 권한을 확인한 것은 아니다.
같은 ID를 여러 생산자가 임의로 다른 뜻/데이터로 쓰면 수신자는 해석을 신뢰하기 어렵다. 시스템 설계에서 생산자·형식/길이·버전·갱신 주기·오류/유효성 계약을 맞춰야 한다. CAN 링크 CRC는 전송 오류 검출 장치이며 발신자 인증이나 응용 데이터의 의미 검증을 대신하지 않는다.
동시에 보내려 하면 비트마다 버스를 관찰한다
같은 버스에서 두 송신자가 동시에 시작할 수 있다. CAN은 중재(arbitration) 구간에서 자신이 내보내려는 비트와 버스에서 읽은 비트를 비교한다. dominant는 논리 0, recessive는 논리 1이다. 정상 동작을 가정한 중재에서 0과 1이 경쟁하면 버스는 0으로 관측된다. 1을 보내려던 노드가 0을 읽으면 경쟁에서 물러나 수신으로 전환한다. 이 중재 패배 자체는 전송 오류가 아니며 승자의 프레임은 계속된다.
동일한 11bit 데이터 프레임 형식에서 A의 ID는 0x120, B는 0x100이라고 하자. 두 노드는 같은 SOF(Start Of Frame, 프레임 시작)에서 경쟁한다. ID는 가장 높은 자리 MSB(Most Significant Bit)부터 비교한다. 아래는 설명을 위해 ID 비트만 뽑은 표이며 실제 선로의 stuffing 비트/나머지 필드는 표시하지 않았다.
A의 ID 비트열은 00100100000, B는 00100000000이다.
| ID bit | A | B |
|---|---|---|
| 10 | 0 | 0 |
| 9 | 0 | 0 |
| 8 | 1 | 1 |
| 7 | 0 | 0 |
| 6 | 0 | 0 |
| 5 (첫 차이) | 1 | 0 |
| 4 | 0 | 0 |
| 3 | 0 | 0 |
| 2 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 0 | 0 |
처음 다른 곳은 ID bit5, ID 안에서 여섯 번째 비트다. A는 1, B는 0이므로 A가 물러나고 B가 계속 전송한다. SOF나 삽입 비트까지 센 선로상의 여섯 번째 비트라는 뜻은 아니다. 같은 형식/조건에서는 수치가 작은 ID가 높은 우선순위를 갖는 이유를 이 비교에서 확인할 수 있다.
이 과정은 이미 전송 중인 프레임을 나중의 높은 우선순위 요청이 중간에서 끊는 선점이 아니다. 버스가 사용 중이면 다음 전송 기회를 기다린다. 중재에서 진 A도 이후 다시 경쟁하며, 다른 부하 조건 없이 A가 정확히 언제 전송된다고 보장할 수 없다.
조건을 바꿔 A/B가 같은 ID인데 payload가 다르면 어떻게 될까? ID 중재로 생산자를 구별하지 못하고 뒤의 데이터 구간에서 차이가 오류를 일으킬 수 있다. '동순위이니 두 프레임이 차례로 자동 전달된다'는 결론은 틀리다. 또 표준/확장 형식이 섞이면 IDE/SRR/RTR 등도 중재에 관여하므로 11bit/29bit ID의 정수 크기만 비교하는 규칙으로 일반화하지 않는다.
payload 바이트 수와 프레임 전송량은 다르다
Microchip DS70070D §23.5.1.1·Figure23-3는 Classical CAN 표준 데이터 프레임의 필드를 설명한다. 여기서는 payload 8B인 11bit 데이터 프레임으로 한정한다. B는 바이트, 1B=8bit다.
| 순서/필드 | 비트 수와 역할 |
|---|---|
| SOF | 1: 프레임 시작, dominant |
| 중재 | 12: ID11 + RTR1. 여기의 데이터 프레임은 RTR=0 |
| 제어 | 6: IDE1 + 예약 r0 1 + DLC4. 이 표준 형식의 IDE=0, DLC(Data Length Code)=8은8B |
| data | 64: 응용 payload 8B |
| CRC 시퀀스/구분자 | 15+1: CRC(Cyclic Redundancy Check) 오류 검사와 구분 |
| ACK 슬롯/구분자 | 1+1: 수신 확인과 구분 |
| EOF | 7: 프레임 끝 |
이 필드 합은 1+12+6+64+16+2+7=108bit다. 그 뒤의 intermission 3bit까지 포함하면 111bit다. intermission은 다음 프레임 전에 필요한 구간으로, 이 계산에서는 프레임 자체 108bit와 구분해서 센다.
단, 이 합은 bit stuffing을 세기 전의 계산이다. Classical CAN은 SOF부터 CRC 시퀀스까지 같은 값이 다섯 번 연속되면 반대 비트를 삽입하는 규칙을 사용하며 수신자는 이를 제거한다. 내용에 따라 실제 전송 비트 수가 늘 수 있다. 오류 프레임·재전송, 추가 대기 등도 이 합에 없다. payload만 보고 전송 시간을 고정하지 않는 것이 핵심이다.
제공 비트율을 500kbit/s=500,000bit/s로 두면 1bit 시간은2µs다.
- payload만 계산: 64×2=128µs.
- 필드 합만 계산: 108×2=216µs.
- intermission까지 계산: 111×2=222µs.
이 세 값은 계산 범위가 다르다. 222µs를 이 메시지의 전체 지연 상한으로 쓰면 안 된다. stuffing·앞선 프레임/중재 대기·오류/재전송·소프트웨어 처리 지연을 제외했기 때문이다. 원본 표본의 생성 시각에서 응용 처리까지의 지연은 더 넓은 시간 구간이다. 비트 타이밍과 오류/버스 부하의 상세는 M28.02에서 다룬다.
ACK 한 비트로 애플리케이션 결과를 알 수 있는가
정상적인 링크 동작에서 송신자는 ACK 슬롯에 recessive를 내보내고, 프레임을 올바르게 받은 수신 노드는 dominant로 응답할 수 있다. 이것은 어느 응용 소비자가 처리했는지 알려주는 개별 응답 목록이 아니다. 수신 필터로 응용에 넘기지 않는 노드의 링크 ACK도 있을 수 있다. 송신자 자신만 있고 ACK할 수신 노드가 없으면 같은 수신 확인을 기대할 수 없다.
따라서 'ACK 있음 → 원하는 ECU의 응용 처리 완료 → 물리 장치 동작 완료'로 단계를 건너뛰지 않는다. ACK 타임스탬프도 센서의 원본 측정 시각이 아니다. 새로 도착한 프레임 안에 오래된 표본이 있을 수 있고, ID/CRC가 맞아도 다른 버전·단위·축을 사용한 값일 수 있다.
다음은 전부 자체 가상 기록의 판단이다.
| 제공 관찰 | 확인할 수 있는 것 / 더 필요한 근거 |
|---|---|
| 정상 링크에서 ACK 관측 | 수신 확인 신호가 있었음 / 특정 응용의 처리·물리 결과는 별도 |
| 예상 ID·8B 수신 | 지정 ID/길이의 데이터가 들어옴 / 스키마·생산자·값/유효성·버전 확인 필요 |
| 수신 시각이 '방금' | 그 수신 사건의 시각 / 원본 표본 시각·clock/오차·전송/처리 지연 별도 |
| 종단 이상 계산60Ω | 제시한 병렬 저항망 계산 일치 / 실제 위치·배선·반사·전원·송수신 미검증 |
기존 4.4 시간 정합과 M26.05 접수/관측 구분을 연결한다. DBC라는 신호 정의 자료로 비트를 물리 단위에 대응시키는 다음 단위에서도, 그 해석이 현재 형상/시각에 유효한지는 별도로 확인해야 한다.
다음 단계로 넘길 버스 계약
가상 버스의 메모를 한 장으로 정리한다. 물리 계층은 고속 선형 간선/종단 위치·제어기/트랜시버·연결 조건, 링크는 Classical/11bit 데이터·제공 비트율/ID·길이, 응용은 생산자/버전·단위/축·유효성·표본 시각/clock·기대 주기를 기록한다. 아직 자료가 없는 전기 수치/부하/최악 지연을 '정상'으로 채우지 않는다.
M26.06 통합 근거에서 이어 온 요구/형상·원본/미확인의 원칙이다. 기본 학습 완료는 이 분석을 할 수 있다는 뜻이며 실제 차량 통신 시험 완료를 뜻하지 않는다. 다음은 M28.02 비트 타이밍·에러 관리·CAN FD·DBC다.