二、CAN协议核心原理:从物理层到数据链路层

二、CAN协议核心原理:从物理层到数据链路层

2.1 物理层:信号的传输与电气特性

物理层是CAN协议的“物理基础”,定义了信号如何在总线上传输、电气参数如何设计,以及节点如何连接到总线。它直接决定了通信的可靠性、抗干扰能力和传输距离。

2.1.1 拓扑结构与线缆

CAN采用总线型拓扑(Bus Topology),所有节点通过一条共享的总线(双绞线或同轴电缆)连接,无主从之分。这种设计的优势在于:

  • 简化布线:所有节点只需连接到总线的两个端点,无需复杂的分支或星型连接;
  • 可靠性高:单点故障(如某段线缆损坏)不会导致整个网络瘫痪(除非断开总线两端);
  • 电气匹配简单:总线型拓扑便于实现终端阻抗匹配(见下文)。

典型线缆选择

  • 双绞线:最常用(如屏蔽双绞线STP),通过两根导线绞合降低电磁干扰(EMI),适用于大多数工业和汽车场景(传输速率≤1Mbps时,最大距离40米;速率≤500kbps时,最大距离1公里);
  • 同轴电缆:用于高速场景(如CAN FD或实验室测试),抗干扰能力更强,但成本较高;
  • 单线传输:仅在短距离、低速场景中使用(如部分低成本传感器),需额外保护电路。

终端电阻的必要性
总线型拓扑需在总线的两个端点各接一个120Ω终端电阻(与双绞线特性阻抗匹配)。若缺少终端电阻,信号会在总线末端发生反射(类似声波在山谷的回声),导致信号畸变、误码率升高。例如,汽车CAN网络的总线两端(如发动机舱和驾驶舱)必须各接一个120Ω电阻,否则高速通信(如500kbps以上)会出现频繁错误。
终端电阻的数值与双绞线的间距、内径、电磁常数有关,可以根据数学公式推到而出;
同时,终端电阻仅要求在高速can中使用,低速can并无强制规定;
终端电阻的连接图如下:
在这里插入图片描述
参考原文:https://blog.youkuaiyun.com/tjcwt2011/article/details/140932387

2.1.2 电气信号与编码

CAN的电气信号采用差分传输(Differential Signaling),即通过两根导线(CAN_H和CAN_L)传输互补的电压信号。这一设计与传统单端信号(如RS-485)有本质区别。

差分信号的优势

  • 抗共模噪声:外界干扰(如电机电火花、点火系统的电磁脉冲)会同时叠加到CAN_H和CAN_L上,形成“共模噪声”。由于接收端检测的是两者的差值(CAN_H - CAN_L),共模噪声会被抵消,有效提升抗干扰能力(汽车环境中可抵抗±30V瞬态干扰);
  • 逻辑电平清晰
    • 显性位(Dominant,逻辑0):CAN_H电压比CAN_L高≥0.9V(典型值为CAN_H=3.5V,CAN_L=1.5V);
    • 隐性位(Recessive,逻辑1):CAN_H与CAN_L电压相等(典型值为2.5V,差值≤0.5V)。
      显性位具有“优先性”——若总线上同时出现显性位和隐性位,最终表现为显性位(类似“线与”逻辑)。
2.1.3位时序与同步:时间划分与示意图

位速率与波特率

  • 位速率(也叫做比特率): 表示的是单位时间内,总线上传输的信息量,即每秒能够传输的二进制位的数量,R=1/T ,单位是bit per second,bps。比如,比特率为8bit/s,意思为一秒传输了8bit,包含了8个二进制事件的信息量。
  • 波特率(码元传输速率):表示单位时间(1s)内传输的码元个数(脉冲个数或者信息变化次数),码元可以是多进制的;kBaud(1baud=1bit/second, 1KBaud=1KB=1000bits/second)(码元:就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2、4bit)

CAN的位时序通过将每个位周期(Bit Time)划分为多个时间片段,确保节点间时钟同步并补偿物理延迟与时钟偏差。以下是详细的时间划分与同步机制:

位时间划分(以25 TQ为例)

每个位周期由 4个核心段 组成,总时间单位为 时间份额(Time Quantum, TQ),具体划分如下(参考ISO 11898标准):

段名称时间份额(TQ)作用可调范围
同步段(Sync_Seg)1 TQ用于同步节点间时钟,检测总线起始位(SOF)的下降沿。固定为1 TQ
传播段(Prop_Seg)1~8 TQ补偿信号在总线上的物理传输延迟(如导线长度、节点距离)。≥2倍总线传输延迟
相位缓冲段1(PBS1)1~8 TQ允许接收端调整采样点位置,补偿时钟偏差(如延长或缩短以对齐边沿)。可配置为1~8 TQ
相位缓冲段2(PBS2)2~8 TQ与PBS1配合补偿时钟偏差(如缩短PBS2以抵消PBS1的延长)。≥PBS1或数据处理时间

示例配置(总位时间=25 TQ):

  • Sync_Seg=1 TQ
  • Prop_Seg=2 TQ
  • PBS1=8 TQ
  • PBS2=14 TQ
  • 采样点位置:位于PBS1结束处(即第1+2+8=11 TQ处)

同步机制详解
1. 硬同步(Hard Synchronization)
  • 触发条件:总线空闲时检测到起始位(SOF)的下降沿(CAN_L从高→低)。
  • 操作:强制将本地时钟的同步段(Sync_Seg)对齐到SOF下降沿,重置位时序计数器。
  • 目的:确保所有节点在帧起始时同步,避免因时钟偏差导致后续位采样错误。
2. 重新同步(Resynchronization)
  • 触发条件:在数据帧或远程帧传输过程中,检测到总线边沿(上升沿/下降沿)与本地时钟预期的边沿不匹配。
  • 操作
    • 相位超前(接收端时钟滞后):延长PBS1段,使采样点后移以对齐总线边沿。
    • 相位滞后(接收端时钟超前):缩短PBS2段,使采样点前移以对齐总线边沿。
  • 限制:单次同步调整幅度不超过 同步跳转宽度(SJW, Synchronization Jump Width)(通常≤4 TQ)。

同步机制示意图(文本描述)
位周期划分(总位时间=25 TQ):
|<---Sync_Seg=1 TQ--->|<--Prop_Seg=2 TQ-->|<--PBS1=8 TQ-->|<--PBS2=14 TQ-->|
↑                     ↑                   ↑                ↑
|                     |                   |                |
0 TQ                  3 TQ               11 TQ           25 TQ

关键点说明

  1. 采样点:位于PBS1结束处(11 TQ),是接收端读取总线电平的位置。
  2. 同步跳转:若总线边沿偏离采样点,通过调整PBS1/PBS2使下一位的采样点回归理想位置。
  3. 误差补偿
    • 边沿滞后(接收端时钟快):缩短PBS2(如原PBS2=14→12),补偿+2 TQ。
    • 边沿超前(接收端时钟慢):延长PBS1(如原PBS1=8→10),补偿+2 TQ。

同步示例(时钟偏差补偿)

假设发送端与接收端时钟偏差为 +1 TQ(接收端时钟快):

  1. 检测到边沿滞后:接收端发现总线下降沿比预期晚1 TQ。
  2. 调整PBS1:在下一位时序中,将PBS1延长1 TQ(如原PBS1=8→9)。
  3. 补偿效果:采样点后移1 TQ,与总线边沿对齐。

限制:若偏差超过SJW(如SJW=2),则无法完全补偿,需通过调整预分频系数(Prescaler)优化位时间配置。


同步机制的意义
  • 抗时钟偏差:通过动态调整PBS1/PBS2,容忍±1 TQ至±4 TQ的时钟误差(取决于SJW)。
  • 抗物理延迟:传播段(Prop_Seg)补偿信号在总线上的传输延迟(如长距离通信)。
  • 稳定性保障:避免因时钟不同步导致的数据错误,确保CAN总线的高可靠性。

通过合理配置位时间参数(Sync_Seg、Prop_Seg、PBS1、PBS2)和同步策略,CAN协议在分布式系统中实现了高效、可靠的通信。

例如,发送端和接收端的晶振频率存在微小差异(如±1%),经过多个位周期后,两者的位时序会逐渐失步。重新同步机制通过插入或删除“补偿间隔”(Bit Stuffing,见下文),强制对齐位时序,确保通信正确。

2.2 数据链路层:通信的“规则引擎”

数据链路层是CAN协议的“大脑”,负责管理节点间的通信规则、冲突解决、错误检测和数据传输。它定义了帧结构(如何封装数据)、仲裁机制(多主竞争的解决)、错误处理(如何检测和恢复错误)等核心功能。

2.2.1 帧结构:数据的“包装盒”

CAN协议定义了5种帧类型(Frame Types),但最常用的是数据帧(Data Frame,携带有效数据)和远程帧(Remote Frame,请求数据),错误帧(Error Frame)和过载帧(Overload Frame)用于异常处理。以下是各类帧的格式与作用:
在这里插入图片描述

(1)数据帧(Data Frame):通信的核心

数据帧的结构分为7个场(Field),从左到右依次为:仲裁场→控制场→数据场→CRC场→ACK场→结束场。

场名称长度(位)功能描述
仲裁场11/29包含11位标准ID或29位扩展ID(ID+IDE位+SRR位),用于标识数据优先级和来源。
控制场6前2位为保留位(RB0/RB1),后4位为数据长度码(DLC,0~8字节)。
数据场0~64实际传输的数据(标准CAN为0~8字节,CAN FD支持0~64字节)。
CRC场15循环冗余校验码,用于检测数据传输中的位错误(基于多项式x¹⁵+x¹⁴+…+1)。
ACK场2发送方插入的2位(第1位为ACK槽,第2位为ACK界定符)。接收方若正确接收数据,会在ACK槽发送显性位(0)。
结束场77位连续隐性位(1),标志数据帧结束。

示例:一个标准CAN数据帧(ID=0x123,DLC=4,数据=0xAA,0xBB,0xCC,0xDD)的仲裁场为0b0000000100100011(11位ID),控制场为0b00000100(DLC=4),数据场为0xAABBCCDD,CRC场为根据这些数据计算出的15位校验码。

(2)远程帧(Remote Frame):请求数据的“信号弹”

远程帧用于节点向其他节点请求发送特定ID的数据。它的结构与数据帧类似,但无数据场,且RTR位(远程发送请求位)为隐性(1)(数据帧的RTR位为显性0)。

例如,节点A需要获取节点B的温度数据(ID=0x456),会发送一个远程帧:仲裁场为0x456,RTR位=1,DLC=2(表示希望接收2字节数据)。节点B收到后会发送一个数据帧(ID=0x456,数据场为温度值)。

(3)错误帧(Error Frame):通信的“急救信号”

当节点检测到总线上的错误(如位错误、CRC错误),会立即发送错误帧,强制所有节点停止当前通信并重新同步。错误帧由两部分组成:

  • 错误标志(Error Flag):6位连续显性位(0),覆盖总线上的所有其他信号;
  • 错误界定符(Error Delimiter):8位隐性位(1),用于分隔错误标志和后续通信。

错误帧的触发条件将在2.2.3节详细说明。

(4)过载帧(Overload Frame):流量控制的“缓冲垫”

过载帧用于通知总线上的其他节点:“我暂时无法接收更多数据,请稍后再发”。它的结构与错误帧类似(6位显性位+8位隐性位),但仅在节点接收缓冲区已满时发送(例如,节点正在处理大量数据,无法及时解析新报文)。

2.2.2 仲裁机制:多主竞争的“公平法则”

CAN是多主通信协议,任何节点均可主动发送数据。当多个节点同时发送数据时,总线会通过仲裁机制决定哪个节点获得发送权。仲裁的核心是“ID优先级”和“显性位覆盖隐性位”的电气特性。

(1)仲裁原理:线与逻辑的胜负判定

所有发送节点的信号在总线上以“线与”(Logical AND)方式叠加:若某一位有至少一个节点发送显性位(0),总线最终表现为显性位(0);只有所有节点都发送隐性位(1),总线才表现为隐性位(1)。

仲裁过程逐位比较(从仲裁场最高位开始,到最低位结束):

  • 若某一位中,节点A发送显性位(0),节点B发送隐性位(1),则节点A获胜(总线为0),节点B退出竞争;
  • 若所有已参与仲裁的节点在该位都发送显性位(0),则继续比较下一位;
  • 直到某一位只有一个节点发送显性位,该节点获得总线控制权,继续发送剩余位;若所有位都相同(所有节点发送相同的ID),则发送节点正常完成数据帧。
(2)ID优先级:数值越小,优先级越高

CAN的ID(11位或29位)直接决定优先级:ID值越小,优先级越高。例如,ID=0x001的节点优先级高于ID=0x002的节点。

  • 标准帧(11位ID):ID范围0~0x7FF(2047个唯一ID);
  • 扩展帧(29位ID):ID范围0~0x1FFFFFFF(约2亿个唯一ID),通过IDE位(标识符扩展位)区分标准帧(IDE=0)和扩展帧(IDE=1)。
(3)仲裁的实际影响
  • 高优先级ID的设计:关键任务(如刹车信号)应分配低ID(如0x001),确保其报文优先发送,避免被低优先级数据(如车窗控制,ID=0x7FF)延迟;
  • 仲裁的透明性:节点无需主动参与仲裁(仅需按位发送数据),仲裁过程由总线电气特性自动完成,对应用层完全透明。
2.2.3 错误检测与恢复:通信的“免疫系统”

CAN协议内置了完善的错误检测机制,确保通信的可靠性。它定义了5种错误类型,并通过错误计数器(TEC发送错误计数器、REC接收错误计数器)和错误状态(错误主动、错误被动、总线关闭)实现自动恢复。

(1)错误类型与检测
错误类型触发条件检测机制
位错误发送节点检测到总线电平与自己发送的电平不一致(如发送显性位,但总线为隐性)。发送节点在发送每一位时,实时比较总线电平与本地输出电平。
填充错误数据场中出现连续6个相同位(违反位填充规则)。CAN协议规定:连续5个相同位后必须插入1个相反位(位填充)。若违反此规则,接收节点判定为填充错误。
CRC错误接收节点计算的CRC校验码与发送节点提供的CRC码不一致。发送节点在数据场后附加15位CRC码(基于数据场计算);接收节点重新计算并比对。
格式错误固定格式的场(如CRC界定符、ACK界定符、结束场)出现非法位(如结束场出现显性位)。这些场的格式是固定的(如CRC界定符必须是8位隐性位),违反即触发格式错误。
确认错误发送节点未在ACK槽(ACK场第1位)检测到显性位(0)。接收节点若正确接收数据,会在ACK槽发送显性位;发送节点未收到则判定为确认错误。
(2)错误计数器与状态转换

每个节点维护两个计数器:

  • TEC(Transmit Error Counter,发送错误计数器):记录发送错误的次数(每次位错误、填充错误、CRC错误、确认错误均会增加TEC);
  • REC(Receive Error Counter,接收错误计数器):记录接收错误的次数(仅接收错误会增加REC)。

错误状态机的工作规则:

  • 错误主动(Error Active):TEC < 128且REC < 128。节点可正常发送数据,若检测到错误,发送错误帧;
  • 错误被动(Error Passive):TEC ≥ 128或REC ≥ 128。节点发送数据时需插入8个隐性位(“延迟传输”),避免干扰总线;
  • 总线关闭(Bus Off):TEC > 255。节点完全退出总线通信,需通过软件复位或硬件重启恢复。

示例:节点A发送数据帧时,因总线干扰导致某一位发送显性位但总线为隐性(位错误),TEC加8(初始值为0,变为8)。若后续再次发生填充错误(TEC加8,变为16),节点仍处于错误主动状态。若TEC持续增加至128,节点进入错误被动状态,发送数据时会插入延迟位;若TEC超过255,节点被关闭,需人工干预重启。

小结:物理层通过差分信号、终端电阻和位时序确保信号可靠传输;数据链路层通过仲裁机制解决多主竞争,通过错误检测与恢复保障通信质量。两者共同构建了CAN“高可靠、强实时”的核心特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值