CAN通信-小白入门详细篇

一、CAN通信系统架构示意图

  • CAN(Controller Area Network)是一种多主机广播型串行通信协议,常用于车辆、工业等分布式控制系统中。

  • 架构主要包括:

    1. 主控CPU:负责处理应用层逻辑。

    2. CAN控制器:实现数据帧的封装、解包、仲裁等协议层操作。

    3. CAN收发器(Transceiver):负责电平转换,将数字信号转换为差分信号(CANH/CANL)在物理总线上传输。

  • 通信线路:由一对双绞线(CANH、CANL)构成,采用差分信号传输,提高抗干扰能力。

  • 节点特性:所有节点并联连接在同一总线上,具备发送与接收能力,通过帧ID进行仲裁。

  • 终端电阻:CAN总线两端需接120Ω终端电阻,用于阻抗匹配,防止信号反射。

                                                     图1 (含500kbps与125kbps双总线)

二. CAN通信原理概述

      CAN帧格式示意图(标准格式 vs 扩展格式):CAN数据帧由帧起始仲裁段控制段数据段CRC段ACK段帧结束等7个部分构成。其中标准帧使用11位标识符(ID),扩展帧使用29位标识符。如上图所示,上半部分为标准帧结构,下半部分为扩展帧结构。两者的区别主要在仲裁段ID长度不同,其余部分(如数据长度码DLC、数据字段、CRC校验等)结构相同。具体字段说明如下

段名位数含义说明
SOF(帧起始)1 位(显性位)标识一帧的开始,总线空闲时任意节点发送 SOF 即可发起帧传输
仲裁段12~32 位包含 ID(11位标准ID / 29位扩展ID)+ RTR(远程请求帧标志)
控制段6 位IDE(帧格式标志,0=标准帧,1=扩展帧)、r0/r1(保留位)、DLC(4位,表示数据字节数)
数据段0~64 位(最多8字节)具体传输内容,由 DLC 指定长度(0~8 字节),远程帧无此段
CRC段16 位15 位 CRC 校验码 + 1 位 CRC定界符,用于检测帧内容传输错误
ACK段2 位ACK槽 + ACK定界符,接收节点在 ACK 槽发显性位表示收到数据
EOF(帧结束)7 位(隐性位)标识一帧的结束
IFS(帧间隔)≥3 位(隐性位)帧与帧之间的最小间隔时间(帧间空间),用于控制器内部处理延时

上述帧格式适用于数据帧和远程帧,两者唯一区别是远程帧没有数据段。除了数据帧和远程帧外,CAN总线还定义了错误帧、过载帧和帧间隔等帧类型,但这里不展开,主要聚焦正常通讯的数据帧。值得注意的是,CAN总线使用差分信号传输,逻辑上存在“显性”和“隐性”两种电平。显(Dominant)对应逻辑0,隐性(Recessive)对应逻辑1。当总线同时存在显性和隐性电平时,总线结果将呈现显性电平。显性电平优先级高于隐性电平,这是CAN总线仲裁机制的基础。

这张图是 CAN总线仲裁过程示意图,形象展示了两个节点同时发送报文时的总线仲裁机制

  • 节点1 和 节点2 同时开始发送报文,其前几位ID相同,仲裁阶段并未分出胜负。

  • 当发送到第5位时:

    • 节点1发送的是隐性位 1

    • 节点2发送的是显性位 0

  • 由于CAN总线的电平规则是“显性覆盖隐性”,此时总线电平为显性 0

  • 节点1检测到总线电平与自己发送的电平不符,立即放弃发送并转为接收模式,节点2则赢得仲裁,继续完成剩下的帧发送。

底部的“总线”一行显示了此时实际的电平状态,也表明:最终总线上发送的是节点2的完整报文。

该图直观说明了ID越小(显性位越多)优先级越高的机制,并体现了CAN总线的非破坏性仲裁——仲裁失败的节点无需重发优先帧,保证了高优先级数据实时性。

仲裁是完全由硬件自动完成的,不需要你手动“比大小”或者判断。

✅ 更准确地说:

当你在代码中调用 HAL_CAN_AddTxMessage() 并指定了一个 ID(例如 0x201),CAN 控制器就会使用这个 ID 自动参与仲裁。如果总线上没有其他节点发送帧,你的帧就会直接发送;如果多个节点同时请求发送帧,那么:

  • 控制器会从 SOF之后的每一位开始进行位级仲裁

  • 谁的 ID 先出现“显性位”(0)且别人是隐性(1),谁就保留发送权;

  • ID 越小,优先级越高,因为二进制中 0(显性) 比 1(隐性)更占优势;

  • 输掉仲裁的帧,控制器会自动退让,并在下次总线空闲时重发;

  • 你作为开发者无需干预这一过程,只需填好 ID 即可。

参考了csdn部分博主内容:冬瓜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值