news 2026/7/12 18:37:10

从零开始认识CAN网通信

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始认识CAN网通信

从零开始认识CAN网通信

  • 引言:为什么需要CAN总线?
  • 物理层:差分信号与“线与”逻辑
    • 电平定义
    • “线与”逻辑
    • 为什么用差分信号?
  • 数据链路层:报文、仲裁与帧结构
    • CAN通信模型
    • 非破坏性仲裁机制
    • 标准帧 vs 扩展帧
    • CAN报文接收与发送流程

引言:为什么需要CAN总线?

想象一下,现代的汽车里装着几十个电子控制单元(ECU):发动机控制、ABS防抱死、自动空调、车窗控制……如果每个模块之间都单独拉线,那汽车里的线束会多得像一团乱麻,不仅成本高、接线麻烦,还容易出故障。

传统点对点通信CAN总线通信
每个ECU之间都需要独立连线所有ECU挂载在同一对双绞线上
节点数量增加,线束呈指数增长节点增加只需并联接入,线束不变
故障排查困难,维护成本高分布式诊断,故障定位方便

CAN总线就是为了解决这个问题而生的。它全称是控制器局域网(Controller Area Network),由德国博世(BOSCH)公司在1986年开发,后来成为国际标准(ISO 11898)。简单来说,它就像一条数据高速公路,让所有电子控制单元都能挂在这条“路”上,通过一对双绞线进行高效、可靠的通信,大大减少了线束数量。

如今,CAN总线不仅统治了汽车电子,在工业自动化、医疗设备、船舶控制、机器人等领域也是应用广泛。

物理层:差分信号与“线与”逻辑

CAN总线物理层只用两根线:CAN_H 和 CAN_L。它通过两根线之间的电压差(差分信号)来传输数据,而不是像串口那样依赖对地电压。

电平定义

信号类型CAN_H电压CAN_L电压差分电压逻辑值
显性(Dominant)约3.5V约1.5V2V0
隐性(Recessive)约2.5V约1.5V2V0

“线与”逻辑

总线执行线与机制。可以把显性(0)理解为“强势”信号,隐性(1)理解为“弱势”信号。

节点A输出节点B输出总线最终电平
隐性 (1)隐性 (1)隐性 (1)
显性 (0)隐性 (1)显性 (0)
隐性 (1)显性 (0)显性 (0)
显性 (0)显性 (0)显性 (0)

为什么用差分信号?

  • 抗干扰能力强:外界噪声几乎同时耦合到两根线上,接收端只关心差分值,共模干扰相互抵消。
  • 电磁辐射低:两根线绞在一起(双绞线),对外辐射相互抵消。

数据链路层:报文、仲裁与帧结构

CAN总线通信是以“报文”为单位的。它不指定发送者和接收者,而是通过报文标识符(ID) 来区分不同的消息。

CAN通信模型


注意:CAN总线两端必须各接一个120Ω的终端电阻,用于匹配阻抗,防止信号在总线末端反射造成数据错误。

非破坏性仲裁机制

这是CAN最精妙的设计。当多个节点同时要发送数据时,它们会从ID的最高位开始,一位一位地比较。谁先发送出隐性位(1),而总线上却是显性位(0),谁就立即停止发送,转为接收状态。

关键结论:ID数值越小,优先级越高,所以一般比较重要的任务ID号都比较小

标准帧 vs 扩展帧

对比项标准帧 (Standard Frame)扩展帧 (Extended Frame)
ID位数11位29位
ID范围0x000 ~ 0x7FF0x00000000 ~ 0x1FFFFFFF
帧格式ID + RTR + IDE + DLCID + SRR + IDE + ID扩展 + RTR + DLC
可挂载节点数最多 2048 个最多 5.3 亿个
数据字节数0 ~ 8 字节0 ~ 8 字节
应用场景简单系统、传统汽车复杂系统、J1939协议

标准帧格式:

帧起始位(1位)仲裁段(11位ID)控制段(6位)数据段(0~64位)CRC段(16位)ACK段(2位)帧结束(7位)

扩展帧格式:

帧起始位(1位)基ID(11位)SRR(1位)IDE(1位)扩展ID(18位)控制段(6位)数据段(0~64位)CRC段(16位)ACK段(2位)帧结束(7位)

CAN报文接收与发送流程

发送流程图

Created with Raphaël 2.3.0开始发送检查总线是否空闲连续11个隐性位发送帧起始SOF(显性位0)发送仲裁段(ID)逐位发送并监听仲裁是否失败?退出发送转为接收状态继续发送遥控段/数据段发送CRC校验段等待ACK确认位(监测显性电平)是否接收ACK?发送帧结束(7个隐性位)重发或报错(错误帧)yesnoyesno

接收流程图

Created with Raphaël 2.3.0等待接收检测到帧起始SOF(显性位下降沿)接收仲裁段(ID)逐位接收并存储ID是否通过过滤器?继续接收控制段/数据段接收CRC校验段本地计算CRCCRC校验是否通过?发送ACK确认位(显性位)接收帧结束EOF(7个隐性位)处理并存储数据触发回调函数发送错误帧(显性位)忽略该帧(不发送ACK)yesnoyesno
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 18:35:27

AI 驱动数据文化:从工具落地到组织变革的最后一步

AI 驱动数据文化:从工具落地到组织变革的最后一步 很多公司的数据团队有这样的困境:工具已经很先进了——Snowflake 做数仓、Tableau 做看板、Airflow 做调度、Python 做分析——但业务方还是用 Excel 做决策,数据报告还是被当做"参考&…

作者头像 李华
网站建设 2026/7/12 18:29:20

2026新手单簧管选购指南|5大误区拆解,4款高性价比单簧管推荐

结合多年教学与实测经验,我整理出新手选购单簧管最容易踩的5个致命误区,同时精选4款经过学生长期实战、适配不同预算的高性价比机型,全方位帮新手规避套路,精准选到适配长期练习的入门单簧管。一、新手选购5大致命误区&#xff0c…

作者头像 李华
网站建设 2026/7/12 18:28:47

UniHacker:构建企业级Unity开发环境的技术解决方案

UniHacker:构建企业级Unity开发环境的技术解决方案 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker UniHacker是一款为Unity开发者提供跨平台授权…

作者头像 李华
网站建设 2026/7/12 18:28:08

gostone API完全手册:从基础调用到高级权限控制

gostone API完全手册:从基础调用到高级权限控制 【免费下载链接】gostone The cloud operating system security high-performance authentication component can be implemented as a high-performance replacement for OpenStack Keystone. 项目地址: https://g…

作者头像 李华
网站建设 2026/7/12 18:24:31

临时走开怕同事乱动电脑?这款挂机锁让我放心去接水了

全透明锁屏、拦住键鼠、绿色单文件,办公区和展台都能用。 先说个尴尬事。上周我在工位上接到个电话,起身去走廊聊了五分钟。回来就看见隔壁工位的小哥正对着我的屏幕研究那份还没定稿的报价单,鼠标都挪到"另存为"上了。我当时脸都绿…

作者头像 李华
网站建设 2026/7/12 18:23:19

从技术文档到演示文稿:我梳理的PPT生成工具对比与选型思路

一、引言在日常技术分享、课程作业汇报、项目阶段性总结以及毕业答辩等场景中,PPT是辅助表达的重要工具。然而在实际操作中,不少同学或开发者打开空白PPT后,往往需要花费较多时间在结构梳理、版式调整和素材查找上。本文面向需要快速完成技术…

作者头像 李华