嵌入式工程师必备:CAN 总线核心参数速查表
摘要:CAN 总线调试时记不住终端电阻值?波特率怎么算?错误状态有哪些?本文汇总 CAN 物理层、链路层、协议层的核心参数与经验值,建议收藏并作为项目 Check List。
一、物理层(Physical Layer)核心参数
|
参数 |
符号 |
典型值 / 说明 |
工程师关注点 |
|---|---|---|---|
|
特性阻抗 |
Z₀ |
120 Ω |
必须全程保持一致 |
|
终端电阻 |
Rterm |
120 Ω(仅总线两端) |
中间节点严禁加 |
|
线缆类型 |
- |
双绞线(Twisted Pair) |
绞距越密越好(< 2cm) |
|
共模电压范围 |
VCM |
-2V ~ +7V |
超出范围可能导致收发器损坏 |
|
差分电压(显性) |
Vdiff |
> 1.5V |
决定信号质量 |
|
总线长度 vs 波特率 |
- |
见下方经验表 |
距离越长,速率越低 |
总线长度与波特率经验表(参考 ISO 11898-2)
|
波特率 |
最大推荐长度 |
应用场景 |
|---|---|---|
|
1 Mbps |
25 m |
车内 ECU 高速网 |
|
500 kbps |
100 m |
车身控制、工业现场 |
|
250 kbps |
250 m |
一般工业控制 |
|
125 kbps |
500 m |
远距离传感器网络 |
|
50 kbps |
1 km |
楼宇自动化 |
二、位时序与波特率(Bit Timing)核心参数
|
参数 |
符号 |
典型值 / 说明 |
工程师关注点 |
|---|---|---|---|
|
时间量子 |
tq |
(Prescaler) / fPCLK |
计算的基础 |
|
同步段 |
SYNC |
1 tq |
固定不变 |
|
传播段 |
PROP / BS1 |
通常 1~8 tq |
补偿物理延迟 |
|
相位段 1 |
PHASE1 / BS1 |
通常 1~8 tq |
采样点前 |
|
相位段 2 |
PHASE2 / BS2 |
通常 1~4 tq |
采样点后 |
|
同步跳转宽 |
SJW |
≥ 1 tq |
重新同步能力 |
|
采样点位置 |
Sample Point |
75% ~ 87.5% |
决定通讯稳定性 |
采样点速查(经典 CAN,500kbps)
|
场景 |
采样点 |
BS1 |
BS2 |
备注 |
|---|---|---|---|---|
|
短距离 |
80% |
8 |
2 |
常用配置 |
|
长距离 |
85% |
11 |
4 |
抗干扰更强 |
|
极端距离 |
87.5% |
14 |
2 |
需极低波特率 |
三、协议层与错误处理(Protocol & Error Handling)
|
参数 |
说明 |
建议 |
|---|---|---|
|
错误计数器 |
TEC (发送)、REC (接收) |
调试必看 |
|
节点状态 |
Active → Passive → Bus Off |
量产需自动恢复 |
|
FIFO 深度 |
通常 3 级 |
中断必须快 |
|
过滤器模式 |
Mask (掩码) / List (列表) |
量产推荐 Mask |
|
ACK 位 |
隐性表示无节点应答 |
查终端电阻/ID |
节点状态机速查
|
状态 |
TEC/REC 阈值 |
行为 |
|---|---|---|
|
Error Active |
< 96 |
正常发送错误帧 |
|
Error Passive |
≥ 96 |
只能被动接收,不发错误帧 |
|
Bus Off |
TEC > 255 |
节点自我隔离,停止发送 |
四、CAN FD 专用参数(进阶)
|
参数 |
经典 CAN |
CAN FD |
注意点 |
|---|---|---|---|
|
仲裁场波特率 |
125k~1M |
125k~1M |
通常不变 |
|
数据场波特率 |
- |
1M~8M |
需专用收发器 |
|
采样点 |
75%~87.5% |
75%~80% |
要求更严 |
|
收发器 |
TJA1050 |
TJA1044 / TCAN1044 |
必须更换 |
五、一分钟调试 Checklist
-
[ ] 示波器看 CANH/CANL 是否有振铃?
-
[ ] 120Ω 电阻是否只加在物理两端?
-
[ ] 波特率采样点是否在 75%~87.5%?
-
[ ] 是否开启了 ERROR 中断?
-
[ ] FIFO 溢出是否有计数?
-
[ ] 过滤器是否配置正确(没把 ID 过滤掉)?
-
[ ] Bus Off 后是否有自动恢复机制?
六、写在最后(关注我,少走弯路)
我是 gqqsherry,一个拒绝调包、专注底层逻辑的嵌入式工程师。
CAN 总线是“差之毫厘,谬以千里”的典型代表,物理层的一个电阻、协议层的一个参数,都可能导致整个网络瘫痪。
关注我的专栏《嵌入式底层避坑指南》,这里没有枯燥的 API 搬运,只有真实的硬件调试现场和可落地的工程代码。
👉 新系列预告:《USB 底层避坑指南》—— 从枚举失败到描述符地狱,我们下篇见。
References
-
ISO 11898-2:2016 – Controller area network (CAN)
-
STM32 Reference Manual – bxCAN peripheral
-
TI Application Reports – CAN Bus Termination and Bit Timing
如果你在调试 CAN 时有过“查了三天发现是电阻忘了焊”的经历,欢迎在评论区交流。
原创文章,转载请注明出处。
更多推荐



所有评论(0)