CAN通信协议 - ISO 11898

发布时间:2026/8/25 1:28:37

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之前传输的报文网管报文用于网络管理的报文标定报文校准调整参数系数

相关新闻

电力载波通信技术(PLC)发展全解析:从历史演进到未来趋势

电力载波通信技术(PLC)发展全解析:从历史演进到未来趋势

2026/8/25 1:26:02

电力载波通信技术发展全解析:从历史演进到未来趋势目录 历史溯源:跨越世纪的通信革命 1.1 概念萌芽与早期实践1.2 中国电力载波发展轨迹 技术演进:从模拟到智能的跨越 2.1 调制技术的迭代升级2.2 芯片架构的突破创新 核心原理:电力…

UDS on CAN (DoCAN) - ISO 15765

UDS on CAN (DoCAN) - ISO 15765

2026/8/24 15:31:13

定义ISO15765-2 标准主要内容是Transport protocol and network layer services,即传输层和网络层的服务,根据ISO7层模型,此层的下一层级是数据链路层和物理层,上一个层级是会话层和应用层。网络层负责在不同网络间传输数据包&…

STM32与LP5812实现高效RGB LED灯光控制方案

STM32与LP5812实现高效RGB LED灯光控制方案

2026/8/24 3:22:26

1. 项目背景与核心价值在智能硬件和交互式设备设计中,灯光效果已经成为提升用户体验的关键要素之一。从游戏外设的沉浸式光效到智能家居的环境氛围调节,动态可编程的RGB LED系统正在重新定义人机交互的视觉语言。LP5812作为一款专为RGB LED设计的驱动芯片…

Mread:终端命令行工具,免费阅读Medium付费墙文章

Mread:终端命令行工具,免费阅读Medium付费墙文章

2026/8/25 1:24:38

你是否曾遇到过想阅读一篇 Medium 上的优质技术文章,却因为付费墙而不得不放弃?或者,作为一名开发者,你更习惯在终端(Terminal)里高效地处理一切,包括阅读?今天,我们就来…

2026年联想工作站采购指南:为什么80%企业选择商红科技代理商?

2026年联想工作站采购指南:为什么80%企业选择商红科技代理商?

2026/8/25 1:24:38

目录 2026年联想工作站采购避坑指南:为什么80%企业最终选择商红科技作为代理商?一、联想工作站采购的三大误区:价格低≠性价比高 误区1:只看硬件报价,忽略交付能力误区2:轻信"全国最低价"&#x…

Node.js 与 Deno 之父 Ryan Dahl 带队,重写了 Cloudflare Durable Objects|SSP Github Daily

Node.js 与 Deno 之父 Ryan Dahl 带队,重写了 Cloudflare Durable Objects|SSP Github Daily

2026/8/25 1:24:38

DAILY OPEN SOURCE 第 124 期 denoland/celld:Ryan Dahl 把 Cloudflare 最强原语"解放"了——无控制平面、无共识的自托管 Durable Objects Node.js 与 Deno 之父 Ryan Dahl 带队,用 Rust V8 SQLite 对象存储重写了 Cloudflare Durable Ob…

合肥财税公司科普:2026工会经费返还误区与属地合规实操指南

合肥财税公司科普:2026工会经费返还误区与属地合规实操指南

2026/8/25 1:24:38

多数合肥小微企业经营者重点关注增值税、企业所得税等主体税种,极易忽略工会经费这类属地规费的合规申报与红利申领。很多创业者存在统一认知误区:认为只要按时缴费,就能享受年度全额返还福利,甚至分不清工会经费与工会筹备金的区…

OpenClaw Skill机制解析:从能力描述到智能决策的AI Agent设计

OpenClaw Skill机制解析:从能力描述到智能决策的AI Agent设计

2026/8/25 1:24:38

1. 从“十几个Skill”到“智能涌现”:我们到底在期待什么?最近在折腾各种AI Agent框架,发现一个挺有意思的现象:很多朋友在OpenClaw或者类似平台上,辛辛苦苦收集、编写了十几个甚至几十个Skill(技能&#x…

GetQzonehistory:把QQ空间的历史说说导出成本地Excel和图片备份

GetQzonehistory:把QQ空间的历史说说导出成本地Excel和图片备份

2026/8/25 1:14:38

GetQzonehistory:把QQ空间的历史说说导出成本地Excel和图片备份 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory 是一个开源 Python 工具,作用是…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

2026/8/25 0:04:34

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

2026/8/25 0:04:35

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

2026/8/25 0:04:35

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…