CAN总线协议:帧格式
目录
1.CAN总线帧格式
2.数据帧(广播式传输)
3.数据帧各部分用途简介
4.数据帧的发展历史
5.遥控帧(请求式传输)
6.错误帧
7.过载帧
8.帧间隔
9.位填充
例如:
位填充作用:
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
r0:必须为显性0,r0意思是保留位,目前还没用到,最开始时IDE也是保留位,叫r1
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字节,无数据内容











