CAN总线协议:帧格式 - 实践
目录
高位先行的)就是10.波形实例(图中标黄的是填充位)(CAN总线
11.波形实例(图中标黄的是填充位)(CAN总线是高位先行的)
1.CAN总线帧格式
CAN协议规定了以下5种类型的帧:
2.数据帧(广播式传输)


标准ID是11位的,所以标准ID号的范围是0x000~0x7FF
扩展ID是29位的,不是4的整数倍,所以扩展ID号的范围是0x0000 0000~0x1FFF FFFF
3.数据帧各部分用途简介
SOF(Start of Frame):帧起始,表示后面一段波形为传输的数据位
ID(Identify):标识符,区分功能,同时决定优先级
RTR(Remote Transmission Request ):远程请求位,区分资料帧和遥控帧
IDE(Identifier Extension):扩展标志位,区分标准格式和扩展格式
SRR(Substitute Remote Request):替代RTR,协议升级时留下的无意义位
r0/r1(Reserve):保留位,为后续协议升级留下空间
DLC(Data Length Code):数据长度,指示数据段有几个字节
Data:数据段的1~8个字节有效数据
否正确就是CRC(Cyclic Redundancy Check):循环冗余校验,校验信息
ACK(Acknowledgement):应答位,判断数据有没有被接收方接收
CRC/ACK界定符:为应答位前后发送方和接收方释放总线留下时间
EOF(End of Frame ):帧结束,表示数据位已经传输完毕
补充说明:
RTR:远程请求标志位,用于区分资料帧还是遥控帧,数据帧为显性0,遥控帧为隐形1
RTR加入仲裁帧的作用是为了让仲裁区分相同的材料帧和遥控帧,数据帧的优先级大于遥控帧
IDE:用于区分标准格式还是扩展格式,标准格式为显性0,扩展格式为隐性1
保留位,叫r1就是r0:必须为显性0,r0意思是保留位,目前还没用到,最开始时IDE也
DLC:数据段的长度,CAN总线一帧内容能够有1~8字节有效载荷,发一个字节:0001(显显显隐),发8个字节:1000(隐隐隐显),要配合数据段应用,内容段发送的字节必须是8的倍数
CRC:校验算法,校验发送的数据是否有误
CRC界定符:1位,必须是隐性电平
ACK槽:应答;当发送方发送一帧数据的关键内容后,在应答这一位时,发送方释放总线,总线回归默认状态,隐性1,如果接收方收到数据,就会在ACK槽这一个,把总线再拉开,使总线呈现显性0的状态
发送方释放总线后,在ACK槽会读取总线状态,如果发送方读取位显性0,就正常工作,如果读取为隐性1,就说明发送失败,发送方可以配置自动重发,也可以不管
可以发现在ACK槽的前后,操作总线的权力是有个短暂的交换的,前面所有的波形,都只有发送方有权操作总线,在ACK槽这一位时,变为接收方处理总线,为了给权力交接留出时间,ACK槽前后就要留两个界定符,在CRC界定符时,发送方必须发隐性1,除了做一个分隔,另外一个作用时,在ACK槽之前,发送方必须释放总线,发送隐性1就是释放总线,之后在ACK槽的时间点,接收方会拉开总线,ACK槽接收后,接收方不能一直拉着不放,,于是在ACK界定符时,接收方必须及时释放总线,交出控制权,给隐性1,这就是ACK槽的设计
注意事项
1.ACK槽时,许可允许多个接收方共同拉开总线,因为一个报文消息,可以被多个设备同时接受,所以能够允许多个接收方共同拉开总线
2.发送方并不是把一段波形完整发出去,然后再接受应答的 ,而是,发送方和接受方共同完成一整个波形,发送方每发出一位,接收方就立刻收到这一位
4.信息帧的发展历史
CAN 1.2时期,仅存在标准格式,IDE位当时仍为保留位r1
CAN 2.0时期,ID不够用,出现了扩展格式,增加了ID的位数,为了区分标准格式与扩展格式,协议将标准格式中的r1赋予了新功能—IDE
5.遥控帧(请求式传输)
遥控帧无数据段,RTR为隐性电平1,其他部分与数据帧相同
请求式传输,每传输一次数据,都要求一来一回的两个过程,适合使用频率低,但偶尔又需要集中用几次的数据
6.错误帧
总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备
7.过载帧
当接收方收到大量数据而无法处理时,其行发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失
8.帧间隔
将素材帧和遥控帧与前面的帧分离开
9.位填充
位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据
例如:
即将发送: 100000110 10000011110 0111111111110
实际发送: 1000001110 1000001111100 011111011111010
实际接收: 1000001110 1000001111100 011111011111010
移除填充后: 100000110 10000011110 0111111111110
位填充作用:
增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握内容采样时机(解释:若是一直波形都不变化,没有明确的分界点,接收方无法精准的确定采样点的准确位置)
连续6位相同的电平就是将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性,源于“错误帧”和“过载帧”
保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲,CAN总线规定,当总线出现11个隐性1后,即认为总线空闲
10.波形实例(图中标黄的是填充位)(CAN总线是高位先行的)
标准数据帧,报文ID为0x555,数据长度1字节,数据内容为0xAA
标准数据帧,报文ID为0x666,数据长度2字节,数据内容为0x12, 0x34
11.波形实例(图中标黄的是填充位)(CAN总线是高位先行的)
扩展数据帧,报文ID为0x0789ABCD,素材长度1字节,内容内容为0x56
标准遥控帧,报文ID为0x088,数据长度1字节,无数据内容












浙公网安备 33010602011771号