CAN通信协议介绍
CAN总线的OSI七层模型
ISO/OSI七层参考模型 | 各层定义的主要内容 | CAN通信协议中的功能 |
---|---|---|
应用层 | 由实际应用程序提供可利用的服务 | 不在CAN协议本身的范围,其他协议如:CANTP协议,UDS协议等 |
表示层 | 进行数据表现形式的转换。如:文字设定、数据压缩、加密等控制 | 不在CAN协议本身的范围,其他协议如:CANTP协议,UDS协议等 |
会话层 | 为建立会话式的通信,控制数据正确的接受和发送 | 不在CAN协议本身的范围,其他协议如:CANTP协议,UDS协议等 |
传输层 | 控制数据传输的顺序,传送错误的恢复等,保证通信的品质。如:单元间的数据交换、地址管理 | 不在CAN协议本身的范围,其他协议如:CANTP协议,UDS协议等 |
网络层 | 进行数据传送的路由选择或中继。如:单元间的数据交换、地址管理 | 消息再发送功能 |
数据链路层 | 将物理层收到的信号(位序列)组成有意义的数据,提供传输错误控制等数据传输控制流程。如:访问的方法、数据的形式。通信方式、连接控制方式、同步方式、检错方式。应答方式、通信方式、包(帧)的构成。位的调制方法(包括位时序条件) | 帧格式(消息的帧化),应答方式,错误检测等 |
物理层 | 规定了通信时使用的电缆、连接器等的媒体、电器信号规则等,以实现设备间的信号传送。如:信号电平、收发器、电缆、连接器等形态。 | 双绞线,收发器,电平高低等 |
CAN帧的类型
帧类型 | 用途 |
---|---|
数据帧 | 用于发送单元向接收单元传送数据的帧 |
远程帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧。 |
错误帧 | 用于当检测出错误时向其它单元通知错误的帧。当检测到错误时总会出现到CAN总线上 |
过载帧 | 用于接收单元通知其尚未做好接收准备的帧。常见于CAN节点和CANFD节点通信时 |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开来的帧。 |
数据帧的格式
CAN总线的错误类型
错误的种类 | 错误的内容 | 错误的检测帧(段) | 检测单元 |
---|---|---|---|
位错误 | 比较输出电平和总线电平(不含填充位),当两电平不一样时所检测到的错误 | 发送单元、接收单元 | |
填充错误 | 在需要位填充的段内,连续检测到 位相同的电平时所检测的错误 | 发送单元、接收单元 | |
CRC错误 | 从接收到的数据计算出的CRC结果与接收到的CRC顺序不同时所检测到的错误 | 接收单元 | |
格式错误 | 检测出与固定格式的位段相反的格式时送检测到的错误 | 接收单元 | |
ACK错误 | 发送单元在ACK槽中检测出隐形电平时(ACK没有被传送过来时)所检测到的错误 | 发送单元 |
CAN 错误处理
针对CAN错误有:主动错误状态、被动错误状态、总线关闭态
CAN配置方法
BSW针对CAN通信配置主要配置五个模块:EcuCollection、Com、PduR、CanIf、CAN
待处理知识点
CAN Busoff后的快恢复和慢恢复的区别
CAN节点发生busoff,是因为TEC(Transmit Error Counter)>255总线进入了总线关闭态。当节点进入Busoff模式后,为了尽快恢复节点的通信,可以让故障节点进行快恢复,重新参与通信。如果故障节点经过了几次快恢复,仍然没有恢复正常通信,为了降低对同网段其他节点的通信干扰,可以让故障节点进入慢恢复,让故障节点不要过快的加入总线,降低总线对他们的干扰。