-
CAN总线协议有CAN1.0、CAN2.0(CAN2.0A、CAN2.0B)
-
CAN2.0B协议报文按照标识符的长度不同,分为两种格式:标准帧(11位标识符)、扩展帧(29位标识符),其中扩展帧只适合于CAN2.0B
-
CAN2.0B中为了适应不同的数据传递过程,定义了4种帧类型:
数据帧、远程帧、错误帧、超载帧,其中只有数据帧和远程帧可以使用标准帧及扩展帧两种格式。
- 数据帧:用于不同 CAN 总线节点之间数据传递的载体。单个数据帧结构如图2-1。
4.1 概要:“大家好,这是一些标签为X的数据,希望满足您的需要!”
4.2 数据帧是最常见的报文类型,CAN 协议中的帧结构按照功能定义为不同的域,以数据帧为例,从 2-1 图中看出帧结构总体分为:帧起始域、仲裁域、控制域、数据域、CRC 域、应答域、帧结束域 。分别描述如下:
4.3 帧起始域:由一个显性位来表示一个数据帧或远程帧的起始,用于不同节点之间的数据同步。
4.4 仲裁域:标准帧格式中,仲裁域包括 11 位的标识符和远程发送请求位,而在扩展帧格式中,仲裁域包括 29 位标识符和替代远程请求位(SRR),标识位(IDE)和远程发送请求位(SRR)。其中的标识符(帧 ID)用来体现报文优先级(对于CAN 2.0B,一个29位的标识符(其中还包含两个隐性位:SRR和IDE)和RTR位。)。
4.5 控制域:主要用于表示数据域中的数据长度,由数据长度码和两个保留位组成。数据长度码表明了数据域中字节数目,保留位为“显性”。
4.6 数据域:由所要发送的数据填充。最大可以包含 8 个字节(一个自己表示CAN报文数据部分的2个字母)。
4.7 CRC 域:表示本报文的 CRC 校验码。
4.8 应答域:用于表示数据接收节点成功接收数据后的应答信息。
4.9 帧结束:由 7 个“隐性”位的序列来表示数据帧或远程帧的结束。
- 远程帧:不携带具体数据,用于请求相应的数据帧的信息报文。远程帧结构如图 2-2。
5.1 概要:“大家好,有没有人能够生成标签为X的数据?”
5.2 远程帧与数据帧十分相似,但是有两个重要的区别:
- 它被显式标记为远程帧(仲裁字段中的RTR位为隐性),并且
- 它没有数据字段。
5.3 远程帧的预期目的是征求传输相应的数据帧。例如,如果节点A传输一个仲裁字段设置为234的远程帧,那么节点B(如果已经正确初始化)可能通过一个仲裁字段也设置为234的数据帧进行响应。
5.4 远程帧可以用来实现总线通信管理的请求-响应类型。但是,远程帧在实践中很少使用。还有一点值得注意的是,CAN标准没有规定这里列出的特性。大部分CAN控制器都可以进行编程自动响应远程帧或通知本地CPU。
- 错误帧:作为总线错误的指示报文,向数据发送点提示进行错误处置。错误帧结构如图 2-3。
6.1 概要:“大家好(大声),让我们重新试一下”
6.2 错误帧包含一个错误标志。这个错误标志是6位长的相同值(因此违背位填充规则)和一个错误定界符(8个隐性位)。错误定界符提供一些空间,以便总线上其它节点在检测到第一个错误标志时可以发送它们的错误标志。 - 超载帧:接收节点用于向数据发送节点表示自身暂时无法接收数据帧,进行等待延时。超载帧结构如图 2-4。
7.1 概要:“我是非常繁忙的小型82526,您可以稍等片刻吗?”
7.2 过载帧并不常用,因为当今的CAN控制器会非常智能化地避免使用过载帧。事实上,会生成过载帧的唯一一种控制器是现在已经过时的82526。
以上图片均来源于网络,若有侵权请帮忙告知,会及时删除。