文章内容来自:CAN总线的特点和帧结构
CAN 总线数据收发的基本单位是帧。
CAN 报文的发送基于优先级。
发送优先级根据CAN ID确定。
CAN协议帧主要有4种类型:数据帧,遥控帧,错误帧,超载帧。
其中,数据帧主要承载ID+数据,遥控帧用于请求某ID的数据,错误帧用于传输出错时通知,超载帧用于告知当前帧传输已超出CAN传输速率负载。
具体介绍如下:
目录
数据帧——7个不同段组成
用于:发送单元向节后单元传送数据的帧
组成:帧起始 SOF,仲裁段ID,控制段,数据段,CRC段,帧结束EOF
帧起始 SOF
1个显性位
仲裁段 ID
分为标准格式和扩展格式
标准格式包含:11位标识符+远程发送请求RTR=0
扩展格式包含:29位标识符,SRR位,IDE位,RTR位
IDE:保证标准遥控帧的优先级高于扩展遥控帧;标准格式下,取值显性电平0
SRR:保证标准数据帧的优先级高于扩展数据帧;替代远程请求(Substitute Remote Request,SRR)位为隐性
RTR:保证数据帧优先级高于遥控帧;远程发送请求RTR——RTR位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。它是区别数据帧和远程帧的标志。
控制段
-
6bit
-
r0 r1预留为0,接收到为1时(如果DLC为9-15,统一处理为8)
-
DLC表示数据段的数据长度: 0-8字节
数据段
-
0-8字节(每个字节8bit)
-
从最高位发送
CRC循环冗余校验段
用于校验数据是否正确发送
-
CRC序列 15bit
-
根据多项式生成,计算范围(SOF,仲裁段,控制段,数据段)
-
-
CRC界定符 1bit(用于分隔)——恒为隐性
应答段
用于确认是否正常接收。
组成:应答间隙 1bit ,应答界定符 1bit
使用:发送单元(发送2个隐性bit),接收单元(正确接收时, 发送1个显性bit+1个隐性bit)
EOF 帧结束
7个隐性位
远程帧
作用:通过发送遥控帧(或远程帧),需要数据的节点可以请求另一节点发送相应的数据帧,如下图。数据帧和相应的远程帧是由相同的识别符( ID)——仲裁场命名的。
帧格式与数据帧基本相同,以下几点不同:
-
没有数据场
-
远程标志位RTR=1 隐性
-
没有标准帧,扩展帧之分
错误帧
作用:当检测出错误时,向其他单元通知错误的帧
功能:错误检测,错误通知,错误恢复
-
错误检测功能:所有的节点都可以检测错误(错误检测功能)。
-
错误通知功能:检测出错误的节点会立即同时通知其他所有节点(错误通知功能)。
-
错误恢复功能:检测CAN上的错误,累积一定次数,传送的报文立即停止。出错的节点,会强制结束当前的发送,退出总线,进入BusOff状态。强制结束发送的节点会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
五种错误:
-
位错误:收发器检测,if发出的数据位与检测的位不一致。
-
位填充错误:CAN总线对报文填充,如果5个相同电平,则对其填充一个反向。6个相同电平的位,则出错
-
CRC错误:发送端发送时计算CRC,并发给接收端,接收端根据接收数据计算CRC,并对比接收到的CRC,if不一致
-
帧格式错误:报文不符合‘场’的格式
-
应答错误:if应答间隙is隐性,即代表无应答节点
超载帧
作用:用于接收单元 通知 其尚未做好接收准备的帧
组成:超载标志6个显性位,超载界定符8个隐性位
触发条件:
-
接收器未准备就绪
-
间歇场检测到显性位