分享

CAN数据格式

 goodwangLib 2018-05-12

1.名词

1)显性和隐性
    显性-0  隐性-1(diff=0)
    
2)数据帧、远程帧、错误帧、过载帧、帧间隔
    数据帧:用于发送节点向接收节点传送数据的帧
    远程帧:用于接收节点向具有相同ID的发送节点请求数据的帧
    错误帧:用于当检测出错误时向其他节点通知错误的帧
    过载帧:用于接收节点通知其尚未做好接受准备的帧
    帧间隔:用于将数据帧及远程帧与前面的帧分离开来的帧
3)远程数据请求
    通过发送远程帧,一个需要数据的的节点可以请求另一个节点发送相应的数据帧,称为远程数据请求。数据帧和相应的远程帧具有相同的标识符。

2.CAN标准帧与CAN扩展帧格式


    数据帧和远程帧都可以使用标准帧格式或者扩展帧格式。
    RTR:远程发送请求位,数据帧中为显性,远程帧中为隐性。
    SRR:替代远程请求位(在扩展格式中在RTR位置,所以得此名),隐性位。此位可判断出标准帧优先于扩展帧。
    IDE:标识符扩展位,标准帧-显性,扩展帧-隐性,表示该帧为标准帧还是扩展帧。
    R1、R0:保留位。
    DLC:数据长度代码,如下图所示,包括下图中的DLC3、DLC2、DLC1、DLC0:
    
    
    CRC段:由CAN控制器自动填充。
    CRC分隔符:隐性位。
    ACK段:2位,由CAN控制器自动填充。包括应答位和应答界定位。应答界定位紧邻帧结束。在应答域中,发送器发出两个隐性位,当接收器正确的接收到有效的报文,该接收器就会在应答位期间,用一显性位填充应答位作为回应,而应答界定位一直保持为隐性。
    帧结束:由7个隐性位组成,由CAN控制器自动填充。
  两种帧格式可出现在同一总线上

3.数据帧


SOF帧开始:数据帧开始的段
仲裁段:该帧优先级的段
控制段:数据的字节数以及保留位的段
数据段:数据的内容,0~8个字节
CRC段:检查帧的传输错误的段
ACK段:确认正常接收的段
帧结束:数据帧结束的段

4.远程帧


    通过发送远程帧,作为数据接收器的节点可以发起各自数据源的数据传送请求,即向数据发送器请求发送具有相同ID的数据帧。
    远程帧由帧起始、仲裁段、控制段、CRC段、ACK段和帧结束组成。
    远程帧没有数据段。

5.错误帧


    出错标志有两种:主动(积极)错误标志和被动(消极)错误标志。
    主动(积极)错误标志:6个连续的显行位组成。
    被动(消极)错误标志:6个连续的隐性位组成,有可能被其他节点的显行位覆盖。
    一个错误积极节点如果检测到一个错误条件,会发送一个积极错误标志进行标识。这一错误标志违反了正常的位填充规则(适用于从帧起始到CRC界定符之间的所有场)或破坏了应答场和帧结束场的固定格式,结果是引起其他节点检测到新的错误条件并各自开始发送错误标志,因此,这个在总线上可被检测到的显性位序列是各个节点发出的不同错误标志叠加的结果。该序列的总长度在6~12位之间变化。
    一个消极错误节点如果检测到一个错误条件,会试图发送一个消极错误标志进行指示。这个消极错误节点会一直等待6个具有相同极性的连续位,等待从消极错误标志的起始开始,当检测到6个相同极性的连续位时,消极错误标志发送即完成。
    错误界定符由8个隐性位组成,错误标志发出以后,每个节点都发出隐性位,并一直监视总线直到检测出隐性位,随后开始发送剩余的7个隐性位。
    CAN提供了检测下列错误类型机制:
    1)应答错误
    2)填充错误
    3)CRC错误
    4)格式错误

6.过载帧


    存在3中过载条件,引起过载标志的发送。
    1)接收器要求延迟下一次数据帧或远程帧的到达。
    2)在帧间隔间歇场的第一和第二位检测到显性位。
    3)如果一个CAN节点在错误界定符或过载界定符的第8位(最后一位)采样到一个显性位,则节点会发送一个过载帧(而不是错误帧)。错误计数器不会增加。
    最多可产生2个过载帧来延迟下一数据帧或远程帧。
    过载标志由6个显性位组成,其全部形式与积极错误标志一样。过载标志破坏了帧间隔间歇场的固定形式,结果其他节点也检测到一个过载条件,并各自开始发送过载帧。如果在帧间隔间歇场的第3位期间检测到一个显性位,则该位将解释为帧起始。
   注意:1)CAN总线的错误帧、过载帧怎么发出,是硬件自己完成,还是要软件实现?
               答: 當然是由硬件自動發出,不需要軟件參與。

7.帧间隔

   帧间隔用于分割数据帧和远程帧的帧。
   数据帧和远程帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、远程帧、错误帧、过载帧)分开。过载帧和错误帧之前没有帧间隔,多个过载帧之间也不是通过帧间隔分开的。
    帧间隔包括间歇场、总线空闲场以及可能的暂停发送域。只有刚发送出去前一报文的错误消极节点才需要暂停发送场。
    非错误消极节点或者作为前一报文接收器的节点的帧间隔如图。

    作为前一报文发送器的错误消极节点的帧间隔如图。
    
    间歇场包括3个隐性位。间歇场期间,所有节点均不允许发送数据帧或者远程帧,他唯一的作用是标识一个过载条件。
    注意,如果一个正准备发送报文的CAN节点在间歇场的第三位检测到一个显性位,他将认为这是一个帧的开始,并且在下一位时间,从报文的标识符的第一位开始发送报文,而不再发送一个帧起始位,同时也不会成为报文接收器。
    总线空闲周期为任意长度。在此期间,总线空闲,任何需要发送报文的节点都可以访问总线。
    一个因其他报文正在发送而被挂起的报文,将在间歇场后的第一位开始发送。此时检测到的总线上一个显性位将被解释为一个帧起始。
    暂停发送场是指错误消极节点发送一个报文以后,在开始发送下一个报文或者认可总线处于空闲之前,在间歇场后发出的8个隐性位。如果在此期间一次由其他节点引起的传送开始了,则该节点将成为报文接收器。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多