CAN通信协议 - ISO 11898 CAN基本信息CAN控制器根据两根通信线CAN_H、CAN_L上的电位差来判断总线电平差分信号。总线电平分为显性电平逻辑0和隐性电平逻辑1二者必居其一。发送方通过使总线电平发生变化将消息发送给接收方。CAN总线是异步半双工。其无需时钟线通信速率由设备各自约定并且由于其半双工通信可挂载多设备多设备同时发送数据时通过仲裁判断先后顺序。其中对于同步和异步的区别同步时钟指的是在执行操作时各个参与者如线程、设备或系统在同一时刻进行协调。所有的操作都需要在一个共同的时序框架下进行。异步时钟步指的是操作之间没有强制的时间协调各个参与者可以独立地进行操作不必等待其他操作完成。对于单工半双工全双工的区别单工数据传输仅能沿一个方向不能实现反向传输只有一条通信路线半双工数据传输可以沿两个方向但需要分时进行也只有一条通信线路全双工数据可以同时进行双向传输具有两条通信线路。其中高速CAN使用闭环网络两端分别有一个终端电阻两个120Ω终端电阻的作用①防止回波反射使波形更平稳②在没有设备操作时使电压“收紧”使其电压一致。CAN总线是差分信号所以终端电阻可以在没有设备操作时将两根线“收紧”至电压一致状态代表就是默认的逻辑电平“1”低速CAN使用开环网络CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻对于高速CAN显性电平和隐性电平的0和1定义有点反逻辑有个简单的记法显灵显灵→显0反正我是这样记得还是很有效压差为0V时表示逻辑1隐形电平压差为2V时表示逻辑0显性电平对于低速CAN电压差为-1.5V时表示逻辑1隐性电平电压差为3V时表示逻辑0显性电平CAN总线发送总流程CAN总线数据帧格式数据帧数据帧由 7 个不同的位场组成帧起始、仲裁场/段、控制场/段、数据场/段、CRC 场/段、应答场/段、帧结尾。数据场的长度可以为 0。帧起始标志着数据帧和远程帧的其实由一个单独的显性位组成且起始帧必为显性电平逻辑0仲裁段包括报文标识符和RTR位仲裁位主要是用来判断发送单元的优先顺序连续输出显性电平最多的单元可继续发送这也就是为什么最小的优先级最高的原因识别符的长度为 11 位。这些位的发送顺序是从 ID-10 到 ID-0。最低位是 ID-0。最高的 7 位ID-10 到 ID-4必须不能全是“隐性”。RTR 位该位在数据帧里必须为“显性”而在远程帧遥控帧里必须为“隐性”。主要是为了区分数据帧和遥控帧。控制段包括IDEr0保留位和DLC数据长度IDE表示拓展标志位用于区分拓展格式还是标准格式 其中标准格式为显性0拓展格式为隐性1DLC表示后面的数据有几个字节数据段需要传输的数据内容传统CANClassic CAN报文中数据段Data Field的长度确实只有0到8个字节这也就是常说的CAN只支持传输最长8个字节的数据CAN FD支持最长64个字节。这是CAN协议“短帧”设计的核心特点也是它能够提供高实时性和高可靠性的原因之一。ps数据帧又分为标准格式上述和拓展格式且标准格式的发送优先级优于拓展格式。CRC段CRC 段是检查帧传输错误的帧。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符用于分隔的位为隐性位构成。ACK段主要分为ACK slot和ACK界定符发送单元的ACK段发送单元在 ACK 段发送 2 个位的隐性位。接收单元的ACK段接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位通知发送单元正常接收结束。这称作“发送 ACK”或者“返回 ACK”。帧结束由7个隐形位构成代表该帧的结束拓展CRC即循环冗余校验码Cyclic Redundancy Check是数据通信领域中最常用的一种查错校验码其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查CRC是一种数据传输检错功能对数据进行多项式计算并将得到的结果附在帧的后面接收设备也执行类似的算法以保证数据传输的正确性和完整性。遥控/远程帧接收单元向发送单元请求发送数据所用的帧。遥控帧由6个段组成遥控帧没有数据帧的数据段RTR为隐性电平1其他部分与数据帧相同。ps遥控帧相较于数据帧数据帧是发送方主动连续有间隔地向外广播数据而遥控帧则是接收方主动请求发送方发送广播数据接收方进行接收错误帧用于在接收和发送消息时检测出错误通知错误的帧。一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” 这些设备便会发出错误帧来破坏数据同时终止当前的发送设备。错误帧由错误标志和错误界定符构成错误标志包括主动错误标志和被动错误标志两种。主动错误标志 处于主动错误状态的单元检测出错误时输出的错误标志。设备默认处于出于主动错误状态。当设备检测到发生错误会连续发送6个显性位“0”显性是拉开总线总选又一个被拉开就必然处于显性状态“线与”特性“0”和“1”相遇时肯定显示“0”这样就会破坏掉总线数据其他设备检测到数据错误就会抛弃当前数据所有数据全抛弃若是主动错误产生太过频繁说明这个设备不太可靠设备就会进入被动错误状态。被动错误标志处于被动错误状态的单元检测出错误时输出的错误标志。当设备检测到发生错误会连续发送6个隐性位。隐性就是不去碰总线那么总线状态就不会发生变化就不会总线上别人发的数据只会破坏自己发的数据仅抛弃自己的数据错误界定符由8个隐性位构成过载帧过载帧是用于接收单元通知其尚未完成接收准备的帧。当接收方收到大量数据而无法处理时其可以发出过载帧延缓发送方的数据发送以平衡总线负载避免数据丢失。过载帧由过载标志和过载界定符构成过载标志6 个位的显性位。过载标志的构成与主动错误标志的构成相同。过载界定符8 个位的隐性位。过载界定符的构成与错误界定符的构成相同。帧间隔帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧数据帧、遥控帧、错误帧、过载帧分开。过载帧和错误帧前不能插入帧间隔。间隔3 个位的隐性位。总线空闲隐性电平无长度限制0 亦可。本状态下可视为总线空闲要发送的单元可开始访问总线。延迟传送发送暂时停止8 个位的隐性位。只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。位填充位填充是为防止突发错误而设定的功能。发送方每发送5个相同电平后自动追加一个相反电平的填充位接收方检测到填充位时会自动移除填充位恢复原始数据。参考文章 八万字解析CAN总线协议·从入门到实战保姆级教学(源码可直接移植使用)_can总线协议详解-CSDN博客CAN总线通信详解 (超详细配34张高清图)_can通讯-CSDN博客CRC循环冗余校验码模 2 除法模 2 除法与算术除法类似但每一位除的结果不影响其它位即不向上一位借位所以实际上就是异或。例如被除数 100101(2) 对除数 1110(2) 采用模 2 除法后商为 11(2)余数为 1。只要往后借一位位数与除数一致商就为1否则为0需要继续往后借由以上分析可知既然除数是随机的或者按标准选定所以 CRC 校验的关键是如何求出余数也就是 CRC 校验码。下面以一个例子来具体说明整个过程。现假设选择的 CRC 生成多项式为 P(X) X4 X3 1要求出二进制序列 10110011 的 CRC 校验码。下面是具体的计算过程1首先把生成多项式转换成二进制数由P(X) X4 X3 1可以知道它一共是 5 位总位数等于最高位的幂次加1即 415然后根据多项式各项的含义多项式只列出二进制值为 1 的位也就是这个二进制的第 4 位、第 3 位、第 0 位的二进制均为 1其它位均为 0很快就可得到它的二进制比特串为 11001。2因为生成多项式的位数为 5根据前面的介绍得知 CRC 校验码的位数为 4校验码的位数比生成多项式的位数少 1。因为原数据帧 10110011在它后面再加 4 个 0得到 101100110000然后把这个数以“模2除法”方式除以生成多项式得到的余数即 CRC 校验码为 0100。CRC算法发送方和接收方在通信前约定好一个预设整数作为除数。发送方在发送前根据原始数据和约定好的除数进行模二除法运算生成余数即CRC码然后将其附加到原始数据后面一起发送给接收方。接收方收到后将其模二除以约定好的除数当且仅当余数为0时接收方认为没有差错。常用CRC版本表示法中的最高位必须为1故实际看1后面的几位16进制CAN数据链路层中的CRC Field该CRC字段长度为15比特• 该CRC生成多项式为P(x)x15x14x10x8x7x4x31• 该CRC校验数据的范围是SOFStart of Frame帧起始字段至Data Field数据域结束• 若某接收节点计算的CRC字段与其接收到的CRC字段数值不一致则会在ACK-DELACK字段界定符之后发出错误帧。Checksum和Rolling CounterChecksum确保CAN报文数据内容未被破坏而Rolling Counter则确保数据帧的连续性和有序性两者相辅相成这样既保证了数据的正确性也检测了数据的完整性与顺序性这对于汽车这样对通讯网络实时性和安全性要求极高的系统至关重要。常见的Rolling Counter和Checksum的在一帧CAN报文中的布局数据帧的最后俩字节checksumChecksum即校验和Checksum是一种CAN报文的数据校验码用于检查通信数据的完整性Checksum是一种高效的错误检测机制其原理是发送端先通过规定的计算方法得到一个Checksum值再作为一个信号添加到CAN报文的数据段发送出去接收端接收到该报文后先使用相同的计算方法重新计算出一个Checksum值然后与接收到的Checksum值进行比较。如果结果一致就说明接收数据正确否则就认为数据有错误。发送方先初始化Checksum值为 0并将所有数据项相加结果为36再通过一套特定的算法计算得到最终Checksum值为 9最后发送方将数据和Checksum值一起打包发送给接收方。接收方先解包所接收的数据再采用与发送方相同的方法相加所有数据然后通过一套规定的算法计算得到最终Checksum值最终接收方计算出的Checksum值为 0这意味着数据未损坏。比对Checksum值进行判断一般规定连续三帧以上信号的Checksum不对则认为该报文数据有问题并丢弃该报文数据以此防止发送的报文出错。checksum和CRC的区别两者的位置。Checksum在CAN报文的数据段8Bit一般在数据场的第一个字节或者最后一个字节而CRC在CAN报文的CRC段15Bit两者的计算对象。Checksum是针对CAN报文数据段的信号采用相应的CRC校验算法常使用CRC8, 16, 32计算出Checksum值而CRC是针对CAN报文的帧起始、仲裁段、控制段和数据段采用相应的CRC校验算法常使用CRC1, 15, 17和21计算出CRC值两者的作用。Checksum是用来校验数据被正确的打包和解包、确保数据的加密和数据的可信度而CRC用来保证数据传输的正确性和完整性。Rolling CounterRolling counter即滚动计数器也叫Alive counter。它用于跟踪报文的序列确保报文按预期顺序接收。它是一个简单的递增计数器位于CAN报文的数据段占用4bit长度因此Rolling counter的数值范围为0~15。每发送一帧报文Rolling counter就加1到15就循环回到初始值即在0~15之间循环增加如下所示参考文章一文详解Checksum和Rolling Counter校验 - 极术社区 - 连接开发者与智能计算生态DBC文件的解读DBC文件的依据主要是OEM厂商制作的CAN matrixCAN matrix里面定义了每个报文的ID字节长度每个字节每个位代表什么含义根据这些内容使用CANoe制作对应的DBC文件并使用dbc文件读取软件如ZLG就可以加载所有的报文信息CAN报文类型CAN报文主要有四个类型应用报文、诊断报文、网管报文、标定报文应用报文各ECU之间传输的报文诊断报文由诊断仪和ECU之前传输的报文网管报文用于网络管理的报文标定报文校准调整参数系数

相关新闻

最新新闻

工业4-20mA电流环与DAC161S997的高精度实现

工业4-20mA电流环与DAC161S997的高精度实现

1. 工业4-20mA电流环的背景与挑战在工业自动化领域,4-20mA电流环传输技术已经存在了半个多世纪,却依然是过程控制系统中模拟信号传输的黄金标准。这种看似简单的技术背后,隐藏着令人惊叹的工程智慧——电流信号对电压降不敏感的特性&#xff…

2026/7/5 21:34:12
SARCLIP框架:多模态预训练提升SAR图像理解

SARCLIP框架:多模态预训练提升SAR图像理解

1. SARCLIP框架概述:当合成孔径雷达遇上多模态预训练 合成孔径雷达(SAR)作为一种主动式微波遥感技术,凭借其全天候、全天时的工作能力,在军事侦察、灾害监测、资源勘查等领域发挥着不可替代的作用。然而SAR图像特有的斑点噪声和几何畸变&…

2026/7/5 21:34:12
揭秘HBCTool:逆向Hermes字节码的终极利器

揭秘HBCTool:逆向Hermes字节码的终极利器

揭秘HBCTool:逆向Hermes字节码的终极利器 【免费下载链接】hbctool Hermes Bytecode Reverse Engineering Tool (Assemble/Disassemble Hermes Bytecode) 项目地址: https://gitcode.com/gh_mirrors/hb/hbctool 在React Native应用安全分析领域,H…

2026/7/5 21:34:12
YOLOv12遥感目标检测:MGCM模块创新与应用

YOLOv12遥感目标检测:MGCM模块创新与应用

1. 项目概述在遥感目标检测领域,YOLOv12作为当前最先进的实时检测框架之一,其性能提升一直备受关注。最近我们在TGRS 2025上发表的工作中,针对YOLOv12的Neck部分进行了创新性改进,提出了MGCM(Modal Guided Complementa…

2026/7/5 21:34:12
Spring Boot与Vue3前后端RSA加密登录实战:原理、实现与安全优化

Spring Boot与Vue3前后端RSA加密登录实战:原理、实现与安全优化

1. 项目概述:为什么需要前后端分离的RSA加密?在前后端分离的架构里,数据安全是个绕不开的话题。特别是登录、支付、敏感信息传输这些环节,明文传输密码就像用明信片寄银行卡密码,风险不言而喻。虽然HTTPS已经普及&…

2026/7/5 21:34:12
[F2F] MySQL相关

[F2F] MySQL相关

💡 MySQL的相关考察点主要在:特性(ACID,存储数据结构), 事务和锁的机制,索引的机制和使用。 常见的问题 👉MySQL事务得四大特性以及实现原理 特性 全称 含义 A Atomicity(原子性) 事务是不可分割的最小单位,要么全部成功,要么全部失败回滚 [ 通过 Undo Log 实现] C C…

2026/7/5 21:29:12

月新闻