STM32-(37):CAN总线(协议帧)

本文深入解析了CAN总线通信的帧概念与组成,详细介绍了数据帧、遥控帧、错误帧和过载帧的功能,以及帧起始、仲裁段、控制段等关键组成部分的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇:STM32-(36):CAN总线(概述) 下一篇:STM32-(38):CAN总线(基本扩展bxCAN)

CAN协议帧的概念

帧用途
数据帧
用于发送单元向接收单元传送数据的帧。
遥控帧
用于接收单元向具有相同ID的发送单元请求数据的帧。
错误帧
用于检测出错误时向其它单元通知错误的帧。
过载帧
用于接收单元通知其尚未做好接收准备的帧。
帧间隔
用于将数据帧及遥控帧与前面的帧分离开来的帧。
另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符(Identifier:以下称ID),扩展格式有29个位的ID。

数据帧的组成

在这里插入图片描述

SOF(start of frame):帧的起始位

数据帧详解:

(1)帧起始(标准、扩展格式相同)

表示帧开始的段。1个位的显性位。
在这里插入图片描述
显性电平和隐形电平
总线上的电平有显性电平和隐形电平两种。
总线上执行逻辑上的线“与”时,显性电平的逻辑值位“0”,隐形电平为“1”。
“显性”具有“优势”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐形”具有“包容”的意味,只有所有的单元都输出隐形电平,总线上才位隐形电平。(显性电平比隐形电平更强。)

(2)仲裁段

表示数据的优先级的段。
标准格式和扩展格式在此的构成有所不同。
在这里插入图片描述
ID
标准格式的 ID 有11位,从 ID28 到 ID18 被依次发送。禁止高7位都为隐形。(禁止设定:ID = 1111111XXXX)
扩展格式的 ID 有29位。基本ID 从 ID28 到 ID18,扩展ID 由 ID17 到 ID0 表示。基本ID和标准格式的ID相同。禁止高7位都为隐形。(禁止设定:基本ID = 1111111XXXX)
标准格式与扩展格式区分:在基本ID之后判断后一位电平(若为“0”,则是RTR,表示标准格式,若为“1”,则是SRR,表示扩展格式)

(3)控制段

控制段由6个位构成,表示数据段的字节数
前两个位为保留位,后四位(DLC)表示数据段的字节数。
在这里插入图片描述

(4)数据段(标准、扩展格式相同)

数据段可包含0-8个字节的数据。从MSB(最高位)开始输出。
在这里插入图片描述

CRC段(标准、扩展格式相同)

CRC段是检查帧传输错误的帧。由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)构成。
在这里插入图片描述
CRC顺序
CRC顺序是根据多项式生产的CRC值,CRC的计算范围包括帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算CRC值并进行比较,不一致时会通报错误。

(6)ACK段

ACK段用来确认是否正常接收。由ACK槽(ACK Slot)和ACK界定符2个位构成。
在这里插入图片描述
1.发送单元的ACK段
发送单元在ACK段发送2个位的隐性位。
2.接收单元的ACK段
接收到正确消息的单元在ACK槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发送ACK”或者“返回ACK”

(7)帧结束

帧结束是表示该帧的结束的段。由7个位的隐性位构成。
在这里插入图片描述

遥控帧

在这里插入图片描述

  • 数据帧和遥控帧的不同
    –遥控帧的RTR位为隐性位,没有数据段。
    –没有数据段的数据帧和遥控帧可通过 RTR位区别开来。
  • 遥控帧没有数据段,数据长度码该如何表示?
    –遥控帧的数据长度码以所请求数据帧的数据长度码表示。
  • 没有数据段的数据帧有何用途?
    –例如,可用于个单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。

错误帧

在这里插入图片描述
用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
(1)错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6个位的显性位。
被动错误标志:6个位的隐性位。
(2)错误界定符
错误界定符由8个位的隐性位构成。

过载帧

在这里插入图片描述
过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。
(1)过载标志
6个位的显性位。
过载标志的构成与主动错误标志的构成相同。
(2)过载界定符
8个位的隐性位。
过载界定符的构成与错误界定符的构成相同。

帧间隔

在这里插入图片描述
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
(1)间隔
3个位的隐性位
(2)总线空闲
隐性电平,无长度限制(0亦可)
(3)延时传送(发送暂时停止)
8个位的隐性位
只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

优先级

在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送时单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。
在这里插入图片描述
(1)数据帧和遥控帧的优先级(数据帧优先级高)
具有相同ID的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权。可继续发送。
在这里插入图片描述
(2)标准格式和扩展格式的优先级(标准格式的优先级高)
标准格式ID与具有相同ID的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的RTR位为显性位的具有优先权,可继续发送。
在这里插入图片描述

错误

错误共有5种。多种错误可能同时发生。

  • 位错误
  • 填充错误
  • CRC错误
  • 格式错误
  • ACK错误
    在这里插入图片描述
上一篇:STM32-(36):CAN总线(概述) 下一篇:STM32-(38):CAN总线(基本扩展bxCAN)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值