首页 > 其他分享 >CAN Specification 2.0 PART B -- CAN message 定义(1)

CAN Specification 2.0 PART B -- CAN message 定义(1)

时间:2024-10-31 19:47:22浏览次数:3  
标签:-- Specification 总线 PART 隐性 bit 数据 节点 显性

记录 BOSCH CAN Specification 2.0 PART B CAN 协议标准学习过程,以备需要时查看;

BOSCH CAN Specification 2.0 文档获取:

http://esd.cs.ucr.edu/webres/can20.pdf

CAN message 定义

1. DATA FRAME 数据帧

DATA FRAME 由 Start of Frame, Arbitration Field, Control Field, Data Field, CRC Field, ACK Field, End of Frame 这几个位域组成;

START OF FRAME(SOF)  帧起始

由一个显性位组成(可以理解为MCU CAN TX pin上的低电平);一个CAN网络上的所有节点根据SOF边沿来实现同步;

ARBITRATION FIELD 仲裁场

总线仲裁的概念

相当于总线上有多个节点在同一时刻控制总线,经过仲裁后,优先级高的节点会实际控制总线;

总线仲裁实现机制

总线上显性电平(可以理解为MCU CAN TX pin上的低电平)比隐性电平具有更高的优先级(可以理解为MCU CAN TX pin上的高电平);

Node 1 输出Node 2 输出实际总线状态
d(显性)(逻辑0)d(显性)(逻辑0)d(显性)(逻辑0)
d(显性)(逻辑0)r(隐性)(逻辑1)d(显性)(逻辑0)
r(隐性)(逻辑1)d(显性)(逻辑0)d(显性)(逻辑0)
r(隐性)(逻辑1)r(隐性)(逻辑1)r(隐性)(逻辑1)

总线上的每个节点在同一时刻都按照自己的想法拉高或拉低总线,但实际总线的电平状态,类似于线与的效果;CAN总线上的电信号状态,在经过CAN transceiver 后,由一对查分信号CANH/CANL 来表示,CANH/CANL 间存在压差表示为显性,CANH/CANL间无压差表示为隐性;

仲裁场的格式

对于标准帧(Standard Frame)和扩展帧(Extended Frame), 仲裁场的格式不同

标准帧(Standard Frame)的数据帧格式

扩展帧(Extended Frame)的数据帧格式

对于标准帧,仲裁场由11 bit 的ID 域和 1 bit RTR 控制位组成;

对于扩展帧,其仲裁场相比于标准帧,ID 在标准帧11 bit 的基础上增加了18 bit,扩展到 29 bit;另外多了两个控制位SRR 和IDE;

IDENTIFIER Field

ID 域可以理解为每个数据帧的独有的名字;

在标准帧中,ID域为11 bit;

在扩展帧中,ID由11 bit 的base ID 和 18 bit 的扩展ID组成;11 bit 的base ID 和标准帧中的ID一样,按照 ID28 - ID18 的顺序在总线上传输,最低位为ID18, 且高7位 ID28 - ID22 不能全是隐性电平;18 bit 的扩展ID 在总线上按照 ID17 - ID0 的顺序传输;

按照显性电平优先级高于隐性电平的规则,ID越小的数据帧,具有越高的优先级

RTR(Remote Transmission Request)

远程传输请求控制位,在数据帧中RTR为显性,在远程帧中RTR为隐性;所以ID相同时,数据帧的优先级高于远程帧;

SRR(Substitute Remote Request)

扩展帧中,用SRR位来代替标准帧中的RTR位;CAN协议规定,在扩展帧中,SRR位为隐性;

IDE(Identifier Extension Bit)

在标准帧中,IDE属于控制场(Control Field),在扩展帧中,IDE属于仲裁场;并且,CAN协议规定,在标准帧中,IDE为显性,在扩展帧中,IDE为隐性;

结合SRR,IDE位的特性,可以知道相同base ID 的标准帧和扩展帧同时在总线上传输数据时,标准帧具有更高的有限级;

小结

ID越小优先级越高;

数据帧优先级高于远程中;

base ID相同的数据帧,标准帧优先级高于扩展帧;

CONTROL FIELD 控制场

对于标准帧,控制场由 1 bit IDE控制位,1 bit r0 保留位,和 4 bit DLC(数据长度)位组成;

对于扩展帧,控制场由 2 bit r1/r0 保留位,和 4 bit DLC(数据长度)位组成;

DLC(Data Length Code) 决定后面数据场中传输数据的字节数;其中d表示显性电平(逻辑0),r表示隐性电平(逻辑1)

DATA FIELD 数据场

数据场为要在总线上传输的数据,字节数由DLC决定,每个字节8 bit,MSB先传输;

CRC FIELD 校验场

CRC 场由 CRC序列 和CRC 界定符两部分组成

CRC 序列由15 个 bit 组成,CRC计算的输入为从 SOF 到 DATA FIELD数据场的所有bit(除了位填充的bit外);

使用的生成多项式为:

CRC界定符由 1 个bit 的隐性位组成;

ACK FIELD 应答场

应答场由ACK Slot 和ACK 界定符组成;

对于应答场,发送节点会发送2 个 bit 的隐性电平;接收节点在成功接收到一帧数据后,会在应答场将ACK Slot 设置为显性电平;总线上的所有节点都会在成功接收数据后,将ACK Slot 拉为显性电平;总线上有多个节点时,相当于只要有一个节点成功接收了这一帧数据,发送节点都会认为发送已成功;

ACK 界定符为1 bit 的隐性电平;

2. ERROR FRAME 错误帧

在数据传输发生错误时,CAN网络上的节点会向总线发送错误帧;错误帧由Error Flag 和 Error 界定符两部分组成;

根据发生错误时节点自身状态的不同,节点发送的Error Flag 不一样;

可以先简单的理解节点的错误状态有3 种:

  • Error Active:一个节点健康时所处的状态
  • Error Passive:节点已经有所不适
  • Bus Off:节点出了严重问题,不能再参与总线活动

处于Error Active 状态的节点出现错误时,发送的Error Flag 为 6 个 bit 连续的显性位;处于Error Passive 状态的节点出现错误时,发送的Error Flag 为 6 个 bit 连续的隐性位(除非被其他节点发送的显性位拉至显性)

Active Error Flag 不符合从SOF 到CRC 界定符定义的位填充规则,或者会破坏ACK 场或END OF FRAME 的格式,导致其他节点也检测到错误,从而也发出Active Error Flag,因此,Active Error Flag 的长度为6 个bit 到 12 个bit;

Error 界定符包含 8 个bit 隐性位;

3. INTERFRAME SPACING 帧间空间

总线进行信号传输时,数据帧和远程帧需要和上一帧间保留帧间空间;错误帧及过载帧无需和上一帧保留帧间空间;

帧间空间由两个场组成, Intermission 和Bus Idle;

Intermission 由3个 bit 的隐性位组成;在Intermission 的第3 个bit 检测到显性位会认为是START OF FRAME;

Bus Idle 为总线的空闲时间,其长度是任意的,总线保持隐性电平状态;检测到显性电平即表示START OF FRAME;

对于之前发送过数据且处于Error Passive 状态的节点,其帧间空间加入Suspend Transmission 域;Suspend Transmission 为8 个bit 的隐性位;如果期间其他节点有发送数据,则这个Error Passive 的节点要变为接收节点,等其他节点发送完数据再尝试发送;

4. OVERLOAD FRAME 过载帧

触发过载帧发送的条件有3个:

接收节点自身处理上一帧数据需要时间,节点控制往总线上发送过载帧

检测到帧间隔Intermission域的第一个bit 和第二个bit 均为显性电平

在错误帧界定符 Error Delimiter 或过载帧界定符 Overload Delimiter的第八个bit 检测到显性位,此时会触发过载帧的发送,同时错误计数器不会增加

过载帧由 Overload Flag 和 Overload Delimiter 两个域组成;

Overload Flag 由6 个bit 显性位组成;Overload Flag 的格式破坏了帧间隔Intermission 的传输,然后其他节点也会检测到总线过载而发送Overload Flag; Overload Delimiter 由8 个bit 隐性位组成

5. REMOTE FRAME 远程帧(忽略)

6. CAN总线上一帧数据的传输时间

由1到5节一帧数据各个位域的说明可以知道,

传输一帧数据场为8byte数据的标准数据帧,需要111个位时间;假设总线波特率为500kbit/s,则这一帧数据的传输时间为222us;

传输一帧数据场为8byte数据的扩展数据帧,需要131个位时间;假设总线波特率为500kbit/s,则这一帧数据的传输时间为262us;

可以得到如下一帧数据的传输时间

一帧数据传输时间500kbit/s1Mbit/s
数据场为8byte数据的标准数据帧222us111us
数据场为8byte数据的扩展数据帧262us131us
数据场为n byte数据的标准数据帧(47 + 8n)* 2us(47 + 8n)us
数据场为n byte数据的扩展数据帧(67 + 8n)* 2us(67 + 8n)us

或一段时间内总线可以传输的数据帧的个数

2ms内总线传输帧数500kbit/s1Mbit/s
数据场为8byte数据的标准数据帧918
数据场为8byte数据的扩展数据帧715
数据场为n byte数据的标准数据帧Floor(1000 /(47 + 8n))Floor(2000 /(47 + 8n))
数据场为n byte数据的扩展数据帧Floor(1000 /(67 + 8n))Floor(2000 /(67 + 8n))

标签:--,Specification,总线,PART,隐性,bit,数据,节点,显性
From: https://blog.csdn.net/mc737771794/article/details/143388427

相关文章

  • CSP-S 2022 - 模拟赛记录
    PrefaceT1调的太久了,应当先打够部分分就切题的,全分思维难度不高,代码难度超高。可能是出题人知道把最简单题放T2有点过于恶心,所以后两道题的部分分都很好打,给的分也很多,一共\(55\)分可以轻松到手。就是第二题卡了一个unsignedlonglong,有点莫名其妙,而且T1放模拟也是头......
  • 重分区算子:repartition 与 coalesce 的区别
    在大数据处理中,经常会遇到需要对数据集进行分区调整的情况,这时就会用到repartition和coalesce这两个重分区算子。本文将详细介绍它们的区别,并通过案例来帮助理解。一、repartition和coalesce的定义与基本原理repartition定义:repartition算子用于对数据集进行重新分区,它会......
  • 基础markdown的编写格式
    所谓的.md文件,实际上就是markdown格式文本。因为在编写readme文档的时候需要使用这个格式进行编写,写devlog的时候也常使用.md转换成.rst格式然后进行编译,所以决定简单学习一下。这里简单整理了一些markdown格式文本常用的格式符号的用法,包括标题,引用,代码块,表格,强调字体,删除下划线......
  • TikTok流量太低?如何提升账号流量?
    TikTok的流量池通过算法分析用户的观看习惯和互动行为,智能地将内容分发给潜在感兴趣的观众。新发布的视频会先在小范围内测试,如果获得较高的观看和互动率,便会逐渐向更广泛的用户群体推广。那么具体的TikTok流量池分发机制是什么样子的呢?我们又该如何提升TikTok的流量?让我们一起......
  • 浅谈——深度学习和马尔可夫决策过程
            深度学习是一种机器学习方法,它通过模拟大脑的神经网络来进行数据分析和预测。它由多层“神经元”组成,每一层从数据中提取出不同的特征。多层次的结构使得深度学习模型可以捕捉到数据中的复杂关系,特别适合处理图片、语音等复杂数据。        马尔可夫......
  • 财务结算-博客总结
    [StreamliningFinancialPrecision:Uber’sAdvancedSettlementAccountingSystem](https://www.uber.com/en-IN/blog/ubers-advanced-settlement-accounting-system/?uclick_id=a98d832d-96db-41cd-b53f-2911beb06f3f)   总结:这张图片是一个关于信用卡支付处理价值......
  • 080 Dynamic SQL
    SQL--select*fromProducts--EXEC('select*fromProducts')DECLARE@topCountINT=6DECLARE@SQLnvarchar(max)SET@SQL='selecttop'+CAST(@topCountASnvarchar(10))+'o.CustomerEmail,sum(p.Price*ol.Quan......
  • 【ROS2】在QtCreator中打开ROS工作目录
    1、准备1)在QtCreator中安装ROS插件(ros_qtc_plugin)2)在QtCreator中创建ROS2工程2、打开ROS2工作目录1)创建工程文件在ROS2工作目录(和src同级目录)中,创建工程文件,名为xxx.workspace,例如:laoer.workspace.2)添加文件内容<?xmlversion="1.0"?><Workspace>......
  • 啤酒瓶瓶口检测及其圆心坐标与半径计算
    第一步利用yolov8训练出最佳的检测瓶盖的模型安装环境:python>=3.8pipinstallultralytics(未用到gpu)代码:fromultralyticsimportYOLO if__name__=='__main__':  #加载预训练模型  model=YOLO('yolov8n.pt') #你可以选择其他预训练模型,如yolo......
  • 基于具体导航内容
    面向目标导航:1.点目标导航:在看不见的环境里,将目标的位置用坐标表示出来(100.80)机器人通过向左向右向前到达目标位置附近。(mp3d数据集)在难于预知目标位置时,但是点目标导航几乎不可能实现,2.语义目标导航:机器人通过依赖语义标签的知识,用rgb相机沿着gps和指南针导航,通过rgb来解决......