一、报文的概念
1、1个byte是指一个字节;1个bit是指一个2进制位
1byte=8bit
2、报文是以帧的格式发送,每帧又有七个部分,CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。其中我们最关注的是数据帧中的数据段,这是对我们来说有用的信息。一个数据帧传输的数据量为0~8个字节
注意:CAN2.0协议分为A版本和B版本,A版本协议为11位标识符(标准帧)
,B版本在兼容11位ID标识符的同时,向上扩展到29位ID标识符
。
3、报文ID
CAN总线ID是包含在报文帧中的:
1、主要用作CAN总线的仲裁使用
,所以一般来说网络上的每个节点(向总线上发送)的ID应该有所不同。ID值越低,报文优先级越高,在两组不同ID报文同时上线时候,仲裁机制使得ID值低的占用总线,ID值高的退出
。
2、ID域可以是11位和29位
,其值和含义可以由用户自定义,可以用作高层协议的管理,比如CANopen等协议中把ID的部分做为“源地址”,部分作为“目的地址”,这样CAN报文从哪来到哪去都清晰了。
3、ID的另一个作用是配合接收方滤波
使用,就是说一般接收的滤波器可以设定接收ID的范围等,用于过滤掉不需要接收的信息,减轻CPU的处理负担。
ID值越低,报文优先级越高,在两组不同ID报文同时上线时候,仲裁机制使得ID值低的占用总线,ID值高的退出
ID是赋给帧的,不是直接给节点的,只是某节点知道自己要接收某个ID的帧。总线上的节点来说它只管取总线上他应该取的ID的帧,并不管是谁发的。
重点: 发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预
。
报文id相同问题
当两节点同时发送ID相同数据不同的报文
时,将发生数据场填充错误
;当两节点同时发送ID相同数据也相同
的报文时,若有其他节点应答则不发生错误,若无其他节点应答则发生应答错误
。因此,我们在设计CAN总线时应避免ID段相同的情况出现。
4、报文解析过程,此处主要解析数据段
一个数据段有0~8个字节
,每个byte有8个bit,每个bit可表示一个2进制数,因此,可以把一个byte分为高字节、低字节(一个字节可以表示两个16进制数,高低字节各表示一个16进制数)。