一、拓扑结构:总线拓扑
线性总线:所有节点通过两条线(CAN_H和CAN_L) 并行连接
差分信号:
CAN_H - CAN_L = +2V → 显性位(逻辑0)
CAN_H - CAN_L = 0V → 隐性位(逻辑1)
终端电阻:
总线两端各需120Ω电阻
消除信号反射,保证信号完整性
长度与速率:
速率越高,允许的长度越短
典型:1 Mbps时最长40米,125 kbps时可达500米
| 优势 | 局限 |
|---|---|
| 布线简单:只需一条主干线 | 单点故障敏感:总线断裂影响所有节点 |
| 增删节点容易:只需并联接入 | 故障诊断复杂:需要分段排查 |
| 成本低:线缆用量少 | 负载有限:通常最多110个节点 |
| 适合线性分布系统:如汽车车身 | 距离受限:无中继时通常<1km |
二、寻址方式:广播机制+接受过滤
广播机制(Broadcast)
“一人说话,所有人听见”
发送方:不指定目标地址,将报文发送到总线
物理层事实:所有节点同时收到相同的电气信号
类比:就像会议室里有人发言,所有人都能听到
接收过滤(Acceptance Filtering)
“我只听我关心的”
每个CAN控制器都有硬件级的验收滤波器:
// 概念性配置示例
Filter Bank 1:
ID Mask: 0x7FF (11位全匹配)
Filter ID: 0x123
Result: 只接收ID=0x123的报文
Filter Bank 2:
ID Mask: 0x7F0 (高7位匹配)
Filter ID: 0x200
Result: 接收ID=0x200-0x20F的所有报文
物理信号 → 硬件滤波 → 硬件缓冲区 → 软件处理
↓ ↓ ↓ ↓
所有节点 配置过滤 临时存储 应用层
同时接收 丢弃无关 匹配报文 解析数据
的报文
三、仲裁机制:线与+回流
线与逻辑(Wired-AND)
这是CAN总线的物理基础:
显性位(0):强制拉低总线
隐性位(1):释放总线(通过电阻拉高)
逻辑规则:
总线状态 = 所有节点输出的AND
只要有一个节点发0(显性),总线就是0
所有节点都发1(隐性),总线才是1
节点A输出:1(隐性)---\ 节点B输出:1(隐性)--- AND → 总线=1(隐性) 节点C输出:1(隐性)---/ 节点A输出:1(隐性)---\ 节点B输出:0(显性)--- AND → 总线=0(显性) 节点C输出:1(隐性)---/
回读机制(Bit Monitoring)
每个发送节点必须:
发送一位
立即回读总线实际电平
比较发送与接收是否一致
| 特性 | 说明 | 优势 |
|---|---|---|
| 非破坏性 | 失败者主动退让,胜利者无损继续 | 无带宽浪费 |
| 基于优先级 | ID值越小优先级越高 | 紧急报文无延迟 |
| 实时解决 | 在ID发送完时解决冲突 | 确定性强 |
| 分布式 | 无需中央仲裁器 | 可靠性高 |
四、标准帧结构
图参考vector官方讲解PPT

五、五种通讯保护机制
5.1 位填充机制
基本原理
规则:在帧起始(SOF)到CRC界定符之间的所有数据(包括ID、控制场、数据场、CRC场),每连续出现5个相同极性的位(5个0或5个1)后,发送节点必须自动插入一个反向极性的填充位。接收节点会自动删除这些填充位,恢复原始数据。
主要作用
时钟同步:确保总线有足够的信号边沿(从0到1或1到0的跳变),以便所有节点能够同步其内部时钟,防止因微小晶振误差累积导致的失步。
错误检测:为位填充错误检测提供基础。如果接收节点在解除填充时,发现有连续6个相同位,则判定为位填充错误,发送错误帧。
电磁兼容性:避免长串相同位导致的电磁干扰问题。
5.2 位监控机制
基本原理
核心规则:发送节点在发送每一位的同时,实时监控总线上的实际电平,并与自己刚刚发送的位进行比较。
比较逻辑:
发送显性位(0),监听到隐性位(1) → 位错误 (Bit Error)
发送隐性位(1),监听到显性位(0) → 仲裁正常(在仲裁场)或ACK确认(在ACK Slot)或位错误(非仲裁场和ACK slot)
主要作用
自我故障诊断:检测发送节点自身驱动器是否故障(无法驱动总线)。
确保发送一致性:保证发送节点实际输出的信号与总线状态一致。
支持仲裁机制:仲裁就是基于此机制实现的。
5.3 crc校验
基本原理
位置:位于数据场之后,CRC界定符之前。
长度:15位CRC值 + 1位CRC界定符(隐性位)。
生成多项式:CAN使用特定多项式生成CRC,例如标准帧:
x¹⁵ + x¹⁴ + x¹⁰ + x⁸ + x⁷ + x⁴ + x³ + 1覆盖范围:从帧起始(SOF)到数据场结束的所有位(包括填充位)。
主要作用
检测多位突发错误:CRC对总线上的突发干扰(如电磁脉冲)有很强的检测能力。
确保数据完整性:提供高概率的错误检测覆盖。
发送方计算,接收方验证:发送方计算并附加CRC,接收方重新计算并比对。
工作机制
发送节点将SOF到数据场结束的位序列作为被除数。
用生成多项式进行模2除法,得到15位余数(CRC)。
将CRC附加在报文后发送。
接收节点进行相同计算,比较结果:
匹配 → 报文正确
不匹配 → CRC错误,发送错误帧
5.4 帧格式校验
基本原理
检查报文的结构和格式是否符合CAN协议规范。
检查内容
固定格式位检查:
帧起始(SOF):必须是显性位(0)
仲裁场和控制场的保留位:必须是显性位
CRC界定符:必须是隐性位(1)
ACK界定符:必须是隐性位(1)
帧结束(EOF):7个连续的隐性位
帧类型一致性:
数据帧、远程帧、错误帧、过载帧各有固定格式
检查各字段长度和位置是否正确
DLC有效性:
数据长度码(DLC)必须在有效范围内(0-8,或扩展帧的0-64)
远程帧的DLC必须与对应数据帧一致
主要作用
检测格式违规:如保留位不为显性、界定符不为隐性等。
防止畸形帧传播:格式错误的帧会被立即中断。
增强协议鲁棒性:确保所有节点对帧结构的理解一致。
5.5 校验位监控
基本原理
ACK Slot机制:
发送节点在ACK Slot位置发送隐性位(1)
所有正确接收该帧的节点(无论是否需要该数据),必须在此位置发送显性位(0) 覆盖它
发送节点监控ACK Slot位:
监听到显性位(0) → 至少有一个节点成功接收
监听到隐性位(1) → 无节点确认,发送失败
主要作用
确保传输确认:提供最基本的传输成功确认机制。
检测总线节点存活:如果无节点应答,可能意味着总线断路或无活动节点。
实现闭环验证:发送方能够知道接收方是否成功接收。
特殊规定
应答节点范围:所有正确接收的节点,包括:
需要此ID数据的节点
不需要此ID但正确接收的节点
发送节点本身(如果它也正确接收)
错误节点不应答:检测到错误的节点禁止发送ACK。
5.6 错误处理
当任何一层保护机制检测到错误时:
检测节点立即在下一位发送错误帧
错误帧中断当前传输
发送节点记录错误计数器
根据错误计数,节点可能进入错误主动、错误被动或总线关闭状态
发送节点稍后重发该报文(如果是可恢复错误)
场景模拟:
步骤1:检测到错误
节点A在CRC校验失败后,在CRC界定符后的第一位开始发送错误标志。
步骤2:发送/识别错误标志
节点A是主动错误状态,开始发送:
000000(6个连续显性位)其他所有节点:
正在正常接收,遵守位填充规则
当接收到第6个连续显性位时,立即意识到:"违规!这是错误帧!"
这个意识本身就是位填充错误检测
每个检测到此错误的节点必须立即在下一位加入,也发送错误标志
步骤3:错误标志的叠加
由于多个节点几乎同时发送错误标志,总线实际上会出现6-12个连续的显性位:
第一个检测到错误的节点开始发6个0
其他节点稍晚一点加入,延长了显性位的持续时间
这个叠加确保了错误信号足够强大,不会被噪声干扰
步骤4:发送错误界定符
每个节点在完成自己的6位错误标志后,开始发送8个连续的隐性位(1)
总线逐渐从显性变为隐性
当所有节点都看到连续的8个隐性位时,知道错误帧结束
步骤5:恢复与重试
总线回到空闲状态(隐性)
发送节点稍后会自动重试发送失败的报文
所有节点更新各自的错误计数器
7682

被折叠的 条评论
为什么被折叠?



