详解CAN总线:CAN总线报文格式—数据帧

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

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


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


数据帧

遥控帧

错误帧

过载帧

帧间隔

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


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


3187e9e3f094429ca97e43b0ba0caa1d.png


近期打算写5篇文章,分别详细介绍这5种类型的CAN总线报文格式,本篇博文将详细讲解CAN数据帧格式,创作不易,请各位朋友多多点赞、收藏、关注支持~


关注公众号:美男子玩编程,优先推送最新技术博文~


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


ef933d05d7d54d119b0fbd29d20a20b2.png


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

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

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

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

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

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

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


1、帧起始

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


058a19e7c51c4e56aaa1cf18f29e1781.png


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


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


“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐

性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比

隐性电平更强。)


2、仲裁段

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


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


1679867f6662485d97d01b46a23e5c21.png


85c1de8c3d464b8d85aaf11526369001.png


8be9c5d5de134cffb411d7b6e883f351.png

4a472823ef6b4d4793c8346e991ce843.png



2.1、标准数据帧

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


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


9c6ba7befddf43a5ba1ebe17619b18ae.jpeg


前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为数据帧的实际数据,远程帧时无效。


2.2、扩展数据帧

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


76da5affab27401f92fcfc09d7ac73ab.jpeg


前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为数据帧的实际数据,远程帧时无效。


3、控制段

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


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


e9a09cac2789424797aab572cef8dcc0.png


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


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


2e418104d399486ebe4b92ccee8f4af6.png


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


4、数据段

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


c92a618ef6d14b21aaa611d8021d035a.png


5、CRC段

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


83b8ec9103bd4f2ba61aee7b905173a7.png


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


818893bfe4534c9e806d359954f3e39d.png


6、ACK段

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


cbaaf373f32a4b5f90003fa9ddf5b6fc.png


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


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


7、帧结束

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

51e76c43818746df83057819cbcefff8.png


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
算法
Modbus-RTU数据帧
Modbus-RTU数据帧
48 0
|
9月前
|
安全 物联网 数据安全/隐私保护
深入理解AMBA总线协议(AXI总结篇)
深入理解AMBA总线协议(AXI总结篇)
732 0
详解CAN总线:CAN总线报文格式—错误帧
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。
详解CAN总线:CAN总线报文格式—过载帧
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。
详解CAN总线:CAN总线报文格式—遥控帧
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。
详解CAN总线:CAN总线报文格式—帧间隔
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。
|
11月前
|
算法
一文搞懂CAN总线协议帧格式
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。
详解CAN总线:标准数据帧和扩展数据帧
CAN协议可以接收和发送11位标准数据帧和29位扩展数据帧,CAN标准数据帧和扩展数据帧只是帧ID长度不同,以便可以扩展更多CAN节点。
|
11月前
|
算法 网络架构 iOS开发
详解CAN总线:什么是CAN总线?
CAN总线协议(Controller Area Network),控制器局域网总线,是德国BOSCH(博世)公司研发的一种串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。