CAN总线技术 | 数据链路层02 - 帧结构

一、前言


一个标准的数据帧由以下组成:

  1. 帧开始
  2. 仲裁段
  3. 控制段
  4. 数据段
  5. CRC段(校验)
  6. ACK段
  7. 帧结束
    以上的元素,缺一不可,否则没法通过CAN控制器的校验,应用程序无法获取CAN报文。

二、帧开始


帧起始由1个显性位(逻辑0)组成,用于CAN总线上各个CAN节点的同步。在CAN总线空闲时,总线是隐性(1)。由于CAN总线是电平逻辑是"线与原理",所以当其中一个CAN节点发送帧起始(显性0),CAN总线会从隐形1变成显性0,各个节点进行同步
在这里插入图片描述

三、仲裁段


标准帧与拓展帧在这里有区别,CANID的过滤器与CANID的优先级都在仲裁段完成。在STM32的CAN控制与FDCAN控制上,发送CAN报文之前需要对RTR寄存器赋值,表示即将发送的CAN报文是标准帧还是远程帧。
实际工作上,分配CAN_ID时(或者Node_ID)时需要从仲裁段思考。哪些CAN节点的通讯优先级比较高,通讯优先级高的CAN节点配置较小的CAN_ID(或者Node_ID)。
在这里插入图片描述

四、控制段


标准帧与拓展帧在这里有区别,DLC规定了数据段的长度。在STM32的CAN控制与FDCAN控制器,发送CAN报文之前需要对DLC寄存器赋值,表示即将发送的CAN报文的数据段有多少个字节。
其中DLC段需要应用程序控制,决定数据段有多少个字节的数据。
在这里插入图片描述

五、数据段


数据段比较简单,最大8个字节(当DCL设置8时)。当DCL设置0时,数据段为0个字节。
应用程序的大部分工作都是处理数据段里的数据。
在这里插入图片描述

六、CRC段(校验)


校验的算法由CAN控制器完成,应用程序不用管它,了解一下即可。
在这里插入图片描述
校验的流程是发送端先计算CRC值,接收端接着也计算CRC值。如果接收端发现CRC值不对,接着就会产生CRC校验错误。
在这里插入图片描述

七、ACK段(应答段)


当没有CAN节点应答时,ACK段为隐性(1),当有CAN节点应答时,ACK段位显性(0)。
在这里插入图片描述

八、帧结束


帧结束由7个隐性位组成。
在这里插入图片描述

九、帧间隔ITM

1个隐性位(ACK界定符)+7个隐性位(帧结束)+3个隐性位(帧间隔ITM) = 11个隐性位。11个隐形位后,CAN总线进入空闲状态。
在这里插入图片描述

十、一个数据段长度为8的标准帧,总共多少个位呢?是108位吗?

答案是不止108位,因为还需要考虑位填充(连续5个相同位后,CAN控制器会填入一个相反的位)。
在这里插入图片描述
一般CAN示波器就能捕捉到位填充。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值