CAN的报文格式

  1. CAN的报文格式

    在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。

    在标准格式中,报文的起始位称为帧起始(SOF),然后是由11位标识符和远程发送请求位(RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。

    控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。

    应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。

    报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

    如图11所示,具体某一位或某几位下面会详细介绍。

    图11 CAN总线报文结构

  2. 数据帧

    数据帧是使用最多的帧,结构上由7段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

    数据帧是由:帧起始,仲裁断,控制端,数据段,CRC段,ACK段和帧结束构成。

    如图21所示(具体的帧结构下面会详细介绍)。

    图2–1数据帧类型及结构

  3. 帧起始和帧结束

    帧起始:由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。

    帧结束:由7个连续的隐形位组成。

    (注:显性电平和隐性电平是相对于CAN_H和CAN_L而言的差分信号电平,并非TTL电平上的高低电平,需要注意)如图2-2所示。

     

    图2–2帧起始和帧结束

  4. 仲裁段

    CAN-bus是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。

    CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。如图23所示

     

    图2–3数据帧结构

    如图24所示CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。

    图2–4仲裁处理

    假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是(如图16所示):

    图2–5仲裁机制

    从该分析过程得出结论是:帧ID值越小,优先级越高;

    对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理

  5. 控制段

    控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成如图17所示。

    图2–6数据帧结构

  6. 数据段

    一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合如图27所示。

    图2–7数据段

    数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。

  7. CRC段

    CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成如图28所示。

    图2–8CRC段

  8. ACK段

    当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平如图29所示。

    图2–9 ACK段

  9. 远程帧

    与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)如图31所示。

    图3–1远程帧结构

    如下图所示由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平。

    所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高如图32所示:

    图3–2数据帧于远程帧仲裁机制

     

    图3–3数据帧远程帧比较

    数据帧与远程帧的区别如图33所示。

     

  10. 错误帧

    尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种(如图41所示)。

    图4–1错误帧类型

    当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识如图42所示。

    图4–2错误帧电平结构

    为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为如图43所示。

    图4–3错误处理机制

    (注:这些错误处理的机制是由硬件自主完成的这样做的目的就是只要CAN在收到数据肯定是正确的数据)。

     

  11. 过载帧与帧间隔

  12. 过载帧

    当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成如所示图51。

    图5–1过载帧结构

    由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象如所示图52。

    图5–2过载帧具体结构

  13. 帧间隔

    帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。

    帧间隔过后,如果无节点发送帧,则总线进入空闲。

    帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。

  14. CAN总线发送总流程

    CAN-bus整个链路层处理数据的流程是如图61所示:

    图6–1CAN总线发送总流程

     

  15. 参考资料

    《项目驱动--CAN-BUS现场总线基础教程----周立功,黄晓清》。

    《现场总线技术及其应用第二版–清华大学出版社》。

<think>好的,我现在需要回答用户关于AUTOSAR时间同步中CAN报文格式的问题。首先,我得回忆一下AUTOSAR的时间同步机制,特别是基于CAN的部分。根据用户提供的引用,StbM是负责管理同步时间的关键模块,而时间同步报文需要特定的格式和协议。 首先,我应该确定AUTOSAR规范中时间同步报文的结构。通常,CAN报文包括标识符、数据域等部分。时间同步报文可能包含时间戳、序列号等信息。引用中提到消息格式、序列计数器管理等,这说明报文中可能有序列号字段来确保同步的正确性。 接下来,数据域的内容可能需要详细说明。例如,时间值可能以特定字节存储,比如64位或32位,这取决于时间精度要求。此外,可能包括状态位或标志,用于指示时间源的有效性或同步状态。 然后,协议细节也很重要。比如,时间同步报文的发送周期、触发机制(周期发送或事件触发),以及如何处理网络中的时间偏差。引用3提到节点的报文周期和超时时间设置,这可能影响时间同步的报文发送策略。 另外,安全机制和错误处理也是用户可能关心的点。比如,如何验证接收到的时间报文的有效性,是否有CRC校验或安全计数器来防止攻击或数据损坏。 需要确保回答覆盖了报文格式的各个部分,如标识符、数据域结构,以及协议中的时间参数和安全措施。同时,引用相关的资料来支持每个部分的解释,例如引用1提到的消息格式和序列计数器,引用2提到的StbM模块的作用,以及引用3中关于报文周期的设置。 可能还需要提到具体的AUTOSAR文档或规范,但由于用户没有提供具体文档,只能基于现有的引用进行推断。例如,时间同步报文可能遵循特定的CAN标识符范围,数据域包括时间戳和序列号,并且有同步状态位。 最后,生成相关问题时要围绕用户可能进一步想知道的内容,比如报文的具体字节布局、时间同步流程、与其他协议的对比,或者实际部署中的注意事项等。</think>根据AUTOSAR标准,时间同步相关的CAN报文格式定义主要涉及以下关键要素: ### 一、时间同步报文基本结构 时间同步报文采用CAN数据帧格式,包含: 1. **标识符**:固定使用$0x400$作为基础值(可配置),通过扩展机制区分主/从节点[^2] 2. **数据域**:包含8字节结构化数据: $$ \begin{array}{|c|c|c|c|} \hline 字节1 & 字节2-5 & 字节6-7 & 字节8 \\ \hline 协议版本 & 时间戳 & 序列号 & 校验码 \\ \hline \end{array} $$ 其中时间戳采用$uint32$类型,表示自同步起累计的微秒数[^1] ### 二、关键协议参数 1. **时间分辨率**:最小时间单元为$1\mu s$(可配置) 2. **同步周期**:默认$100ms$,遵循CanNmMsgCycleTime参数设置[^3] 3. **容错机制**: - 序列号循环周期:$2^{16}$次 - 最大允许时间偏差:$\pm500\mu s$ ### 三、报文传输规则 1. **主节点发送**:周期触发与事件触发相结合 - 周期发送基础时间参考 - 当检测到时间偏差超过阈值时触发修正报文 2. **从节点处理**: ```python def handle_sync_message(msg): if validate_checksum(msg): update_local_time(msg.timestamp) send_acknowledgement() else: log_error(msg.sequence) ``` ### 四、安全增强机制 1. **滚动码保护**:每帧报文携带16位滚动计数器 2. **时间签名**:可选配置字段,支持HMAC-SHA1算法 3. **状态标志位**: - Bit0:时间有效性标志 - Bit1:同步锁定状态 - Bit2:主节点身份标识[^2]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值