上一节 <https://blog.csdn.net/anew_moon/article/details/85619070>
中初步接触CAN总线,梳理了一些关于CAN总线的基础内容。本节将深入了解CAN总线的结构,包括报文的组成,内容和处理形式。
另外这一片文章 <https://blog.csdn.net/liuligui5200/article/details/79030676>
,对CAN报文的结构解析的非常明确,可以先通过这篇文章了解一下,后面在对其进行总结。

看到一个关于CAN总线工作原理非常形象的一个比喻:

和其他总线一样,CAN总线的通信也是通过一种类似于“会议”的机制实现的,只不过会议的过程并不是由乙方(节点)主导,而是每一个会议参加人员都可以自由的提出会议议题(多主通信模式),二者对应关系如下:


<>CAN报文协议

CAN协议是通过以下5种类型的帧进行的:

* 数据帧:用于发送单元想接收单元传送数据的帧
* 遥控帧:用于接收到单元向具有相同ID的发送的单元请求数据的帧。
* 错误帧:用于当检测出错误时想其他单元通知错误的帧
* 过载帧:用于接收单元通知其他尚未做好准备的帧
* 间隔帧:用于将数据帧和遥控帧与前面的帧分离开来的帧。
CAN协议支持两种报文格式,其唯一的不同是标识符长度不同,标准格式为11位,扩展格式为29位。数据帧和遥控帧包含这两种格式。
数据帧一般有7个段构成:
帧起始——表示数据帧开始的段
仲裁段——表示该帧优先级的段,由远程传输请求位(RTR)组成,RTR标明是数据帧还是请求帧,请求帧没有数据字节;
控制段——表示数据的字节数及保留位的段,包含标识符扩展位(IDE)
,指出是标准格式还是扩展格式。还包括一个保留位(用于将来扩展)。最后四个位用来指明数据场中的数据的长度(DLC)
数据段——数据的内容,一个帧可以发送0—8个字节的数据
CRC段——检查帧的传输错误的段、
ACK段——确认可以正常接收的段,包括应答位和应答分隔符。均为隐形电平(逻辑1)
帧结束——表示数据帧结束的段。
如下图,是数据帧的构成:


标准格式的数据段:识别符(ID)的长度 为11位,这些为按ID28到ID18的顺序发送,最低位是ID18, 7个最高位(ID28-ID22)不能全是隐形;
扩展格式的数据段
:标识符长度为29位,是在标准标识符的基础上增加18位扩展符,可以分为11位的基本ID和18位的扩展ID,基本ID按ID28—ID18的顺序发送,基本ID定义扩展帧的基本优先权。
扩展ID包含18位,按照ID17—ID0顺序发送。
RTR位:在标准帧里识别符后面是RTR位,其在数据帧里必须全是显性,在请求帧里必须全是隐性。
SRR位(扩展格式):替代远程请求位(substitute remote request
bit),是一个隐性位,带替扩展格式中标准帧的RTR位的位置,因此在标准帧与扩展帧冲突时,通过标准帧优先于扩展帧这一途径解决。

CAN总线的工作原理(流程图):


参考:
https://wenku.baidu.com/view/ef57d00502020740be1e9b7f.html?sxts=1546419950698
<https://wenku.baidu.com/view/ef57d00502020740be1e9b7f.html?sxts=1546419950698>

https://wenku.baidu.com/view/7c6e8c3c50e2524de4187e53.html?rec_flag=default&sxts=1546419708212

<https://wenku.baidu.com/view/7c6e8c3c50e2524de4187e53.html?rec_flag=default&sxts=1546419708212>
https://www.cnblogs.com/spoorer/p/6649303.html
<https://www.cnblogs.com/spoorer/p/6649303.html>

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信