CAN 메세지 내부에는 Transmitter, Receiver 정보가 따로 없다
받는 제어기 입장에서의 문제점: 모든 메세지가 브로드캐스트 방식으로 전송이 되니 다른 제어기들이 어떤 메세지를 보낼 때마다 그 메세지들이 전부 수신이 됨
하지만 메세지 안에 그 메세지를 누가 보낸건지, 메세지 내용 등을 파악할 방법이 없음
이 문제를 해결하기 위해 메세지의 ID를 사용
Arbitration Field에 id를 적을 공간이 있음
Data에 우리가 실제로 보내려는 값들을 넣는 곳이 있음
ex) 내가 BMS개발하는 사람이면 BMS제어기는 ID영역에 16진수로 123을 적은 후 데이터를 채워서 보내야함
메세지 ID라는것이 없었더라면 어떤 메세지를 수신했을 때 이 메세지가 누가 보낸 건지 어떤 내용이 담겨 있는 건지를 알 수 없는데 ID라는것이 있으니 메세지를 수신 받으면 메세지를 들여다 본 후 ID영역에 간 후 ID가 0x500이면 '엔진제어 상태 메세지이고 엔진 제어기가 보냄'을 알 수 있다
실제로는 하나의 제어기가 다양한 아이디에 메세지를 보냄
그렇지만 특정한 ID의 메세지를 보내는 제어기는 하나여야 됨
메세지 수신 받은 제어기들은 이 메세지가 무슨 메세지인지, 누가 보낸것인지 확인 필요
그것을 구분하기 위해 사용되는게 메세지 ID
ID별로 메세지의 이름을 붙이고, 그 메세지를 누가 보낼건지를
OEM에서 사전에 정의해둔다
이런 정보가 담겨있는 자료를
CAN Db, Can DataBase, Communiation Matrix , K-Matrix
등으로 부른다
CAN 통신에서 메세지 형태를 ID의 길이에 따라 메세지를 2가지 포맷으로 구분
이 두가지를 혼용해서 함께 사용할 수 있다
ex) 배터리 상태를 보내려 한다면
CAN 메세지 하나에 최대로 담을 수 있는 데이터는 최대 8Byte
만약 내가 메세지 안에 총 8바이트의 데이터를 보낼 거다 하면 DL에 값을8이라고 적어서 보냄
CAN DB에는 각 메시지마다 데이터 영역의 길이가 얼마인지 나타내는 정보도 있다
메세지 안에 어떤 시그널이 들어가 있는지 그 정보도 CAN DB에 담겨 있어야 된다
수신된 데이터들은 어떠한 값임