赞
踩
一个标准的数据帧由以下组成:
帧起始由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个字节。
应用程序的大部分工作都是处理数据段里的数据。
校验的算法由CAN控制器完成,应用程序不用管它,了解一下即可。
校验的流程是发送端先计算CRC值,接收端接着也计算CRC值。如果接收端发现CRC值不对,接着就会产生CRC校验错误。
当没有CAN节点应答时,ACK段为隐性(1),当有CAN节点应答时,ACK段位显性(0)。
帧结束由7个隐性位组成。
1个隐性位(ACK界定符)+7个隐性位(帧结束)+3个隐性位(帧间隔ITM) = 11个隐性位。11个隐形位后,CAN总线进入空闲状态。
答案是不止108位,因为还需要考虑位填充(连续5个相同位后,CAN控制器会填入一个相反的位)。
一般CAN示波器就能捕捉到位填充。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。