![77b30cdeec44e7aea881eab280504015.png](https://img-blog.csdnimg.cn/img_convert/77b30cdeec44e7aea881eab280504015.png)
我们都知道车上有很多控制器,而这些控制器之间可以通过CAN、CANFD、Ethernet等总线通讯方式进行通讯,今天我们说一下最早使用的通讯协议--CAN总线。
![0b6ada6b420d2b14d1df04474c1e6460.png](https://img-blog.csdnimg.cn/img_convert/0b6ada6b420d2b14d1df04474c1e6460.png)
CAN数据总线的数据传递类似于电话会议,一个电话用户(控制单元),将数据"讲"入网络,其他用户通过网络接听这个数据,而对这个数据感兴趣的用户就会利用该数据,而其他用户则选择忽略。
可能就有人问了,如果多个人同时讲话呢(多个ECU同时发送消息)?那就引出了can通讯的数据帧格式,CAN通讯包含标准帧和扩展帧
一个标准帧包含:帧起始、仲裁场、控制场、数据场、CRC场、ACK场、帧结束;扩展帧是比标准帧多了一段额外的ID.
![3bc8780913b98d5c3c075834cedd38ab.png](https://img-blog.csdnimg.cn/img_convert/3bc8780913b98d5c3c075834cedd38ab.png)
当出现多个控制器同时讲话,这时就根据图中黄色的ID去判断谁先说话,ID数值越小优先级越高。这部分就是仲裁场。
控制场,在控制场这里要告诉我要发送的消息的长度,DLC就是data length code
数据场,包含CAN数据帧发送的内容;
CRC场,主要是用于校验发送的数据是否正确,有无缺失、增加等等;
![912fe000323d22ce6929912a0cd54717.png](https://img-blog.csdnimg.cn/img_convert/912fe000323d22ce6929912a0cd54717.png)
ACK场,ACK是用于确定报文被至少一个控制器正确接收,当控制器接到后会把总线的电平拉低,这样发送方就知道了