CAN总线之通俗易懂----报文2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/langshi_2011/article/details/90207837

2. 远程帧

远程帧与数据帧十分相似,但是有两个重要的区别:

  • 它被显式标记为远程帧(仲裁字段中的RTR位为隐性),并且
  • 它没有数据字段。

远程帧的预期目的是征求传输相应的数据帧。例如,如果节点A传输一个仲裁字段设置为234的远程帧,那么节点B(如果已经正确初始化)可能通过一个仲裁字段也设置为234的数据帧进行响应。

远程帧可以用来实现总线通信管理的请求-响应类型。但是,远程帧在实践中很少使用。还有一点值得注意的是,CAN标准没有规定这里列出的特性。大部分CAN控制器都可以进行编程自动响应远程帧或通知本地CPU。

关于远程帧的一个注意事项:数据长度代码必须设置成预期响应报文的长度。否则仲裁将不起作用。

有时据称响应远程帧的节点会在识别标识符后立即开始传输,从而“填充”空的远程帧。但是事实并非如此。
远程帧(2.0A类型):

1 CAN msg 2-3

3. 错误帧

简单地说,错误帧是一种违背CAN报文帧规则的特殊报文。一个节点咋在检测到故障时传送错误帧,这将导致所有其它节点也检测到故障,它们也将发送错误帧。然后传送节点将自动尝试重传报文。有一种精准的错误计数器方案,可以确保节点无法通过重复传输错误帧来破坏总线通信。

错误帧包含一个错误标志。这个错误标志是6位长的相同值(因此违背位填充规则)和一个错误定界符(8个隐性位)。错误定界符提供一些空间,以便总线上其它节点在检测到第一个错误标志时可以发送它们的错误标志。

错误帧图示如下:

2 CAN msg 2-3

4. 过载帧

这里,我们仅仅出于知识完整性目的而提及过载帧。在格式方面,过载帧与错误帧非常相似,并且由会变得重荷的节点传送。过载帧并不常用,因为当今的CAN控制器会非常智能化地避免使用过载帧。事实上,会生成过载帧的唯一一种控制器是现在已经过时。

标准CAN和扩展CAN

最初,CAN标准把仲裁字段中标识符的长度定义为11位。后来,客户的需求推动了该标准得延伸。新格式通常称为扩展CAN,标识符不允许少于29位。为了区分这两种帧类型,在控制字段中使用了一个保留位。

标准的正式名称是

  • 2.0A,仅支持11位标识符
  • 2.0B,支持完整的29位标识符(也可以混合使用11位标识符)的扩展版本。2.0B节点可以是
    • “2.0B主动型”,也就是说,它可以发送和接收扩展帧,或者
    • “2.0B被动型”,也就是说,它将静默丢弃接收到的扩展帧(但是请参考下述内容)
  • 1.x表示初始规范及其修订版。

如今的新型CAN控制器通常是2.0B类型。1.x或2.0A类型的控制器如果接收到29个仲裁位的报文会很麻烦。2.0B被动型控制器容许这些报文,如果它们正确的话会进行应答,然后抛弃这些报文。2.0B主动型控制器既可传送也可接收这些报文。

实现2.0B和2.0A(和1.x)的控制器相互兼容,并且可以在同一总线上使用它们,则只要实现2.0B的控制器不发送扩展帧即可!

有时候人们说标准CAN“优于”扩展CAN,因为扩展CAN报文会产生更多的间接费用。这种说法未必正确。如果您使用仲裁字段来传送数据,那么扩展CAN实际上的发生的间接费用可能比标准CAN少。

猜你喜欢

转载自blog.csdn.net/langshi_2011/article/details/90207837
今日推荐