摘要本文系统介绍了CAN总线通信中的帧格式与位填充机制。首先详细解析了数据帧、遥控帧、错误帧、过载帧和帧间隔五种帧格式的结构、功能与应用场景包括标准格式的SOF、ID、RTR、IDE、DLC、Data、CRC等字段。随后深入讲解了位填充规则及其在同步、错误识别和总线状态维护中的关键作用。文章通过图文结合的方式为读者提供了CAN总线通信协议的全面理解。CAN总线帧格式以及位填充帧格式数据帧发送设备主动发送设备广播式-- 最复杂用的最多发数据主要靠数据帧遥控帧接收设备主动请求数据请求式错误帧某个设备检测出错误时向其他设备通知错误-- 主要用于异常处理过载帧接收设备通知其尚存为做好接收设备---- 主要用于异常处理帧间隔用于将数据帧以及遥控帧与前面的帧离开一、数据帧用途发送设备主动发送数据属于广播式通讯方式图例D:Dominant简写D代表显性电平0棕色区域时序必须是显性电平0R:Recessive缩写R代表隐性电平1白色区域时序必须是隐形电平1D/R代表紫色区域时序根据发送数据的不同可以选择发D或则RACK位槽应答位特有发送方必须发隐性R1接收方必须发显性D0由此发送方释放总线接收方拉开总线表示接收方对发送方的应答允许多个接收方共同拉开总线应答是夹在发送过程中的发送方发出一位接收方就会立刻接收一位在整个数据帧还没有结束接收方已经接收完成数字此段时序所占位数标准格式SOF帧起始固定显性0打破总线空闲开始一帧数据ldentifier报文ID标准格式11位根据数据的不同可以是显性0也可以是隐性1可以表示后面数据的功能用于区分优先级多个设备同时发送根据仲裁规则ID小的报文优先发送RTR远程请求标志位用于区分数据帧还是遥控帧数据帧为显性0遥控帧为隐性1IDEID扩展标志位用于区分标准格式还是扩展模式标准格式固定显性0扩展模式固定隐性1r0保留位必须为显性0DLC表示数据段的长度Data数据段DLC指定几个字节数据段发送几个字节0~64位也就是8个字节最大8个字节CRC15位一种高效的校验算法会对前面所有的数据位进行CRC算法计算得到一个校验码接收方收到数据和校验码也会进行计算校验码一样数据正确CRC界定符一位必须是隐性电平EOF帧结束二、遥控帧遥控帧无数据段RTR为隐性电平1其他数据与数据帧相同过程接收方发送一个遥控帧广播遥控帧包含报文ID如果某个设备有这个ID的数据就会通过数据广播出来接收方就能即时获取数据所以遥控帧请求式数据传输也需要数据帧的配合请求式数据传输每传输一次数据都需要一来一回两个过程所以适合使用频率低但偶尔需要集中用几次的数据请求产生的遥控帧占用总线资源所以使用频率高的数据直接用广播式三、错误帧总线上所有设备都会监督总线的数据一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” 这些设备便会发出错误帧来破坏数据同时终止当前的发送设备错误帧可以叠加在数据帧上面并且可以破坏数据帧的数据--- 错误处理机制错误被动错误检测出错误后会连续发6个隐性位不去控制总线不去被人的数据只会破坏自己的数据主动错误设备默认处于主动错误状态检测出错误会发6个显性位主动设备产生太频繁说明设备不可靠设备就会进入被动错误状态0~6的延长时间一个设备发出的错误标志可能引发其他设备产生错误标志错误标志叠加起来就不止6位四、过载帧当接收方收到大量数据而无法处理时其可以发出过载帧延缓发送方的数据发送以平衡总线负载避免数据丢失用途接收节点暂时来不及处理报文请求发送方暂停发送给接收节点缓冲时间。接收方无法直接调整发送方的发送频率所以产生一个过载帧五、帧间隔作用帧边界分隔区分上一帧的 EOF 结束段和下一帧 SOF 帧起始。没有间隔控制器分不清一帧在哪结束、下一帧从哪开始。接收处理时间接收节点处理刚收到的报文、更新硬件寄存器把报文搬运到内存准备接收下一条报文。总线空闲判定连续检测到帧间隔的 3 个隐性位之后总线视为空闲节点才可以发起新报文发送。用途帧与帧之间的间隔给接收控制器留出处理时间区分前后两帧报文。错误状态主动错误状态帧间隔是3位被动错误状态帧间隔是3位加8位延迟传输位填充一、填充规则位填充规则发送方每发送5个相同电平后自动追加一个相反电平的填充位接收方检测到填充位时会自动移除填充位恢复原始数据例如即将发送 100000110 10000011110 0111111111110实际发送 1000001110 1000001111100 011111011111010实际接收 1000001110 1000001111100 011111011111010移除填充后 100000110 10000011110 0111111111110作用增加波形的定时信息利于接收方执行“再同步”防止波形长时间无变化导致接收方不能精确掌握数据采样时机将正常数据流与“错误帧”和“过载帧”区分开标志“错误帧”和“过载帧”的特异性经过位填充之后数据不可能超过5个的相同电平错误帧和过载帧是6个相同电平就会立马识别保持CAN总线在发送正常数据流时的活跃状态防止被误认为总线空闲CAN总线规定连续出现11个隐性1之后即总线空闲