基于使STM32的CAN总线的学习【帧格式】(江协科技视频)

CAN总线的五种帧格式

(本质就是一种数据内容)

数据帧、遥控帧、错误帧、过载帧、帧间隔。

重点学习内容数据帧(遥控帧与数据帧确实是类似相通的)
错误帧、过载帧(用于处理异常的数据)
帧间隔:(分割帧与帧之间的间隔)

数据帧:

作用:

主动向设备发送数据,【广播式的通讯方式】(一条指令可以被多台设备接收);

数据帧:标准格式、拓展格式

标准格式:

起始帧(SOF)【必须】是显性(打破空闲总线)
仲裁帧(Identifier)【报文ID】通常作为功能码同时还用于区分优先级(ID小,优先级大)
【后续章节会补充仲裁规则】
远程请求标志位(RTR)【区分数据帧或遥控帧的主要位置】数据帧里RTR必为显性0,若是遥控帧则RTR必定为隐形1(ID相同时,优先级:数据帧>遥控帧)
起始帧(SOF)+  远程请求标志位(RTR)==仲裁段
仲裁段的作用:实现仲裁功能,保证指令的一个稳定有序发送出。

ID拓展标志位(IDE): 用于区分标准格式还是扩展模式(标准格式:显性0;扩展格式:隐形1)
保留位(R0):协议开发者预留的一个升级空间的一个位置,目前还未使用(必须为显性0)
【工程预留升级空间思维:CAN分1.0和2.0版本,有兴趣的同学可以去了解一下(IDE以前其实是叫R1,不过后来升级后优化了)(吐槽一句:比I2C聪明 [狗头保命] (可能是吸取经验了)】 
数据段长度:(DLC)【用于控制数据段的长度0-8,靠DLC灵活指定】(一般来说要传数据,那么最好是大于0)

数据段(Data):空间大小会变化,与DLC大小有关,长度区间为0个字节到8个字节(0-64位)
校验段(CRC):CRC算法校验段。计算从开始到校验段之前的所有数据,然后生成一个校验码(身份证有用到这个东东)【有机会开一单元关于校验位的一个算法】
CRC界定符:1位【必须是隐形】
ACK段:ACK槽(ASK Shot)和ACK界定符
ACK槽(ASK Shot):重点用于应答,用来确定是否有设备接收到。
显性0:有接收方;隐形1:无接收方
ACK界定符:用于与界定范围。
结束帧(EOF) :7个隐形1,作为结束段

发送方和接收方一起共同构成里CAN总线,CRC界定符之前,是发送方发送,接收方边接收。当进入到ACK段的时候,其实是一个关于接收方对总线的一个影响状态下,实现对于ACK槽(ASK Shot的影响)从实现收发双方之间的一个交互。


标准格式与扩展格式的分界段 


拓展帧格式:

【基于标准格式的内容补充与添加】
扩展帧格式:(拓展格式的11位ID不足够用,同时需要兼容之前的格式)

SRR:替代RTR位【由于仲裁规则的影响,RTR应在ID之后】(虽然无直接的一个作用,但是需要给隐形电平1)
ID拓展标志位(IDE)【见上面,有详讲】(扩展格式:隐形1)
扩展格式(Identifier)【报文ID】
r1:(IDE已经存在,故扩展格式中恢复起原身:r1)
【后续的格式与标准格式相通】

扩展格式与标准格式的区别【SOF至于R0的一个段落内部存在简易的差异,内容有所差距】
【关于CRC的不同就可以不用提及了,因为CRC是基于前面数据计算的,当是一个与前面内容有关的变量有关的变量就好了】


整体总结:(如下图所示)(实在记不住也不用太过于担心,可以和视频过一遍)

CAN的发展史

CAN1.2—–>CAN2.0 (本章节讲的是) 

遥控帧:

遥控帧:无数据段;RTR为隐形电平1【其它格式与数据帧相同】

背景:当用广播式的时候,存在占用大量的一个总线资源,为了避免这个情况,于是遥控帧诞生【遥控帧本身也是一种广播式的情况,由于本身长度等比数据帧短,所以整体占用资源少,由于CAN本身可以理解为多主机的情况,利用遥控帧来实现一个机器之间的一个握手通讯,实现对指定目标的一个数据发送】
使用场合:使用频率低,但是偶尔又需要使用一次
【表格上的代表与其数据帧的代表意思本身一致】


错误帧、过载帧、帧间隔:初学者不用太过纠结 ,大致知道其用途即可


错误帧:

总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备。
【错误帧的定义也与本身的位填充规则有关】

过载帧:

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失。

帧间隔:

将数据帧和遥控帧与前面的帧分离开。

位填充:

位填充规则:

发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据。

位填充作用:

增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机
将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性
保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲
【简单总结一下意思与规则:避免信号本身长时间保持一种电平,导致无法很好的判断数据本身的一个正确性与时序性,为了避免这个问题,CAN采用了位填充的做法,每当5段(最低的时基信号)电平一模一样的时候会信号突变一下,来确保信号的一个准确性(这个也是为什么错误帧会发送至少6段相同的电平的原因)】
【位填充:会做到改变信号的基本电平总情况,但是收发两段都会进行一个处理,位填充可以理解为是一个减少报错的手段】

例:(颜色为红色的数字为位填充规则所导致的一个补充位)
即将发送:    100000110         10000011110          0111111111110          
实际发送:    1000001110       1000001111100       011111011111010          
实际接收:    1000001110       1000001111100       011111011111010          
移除填充后: 100000110        10000011110            0111111111110
实际电平情况:(参考江协科技的资料)

(各位大佬可以指出一些错误,也欢迎大家一起交流)

作者:绪韵

物联沃分享整理
物联沃-IOTWORD物联网 » 基于使STM32的CAN总线的学习【帧格式】(江协科技视频)

发表回复