8.2 CAN总线接口–协议
这一节我们将详细地了解CAN总线的协议以深入地掌握CAN总线应用和设计。目前CAN总线的标准化被分割成6个部分,即ISO 11898-1~6, 这个6个部分分别对CAN总线的链路层和物理层、高速物理介质附属层、低速物理介质附属层、时间触发的CAN通讯(即TTCAN)、低功耗的高速物理附属层、 可选择性唤醒的高速物理附属层等进行标准化以便于全球CAN网络节点制造商的产品能够相互兼容和互联。这些标准化文档的简介在ISO组织网站[1]可以搜索到, CAN网络节点产品的开发者必须仔细阅读这些文档确保自己的产品遵循这些标准。
目前在用CAN总线版本分为2.0A、2.0B、FD,虽然CAN XL已经启动但尚未正式应用,除了已废止的标准,在用的ISO 11898的6个部分分别对这三种版本的低层协议实施标准化。 低层协议仅包括数据链路层(DLL)和物理层(PHY),CAN总线的高层协议基本上与行业有关。
在8.1节我们从CAN2.0A的一个标准数据帧的位流开始了解CAN总线,现在我们再深入了解CAN2.0A标准的协议。 CAN2.0A标准协议支持4种协议帧:标准数据帧、远程请求帧、错误帧和过载帧,其中错误帧和过载帧都属于容错处理。当数据帧发送节点发送数据期间侦测到数据发送错误, 则发起主动错误帧(由连续6个显性位‘0’代表错误帧标志和连续8个隐性位’1‘代表错误定界符)告知CAN网络上其他节点放弃本次通讯,当数据帧接收者侦测到数据错误时, 则可以直接发出被动错误帧(由连续6个隐性位‘1’代表错误帧标志和连续8个隐性位’1‘代表错误定界符)。当网络接收者侦测到连续的数据帧之间侦测到非法的显性位‘0’时, 则直接发出过载帧(由连续6个显性位‘0’代表过载帧标志和连续8个隐性位’1‘代表过载帧定界符)。根据我们目前对CAN总线的竞争和仲裁方法的认识,被动错误帧不影响数据帧的发送, 过载帧被触发时将会破坏数据帧的发送,这是因为6个连续的显性位‘0’将违反CAN总线的位填充规则,迫使数据帧的发送者停止发送或发起主动错误帧。
CAN总线的错误帧和过载帧的协议设计十分巧妙,使得CAN总线的数据传输效率极高且容错性也很高。事实上,在用的几种CAN总线版本始终沿用CAN2.0A的这种容错处理机制。 图8.6给出CAN2.0A标准的数据帧和远程请求帧,这两种位流是最常用的正常位流。信息发送者使用数据帧将节点数据广播到网络上,其他节点根据消息ID确定是否处理该消息。 某些节点需要主动地从其他节点读取信息时,只需要将远程请求帧(仅包含消息ID且无数据域)广播到网络上,然后具有对应消息ID的CAN网络节点将会发送一个标准的数据帧(包含有远程请求帧ID和数据), 到网络上,主动发起远程请求帧的CAN总线节点将会收到请求的数据。
图8.6 CAN2.0A协议帧(标准数据帧和远程请求帧的位流格式)