0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文搞懂CAN总线的数据帧和遥控帧

jf_Vqngj70R 来源:美男子玩编程 作者:不脱发的程序猿 2022-10-10 14:58 次阅读

CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。

CAN通信是通过以下5种类型的帧进行的:

数据帧

遥控帧

错误帧

过载帧

帧间隔

另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier: 以下简称 ID), 扩展格式有 29 个位的 ID。

各种帧的用途如下表所示:

poYBAGNDwtSACqPyAAC8x_tMIzw685.jpg

数据帧由7个段构成,图解说明如下所示:

pYYBAGNDwuuAZprOAAEDknp5uVs760.jpg

帧起始:表示数据帧开始的段;

仲裁段:表示该帧优先级的段,根据仲裁段ID码长度的不同,分为标准帧(CAN 2.0A)和扩展帧(CAN 2.0B);

控制段:表示数据的字节数及保留位的段;

数据段:数据的内容,可发送0~8个字节的数据;

CRC段:检查帧的传输错误的段;

ACK段:表示确认正常接收的段;

帧结束:表示数据帧结束的段。

1

数据帧

1.1、帧起始

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

pYYBAGNDwwWAPaXgAABXG0PgU6k185.jpg

总线上的电平有显性电平和隐性电平两种。

总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。

“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)

1.2、仲裁段

仲裁段用于写明需要发送到目的CAN节点的地址、确定发送的帧类型(当前发送的是数据帧还是遥控帧),并确定发送的帧格式是标准帧还是扩展帧。

仲裁段在标准格式帧和扩展格式帧中有所不同。标准格式帧的仲裁段由11位标识符和远程发送请求位RTR组成,扩展格式帧的仲裁场由29位标识符和远程发送请求位RTR组成。

poYBAGNDw1CAOVnRAACe7J37bIs914.jpg
poYBAGNDw1eAUBf1AAFEuJ5JBDo417.jpg
poYBAGNDw16AHkpnAAFdAHyHZfc208.jpg
pYYBAGNDw2WAf8F-AAFS5QI3ztQ987.jpg

1.2.1、标准数据帧

标准数据帧基于早期的CAN规格(1.0和2.0A版),使用了11位的识别域。

CAN标准帧帧信息是11字节,包括帧描述符和帧数据两部分。如下表所列:

pYYBAGNDw3yAc6jbAADq1GyxdhU156.jpg

前3字节为帧描述部分。字节1为帧信息,第7位(FF)表示帧格式,在标准帧中FF=0,第6位(RTR)表示帧的类型,RTR=0表示为数据帧,RTR=1表示为远程帧。DLC表示在数据帧时实际的数据长度。

标准数据帧的 ID 有 11 个位。从 ID10到 ID0依次发送。禁止高 7 位都为隐性(禁止设定:ID=1111111XXXX)。

字节2~3为报文识别码,其高11位有效。

字节4~11为数据帧的实际数据,远程帧时无效。

1.2.2、扩展数据帧

CAN扩展帧帧信息是13字节,包括帧描述符和帧数据两部分,如下表所示:

pYYBAGNDw5GAFI52AAEIbECe8ik971.jpg

前5字节为帧描述部分。字节1为帧信息,第7位(FF)表示帧格式,在扩展帧中FF=1,第6位(RTR)表示帧的类型,RTR=0表示为数据帧,RTR=1表示为远程帧。DLC表示在数据帧时实际的数据长度。

扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和 标准格式的 ID 相同。禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX)。

字节2~5为报文识别码,其高28位有效。

字节6~13为数据帧的实际数据,远程帧时无效。

1.3、控制段

控制段由6个位组成,包括数据长度代码和两个将来作为扩展用的保留位,标准格式和扩展格式的构成有所不同。

数据长度代码指示了数据段中的字节数量。数据长度代码为4个位,在控制段里被发送,数据帧长度允许的字节数为0、1、2、3、4、5、6、7、8,其他数值为非法的。

poYBAGNDw6iAQvFDAADR8dR76ic749.jpg

保留位(r0、r1)必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。

数据长度码(DLC)与数据的字节数的对应关系如下表所示:

pYYBAGNDw7qAHee4AADTvi74jts583.jpg

数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。

1.4、数据段

数据段由数据帧中的发送数据组成,它可以为0~8字节,每字节包含了8位,首先发送最高有效位MSB,依次发送至最低有效位LSB。

poYBAGNDw9SAdoZbAABp25BhBkw610.jpg

1.5、CRC段

CRC段是检查帧传输错误的帧,包括:15 个位的 CRC序列(CRC SEQUENCE)和1 个位的CRC界定符(CRC DELIMITER)构成。

poYBAGNDw-yAEkLMAABtMCIcmYU191.jpg

CRC序列是根据多项式生成的 CRC 值,CRC 的计算范围包括:帧起始、仲裁段、控制段、数据 段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

pYYBAGNDw_6AUrzbAACuphLBHM4107.jpg

1.6、ACK段

ACK段用来确认是否正常接收。由 ACK 槽(ACK SLOT)和 ACK 界定符(ACK DELIMITER)2 个位构成。

pYYBAGNDxA-AG4Y3AACDIaIxHkA861.jpg

发送单元在 ACK 段发送 2 个位的隐性位。当接收器正确地接收到有效的报文时,接收器就会在应答间隙(ACK SLOT)期间(发送ACK 信号)向发送器发送一个“显性”的位以示应答,通知发送单元正常接收结束,这称作“发送 ACK”或者“返回 ACK”。

发送 ACK/返回 ACK是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元 (发送单元不发送 ACK)。所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。

1.7、帧结束

帧结束是由每一个数据帧和远程帧的标志序列界定的,这个标志序列由7个“隐性”位组成。

pYYBAGNDxCOAZ1rzAABcK6XXsUI683.jpg

2

标准数据帧和扩展数据帧

CAN协议可以接收和发送11位标准数据帧和29位扩展数据帧,CAN标准数据帧和扩展数据帧只是帧ID长度不同,以便可以扩展更多CAN节点。

2.1、标准数据帧

标准数据帧基于早期的CAN规格(1.0和2.0A版),使用了11位的识别域。

CAN标准帧帧信息是11字节,包括帧描述符和帧数据两部分。如下表所列:

pYYBAGNDxDOAZMKfAADnJd5Oyww881.jpg

前3字节为帧描述部分。字节1为帧信息,第7位(FF)表示帧格式,在标准帧中FF=0,第6位(RTR)表示帧的类型,RTR=0表示为数据帧,RTR=1表示为远程帧。DLC表示在数据帧时实际的数据长度。

标准数据帧的 ID 有 11 个位。从 ID10 到 ID0 依次发送,可以出现2^11种报文,帧ID的范围是:000-7FF,禁止高 7 位都为隐性(禁止设定:ID=1111111XXXX)。

字节2~3为报文识别码,其高11位有效。

字节4~11为数据帧的实际数据,远程帧时无效。

2.2、扩展数据帧

CAN扩展帧帧信息是13字节,包括帧描述符和帧数据两部分,如下表所示:

poYBAGNDxEWAFzXZAAEWlx8H0D0357.jpg

前5字节为帧描述部分。字节1为帧信息,第7位(FF)表示帧格式,在扩展帧中FF=1,第6位(RTR)表示帧的类型,RTR=0表示为数据帧,RTR=1表示为远程帧。DLC表示在数据帧时实际的数据长度。

扩展格式的 ID 有 29 个位,基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示,基本 ID 和 标准格式的 ID 相同,可以出现2^29种报文,且在数据链路上是有间隙的(对操作者透明),帧ID的范围是0000 0000-1FFF FFFF,禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX)。

字节2~5为报文识别码,其高28位有效。

字节6~13为数据帧的实际数据,远程帧时无效。

2.3、标准数据帧和扩展数据帧的特性

CAN标准数据帧和扩展数据帧只是帧ID长度不同,功能上都是相同的,它们有一个共同的特性:帧ID数值越小,优先级越高。

pYYBAGNDxGSARXLuAAFGBKfFJFQ892.jpg
pYYBAGNDxGyAUMAFAAFf6HjpKBQ655.jpg
poYBAGNDxHOAQp07AAFkOis4M_0247.jpg

3

遥控帧

3.1、遥控帧格式

遥控帧是接收单元向发送单元请求发送数据所用的帧,遥控帧由 6 个段组成,遥控帧没有数据段。

遥控帧的构成如下所示:

帧起始(SOF):表示帧开始的段;

仲裁段:表示该帧优先级的段。可请求具有相同 ID 的数据帧;

控制段:表示数据的字节数及保留位的段;

CRC 段:检查帧的传输错误的段;

ACK 段:表示确认正常接收的段;

帧结束:表示遥控帧结束的段。

遥控帧格式如下图所示:

poYBAGNDxIOAGLZLAAD7A4-sBf0714.jpg

3.2、数据帧和遥控帧的区别

数据帧和遥控帧主要有两点区别:

遥控帧没有数据帧的数据段;

遥控帧RTR位是隐性,RTR位的极性表示了所发送的帧是数据帧(RTR位“显性”)还是远程帧(RTR位“隐性”)。所以,没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。

poYBAGNDxJOARWjiAAEL1ksB_pQ335.jpg

4

错误帧

4.1、错误帧格式

错误帧由错误标志(Error Flag)和错误界定符(Error Delimiter)组成。

接收节点发现总线上的报文有错误时,将自动发出活动错误标志,它是6个连续的显性位。其他节点检测到活动错误标志后发送错误认可标志,它由6个连续的隐性位组成。由于各个接收节点发现错误的时间可能不同,所以总线上实际的错误标志可能由6~12个显性位组成。

错误界定符由 8 个位的隐性位构成。当错误标志发生后,每一个CAN 节点监视总线,直至检测到一个显性电平的跳变。此时表示所有的节点已经完成了错误标志的发送,并开始发送8个隐性电平的界定符。

如下所示:

poYBAGNDxKOASYuqAACuEuoJx6U537.jpg

4.2、主动错误标志和被动错误标志

错误标志包括主动错误标志和被动错误标志两种。

主动错误标志:处于主动错误状态的单元检测出错误时输出的错误标志,6 个位的显性位;

被动错误标志:处于被动错误状态的单元检测出错误时输出的错误标志,6 个位的隐性位。

poYBAGNDxLKAJ2hDAAFyo060k1w112.jpg

4.3、错误帧种类

错误帧共有 5 种,多种错误可能同时发生,种类如下所示:

位错误

填充错误

CRC 错误

格式错误

ACK 错误

错误的种类、错误的内容、错误检测帧和检测单元如下表所示:

poYBAGNDxMKAT78OAAGqLVyxgnE378.jpg

重点聊一聊位错误和格式错误。

位错误特性如下所示:

位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来检测;

在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误;

在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误;

发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错误;

输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同 6 个位的值(显性或隐性),并不视为位错误。

格式错误特性如下所示:

即使接收单元检测出 EOF(7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误;

即使接收单元检测出数据长度码(DLC)中 9∼15 的值时,也不视为格式错误。

发送单元发送完错误帧后,将再次发送数据帧或遥控帧,错误标志输出时序如下表所示:

poYBAGNDxNGAInXiAAB3dSsQxAw374.jpg

5

过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧,过载帧由过载标志和过载界定符构成。

pYYBAGNDxOOAZQZxAACrnc98NDk216.jpg

过载标志由6个位的显性位组成,过载标志的构成与主动错误标志的构成相同。过载标志其形式破坏了间歇场的固定格式,结果使其他所有节点也检测到了一个出错状态,就都各自送出一个超载标志。

pYYBAGNDxPSARYDaAACQJHs53VQ027.jpg

过载界定符由8个位的隐性位组成,过载界定符的构成与错误界定符的构成相同。过载标志发送完毕后,每个节点都对总线进行监察,直到检测到一个隐性位为止。此时,每个节点均已发送完各自的过载标志,接着所有节点还要同时开始发送7个隐性位,配齐长达8位的过载界定符。

过载帧的构成如下图所示:

poYBAGNDxQaAI1GhAAB7TqiAMmA279.jpg

6

帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开,过载帧和错误帧前不能插入帧间隔。

帧间隔的构成如下图所示:

pYYBAGNDxRaACFlbAACpugE5tmY256.jpg

帧间隔由间隔段、总线空闲段和延迟传送段组成,具体说明如下所示:

间隔段:间歇由3个隐性位构成。在间歇期间,不允许任何节点发送数据帧或远程帧。唯一可以执行的操作是通报超载状态;

总线空闲段:总线空闲时间长短不限。总线一经确认处于空闲状态,则任何节点都可以访问总线来传送信息。因另一帧正在传送而延期发送的帧是从间歇之后的第一位开始送出的。通过对总线进行检测,出现在总线空闲期间的显性位将被认为是帧起始;

延迟传送段:处于错误认可状态的节点完成其发送动作后,在被允许发送下一帧以前,它要在间歇之后送出8个隐性位。如果间歇期间执行了(由另一个节点引起的)发送动作,此节点将会变成正被发送的帧的接收器。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN总线
    +关注

    关注

    145

    文章

    1812

    浏览量

    129592
  • 接收器
    +关注

    关注

    14

    文章

    2214

    浏览量

    70668
  • ACK
    ACK
    +关注

    关注

    0

    文章

    27

    浏览量

    11078
  • CRC校验
    +关注

    关注

    0

    文章

    81

    浏览量

    15030

原文标题:一文搞懂CAN总线协议帧格式

文章出处:【微信号:美男子玩编程,微信公众号:美男子玩编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CAN总线上可以同时存在标准和扩展吗?

    今天做实验,can总线上同时存在标准和扩展,从上位机上观察到这样的现象:标准可以正常接收,但是扩展
    发表于 02-05 07:41

    CAN数据--结构,你都了解吗?#汽车CAN总线 

    CAN总线数据
    北汇信息POLELINK
    发布于 :2023年10月11日 18:05:00

    labview怎么产生can数据

    labview怎么产生can数据
    发表于 03-25 16:07

    SPI总线数据格式定义

    有谁写过SPI总线,我定义8位格式可以发送,我想定义的是16位格式,手册上是可以的,但是16位直没实现。我想发送
    发表于 03-18 10:10

    CAN总线波特率和每秒收发多少之间的关系?

    如题,假如CAN通信波特率为250K,使用扩展,那么每秒可以发多少帧数据呢?我看周立功的CAN模块,有的支持10000+/秒,有的500
    发表于 08-29 14:25

    CAN错误定义

      CAN总线产生的错误以错误的形式上报给应用层。设置注册表[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN1] BusErrorReport项为1可以
    发表于 01-03 15:57

    为何四轴遥控器目的地不同的数据要使用同个队列?

    正在研读原子四轴遥控器的代码。遥控器固件V1.2.1任务commanderTask中,遥控器控制四轴的姿态命令存入队列txQueue中,遥控
    发表于 07-18 04:35

    关于CAN总线数据中的数据长度和数据长度编码是什么

    大家好!我是DSP的菜鸟,最近在看CAN总线的软硬件部分,主要迷茫在邮箱每次发送和接收的数据长度,因为无论接收还是发送邮箱都有数据长度编
    发表于 05-20 15:09

    关于CAN总线

    CAN总线格式中,为什么数据场只能传输8个字节的数据呢?
    发表于 07-20 16:28

    示波器测量CAN总线数据

    示波器测量CAN总线数据
    发表于 01-15 06:32

    LIN总线的应用/特点/信号/结构

      汽车电子总线设计,般都采用LIN总线CAN总线这两种形式。  LIN总线的应用  LIN
    发表于 02-20 16:26

    can的五种介绍

    can的五种:1.数据,包括七段,起始,仲裁段,控制段,
    发表于 08-06 09:13

    CAN协议规定了好几种类型

    通过对 CANBUS协议的理解,我们知道:CAN总线上的节点接收或发送数据都是以为单位的!!!CAN协议规定了好几种
    发表于 08-19 08:50

    CAN总线的标准和扩展

    CAN总线的标准和扩展主要决定ID的长度,标准
    发表于 08-20 06:43

    CAN协议的数据是如何构成的

    CAN协议具有哪些特点?CAN协议有哪几种类型呢?CAN协议的数据是如何构成的?
    发表于 10-27 07:46