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

保留位,叫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字节,无数据内容

posted @ 2025-12-08 10:40  gccbuaa  阅读(35)  评论(0)    收藏  举报