摘要: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 时有过“查了三天发现是电阻忘了焊”的经历,欢迎在评论区交流。

原创文章,转载请注明出处。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐