SylixOS 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现场总线基础教程----周立功,黄晓清》。

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

时间: 2024-10-27 08:13:12

SylixOS CAN总线报文浅析的相关文章

SylixOS SPI 总线框架浅析

修订历史版本 日期 原因V1.00 2018/8/18 创建文档 目 录1 SPI总线关键结构体 11.1 总线传输控制消息块 11.2 SPI总线适配器 21.3 SPI设备 32 SPI各个结构体之间的联系 32.1 总线链表 32.2 总线与设备 33 参考资料 4 1 SPI总线关键结构体1.1 总线传输控制消息块传输控制消息包括操作单位bits数.传输控制参数(时钟极性.相位和字节序等配置).发送和接收缓冲区及其长度.传输结束的回调函数.如程序清单 1.1所示.程序清单 1.1 typ

SylixOS SylixOS CAN总线驱动之三

SylixOS CAN报文传送流程 CAN报文传送流程框图 在SylixOS中CAN报文的传输框图如图 11所示. 图 11 SylixOS CAN报文传输框图 (注:此文档承接之前的文档编写,之前文档中详细介绍过的报文,传输结构体在此文档中不做详细介绍.) SylixOS CAN报文缓存机制 在SylixOS中CAN报文的传输不是底层和上层应用的直接传输.而是在底层和应用层中间加了一层系统缓存队列.所有收发的CAN报文都要先经过一个系统缓存机制传输到真正调用到它的地方. 系统CAN发送报文缓存

SylixOS CAN总线初始化流程解析

概述 本文档是在AT91SAM9X25平台上进行SylixOS CAN总线驱动开发时,对CAN总线初始化流程的分析. 适用于正在学习CAN总线开发的技术工程师. 技术实现 CAN总线的初始化流程可以分成两个部分: 一部分是CAN总线通道资源初始化,主要工作是对通道相关的管脚和中断以及总线编程时需要的时钟等资源的初始化:另一部分是CAN总线的硬件初始化,主要工作是对总线的波特率的设置.接收和发送数据邮箱(相当于缓存区)的初始化以及接收中断和错误中断的使能. CAN总线通道资源初始化 在AT91SA

SylixOS线程私有数据浅析

目录 1. 线程私有数据概述    1 2. 线程私有数据的相关API函数流程浅析    1 2.1    加入线程私有变量    1 2.2    删除线程私有变量    3 2.3    设置私有线程变量    6 2.4    获得线程私有变量值    8 3. 总结    10 4. 参考文献    10 线程私有数据概述 在SylixOS中为了满足多线程安全的要求,使得一种资源可以安全的被多个线程使用,采用了包括代码临界区保护和可重入性等方法.本文描述实现可重入的一种方法:线程私有数据

SylixOS中pthread_cancel函数浅析

1 知识简介 1.1 概述 取消一个线程要确保该线程能够释放其所持有的任何锁.分配的内存,使整个系统保持一致性.在很多复杂情况下要保证这种正确性是有一定困难的. 一种简单的线程取消:取消线程调用一个取消线程的函数,被取消线程死亡.在这种情况下,被取消线程所持有的的资源得不到释放.取消线程负责保证被取消者处于可安全取消状态,在一个要求可靠性高的系统中,这种保证非常困难或者无法实现.这种取消称为不受限制的异步取消. 还存在另外一种更安全的线程取消机制.一个线程可以以可靠的受控制的方式向进程的其他线程

SylixOS的信号屏蔽浅析

1.信号介绍 信号是一种软中断,用于通过异步的方式对进程进行事件通知.信号分为实时信号和非实时信号,各个进程对于信号的处理方式不一,处理方式分为三类:忽略,捕捉,执行系统默认动作.进程可以选择屏蔽某个或某些信号. 2.信号屏蔽 SylixOS可以通过sigprocmask函数对某个信号集内的信号进行屏蔽.在信号被屏蔽的期间,进程对所屏蔽的大部分信号不会进行响应,只有解除屏蔽后才会响应. 2.1 sigprocmask函数 sigprocmask函数原型如程序清单 2-1所示. 程序清单 2-1 

SylixOS线程堆栈大小浅析

目录 1. SylixOS线程.线程栈介绍    1 1.1    线程的介绍    1 1.2    线程栈的介绍    1 2. SylixOS线程栈大小的分配    1 2.1    线程.线程栈相关属性的设置    2 2.2    线程栈大小    2 2.3    线程堆栈警戒区    3 3. 总结    5 4. 参考资料    5 SylixOS线程.线程栈介绍 SylixOS是多线程操作系统,系统能够同时创建多个线程,具体最大线程数量取决于系统内存的大小以及编译SylixOS

SylixOS 基于AT91SAM9X25的CAN总线传输流程解析

概述 本文档是在AT91SAM9X25平台上进行SylixOS CAN总线驱动开发时,对CAN总线底层传输流程的解析. 适用于正在学习CAN总线驱动的技术工程师. 技术实现 CAN总线的传输流程可以分成两个部分: 一部分是CAN总线的发送流程,主要工作是将准备发送的数据填充到对应的寄存器,并使能开始传输位和邮箱中断位:另一部分是CAN总线的中断处理流程,主要工作是对触发中断的中断源进行判断,并对不同的中断进行相关处理. CAN总线的发送流程 在AT91SAM9X25平台上,CAN总线发送流程如图

SylixOS NUC970平台SPI总线数据传输

概述 本文档是对NUC970平台上的SylixOS SPI总线数据传输的详细分析. SPI总线数据传输流程 NUC970平台上SPI总线数据传输流程如图 21所示. 当一个消息准备传输时,第一步判断发送和接收缓存区是否为空,若为空,就没有要接收或发送的数据,直接返回. 第二步,判断消息长度是否大于指定的值(可以改变,但要大于16个字节),若大于,以16字节为单位传输数据,否则以单字节为单位传输数据. 图21 SPI数据传输流程图 SPI总线的消息类型 在SylixOS中,SPI总线的消息类型,如