依照瑞萨公司的《CAN入门书》的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成笔记。好记性不如烂笔头,加油!
1 错误帧的帧结构
在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。
错误帧由错误标志和错误界定符两个部分组成。
- 主动错误标志:6个连续的显性位;
- 被动错误标志:6个连续的隐性位;
- 错误界定符:8个连续的隐性位。
可以看到在错误标志之后还有0~6位的错误标志重叠,这一段最低有0个位,最多有6个位,关于这一段是怎么形成的,将在下文中解释。
2 错误检测
2.1 位填充原则
在了解CAN总线中的错误检测之前,首先需要了解什么是位填充。
CAN协议中规定,当相同极性的电平持续五位时,则添加一个极性相反的位。
- 对于发送节点而言:
在发送数据帧和遥控帧时,对于SOF~CRC(除去CRC界定符) 之间的位流,相同极性的电平如果持续5位,那么在下一个位插入一个与之前5位反型的电平; - 对于接收节点而言:
在接收数据帧和遥控帧时,对于**SOF~CRC(除去CRC界定符)**之间的位流,相同极性的电平如果持续5位,那么需要删除下一位再接收。
Tips: 注意:填充位的添加和删除是由发送节点和接收节点完成的,CAN-BUS只负责传输,不会操纵信号。
2.2 错误的种类
在CAN总线通信中,一共有五种错误:
- 位错误
- ACK错误
- 填充错误
- CRC错误
- 格式错误
2.2.1 位错误(Bit Check Error)
节点将自己发送到总线上的电平与同时从总线上回读到的电平进行比较,如果发现二者不一致,那么这个节点就会检测出一个位错误。