81、CAN总线基础回顾:从诞生到经典架构
CAN总线基础回顾:从诞生到经典架构
去年冬天,我在调试一台农用机械的ECU通信时,遇到一个诡异现象:发动机转速数据偶尔跳变到65535,仪表盘直接显示“—”。用示波器抓波形,CAN_H和CAN_L的差分信号在总线空闲时居然有0.3V的直流偏置。排查了三天,最后发现是终端电阻焊盘虚焊,导致信号反射叠加。这个坑让我重新翻出了BOSCH公司1986年发布的CAN 2.0规范——二十多年前的协议,至今还在用,但很多人连它的物理层基础都没吃透。
从汽车线束的噩梦说起
80年代初,汽车电子化刚起步,一辆车里的ECU(电子控制单元)还不到10个。到了1985年,奔驰W126已经塞进了超过30个ECU,每个ECU之间用独立的点对点铜线连接。你想象一下:发动机控制模块要跟变速箱、ABS、仪表盘、空调各拉一根线,整车的线束总长度超过2公里,重量接近50公斤。更可怕的是,每增加一个功能,就得重新走线,维修手册厚得像本字典。
BOSCH的工程师们当时在实验室里反复测试:能不能用一对双绞线,让所有ECU共享同一个通信通道?他们参考了当时已有的串行总线协议(比如RS-485),但发现汽车环境太恶劣——发动机舱温度能到125℃,电磁干扰能把收音机变成噪音源。于是,CAN(Controller Area Network)在1986年正式诞生,核心设计目标只有三个:实时性、可靠性、低成本。
物理层:差分信号为什么能抗干扰
CAN总线的物理层用一对双绞线(CAN_H和CAN_L),传输的是差分电压信号。这里有个关键点:总线状态只有两种——显性(Dom
