CAN总线的帧类型及结构

本文主要介绍can总线的帧类型及结构。
can总线定义五种帧类型,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。数据帧就是总线上传输用户数据的帧,其最高有效载荷是8字节(can fd为64字节),除了有效载荷外,数据帧还包括必要的帧头帧位部分以执行can标准通信,比如消息标识符(identifier)、数据长度代码、校验信息等。远程帧是用来向总线上其它节点请求数据的帧,它的帧结构与数据帧相似,只不过没有有效载荷部分;错误帧是表示通信出错的帧;帧间隔是用来隔离数据帧或者遥控帧的。
数据帧和远程帧有标准格式和扩展格式两种格式。标准格式有11位的标识符,扩展格式有29位标识符。
帧类型 帧用途 备注
数据帧 用于发送单元向接收单元传送数据的帧 分为标准格式和扩展格式,标准格式有11位标识符,扩展格式有29位标识符
遥控帧 用于接收单元向具有相同id的发送单元请求数据的帧
错误帧 用于当检测出错误时向其它单元通知错误的帧  
过载帧 用于接收单元通知其尚未做好接收准备的帧  
帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧 过载帧和错误帧前不能插入帧间隔
数据帧
数据帧的帧结构如下图所示:
各个字段定义及长度分别为:
sof:表示数据帧开始;(1bit)
identifier:标准格式11 bit,扩展格式29 bit包括base identifier(11bit)和extended identifier(18bit),该区段标识数据帧的优先级,数值越小,优先级越高;
rtr:远程传输请求位,0时表示为数据帧,1表示为远程帧,也就是说rtr=1时,消息帧的data field为空;(1bit)
ide: 标识符扩展位,0时表示为标准格式,1表示为扩展格式;(1bit)
dlc:数据长度代码,0~8表示数据长度为0~8 byte;(4bit)
data field:数据域;(0~8byte)
crc sequence:校验域,校验算法g(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15bit)
del:校验域和应答域的隐性界定符;(1bit)
ack:应答,确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 crc 错误。发送节点将此位为1,接收节点正常接收数据后将此位置为0;(1bit)
srr:替代远程请求位,在扩展格式中占位用,必须为1;(1bit)
eof:连续7个隐性位(1)表示帧结束;(7bit)
itm:帧间隔,intermission (itm),又称interframe space (ifs),连续3个隐性位,但它不属于数据帧。帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间。
远程帧
一般情况,数据是由发送单元主动向总线上发送的,但也存在接收单元主动向发送单元请求数据的情况。远程帧的作用就在于此,它是接收单元向发送单元请求发送数据的帧。远程帧与数据帧的帧结构类似,如下图所示。
远程帧与数据帧的帧结构区别如下表所示:
  帧起始 仲裁段 控制段 数据段 crc段 ack段 帧结束
意义 表示帧开始 表示数据优先级 表示数据段的字节数        
数据帧 1位显性位 11位或29位(rtr位为显性) 6位 0~8个字节 15位crc值和1位crc界定符 1位ack槽和1位ack界定符 7位隐性位
遥控帧 1位显性位 可请求具有相同id的数据帧(rtr位为隐性) 6位 无
当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧的 rtr 位是显性的,数据帧将在仲裁中赢得总线控制权。
错误帧
用于在接收和发送消息时检测出错误时,通知错误的帧。错误帧由错误标志和错误界定符构成。错误帧的帧结构如下图所示。
错误标志:6-12 个显性/隐性重叠位
主动错误标志(6个显性位):处于主动错误状态的单元检测出错误时输出的错误标志
被动错误标志(6个隐性位):处于被动错误状态的单元检测出错误时输出的错误标志
错误界定符:8 个隐性位
过载帧
过载帧是用于接收单元通知发送单元它尚未完成接收准备的帧。在两种情况下,节点会发送过载帧:
接收单元条件的制约,要求发送节点延缓下一个数据帧或远程帧的传输;
帧间空间(intermission)的 3 bit 内检测到显性位
每个节点最多连续发送两条过载帧。过载帧由过载标志和过载界定符(8 个隐性位)构成。过载帧的结构如下图所示。
帧间隔
帧间隔是用来隔离数据帧(或者遥控帧)的,也就是说,数据帧(或者遥控帧)通过插入帧间隔可以将本帧与先行帧(数据帧、遥控帧、错误帧、过载帧)分隔开来。但是过载帧和错误帧的前面不能插入帧间隔。
帧间隔有两种不同的形式:
主动错误状态的帧间隔
被动错误状态的帧间隔
间隔段:连续三个隐性位;间隔段期间,所有节点不允许发送数据帧或遥控帧,只要在这期间监听到显性位,接收节点就会发送过载帧。
空闲段:连续隐性位,个数不一定,0个或者多个都可以。总线空闲的时间是任意长的,只要总线空闲,节点就可以竞争总线。
暂停段:又叫做延迟传送段,只有处于被动错误状态的节点在发送帧间隔的时候,才会在帧间隔中插入8个连续隐性位的暂停段。
  以上就是针对can总线的帧结构的介绍。   


电容与电阻并联计算公式
即刻金服:AI换脸术真有那么神吗?未必,这也有bug!
希拉里落选影响:这些VR游戏都没法好好玩耍
输出端加电容为什么会造成稳定性下降?
聚焦LED进军欧美市场四大游戏规则
CAN总线的帧类型及结构
E拆解:解析在哪些地方做了科技升配的R17 Pro
环保综合监控系统解决方案
感应技术决定未来汽车行业发展关键因素
电路板焊接后检测质量的四种方法
二次供水物联网,保障冬季热水稳定供给
移远通信“数字哨兵”助力疫情防控更快捷、更高效
虹科教您 | 选择射频信号发生器前,您需要了解些什么?(一)
如何推动区块链技术落地促进人民生活质量提升?
多功能贴片机
索尼正式发布两款OLED电视 快速实现了高端消费群体的需求锁定
工业CT计算机断层成像仪可逆向工程
一撕一贴,完成传统窗帘智能化升级|奥科AM43拉绳电机评测
智慧大棚引领农业发展,用科技让大棚“开口说话”
安全阀全基础知识到应用技巧