汽车CAN总线简述
CAN 是控制器局域网Controller Area Network 的缩写,1986年,由德国Bosch公司为汽车开发的网络技术,主要用于汽车的监测与控制,目的为适应汽车“减少线束的数量”“通过多个网络进行大量数据的高速传输”的需求。

CAN发展时间线
- 1983年,Bosch开始研究汽车网络技术
- 1986年,Bosch在SAE大会正式公布CAN协议
- 1987年,Intel和Philips先后推出CAN控制器芯片
- 1991年,Bosch颁布CAN 2.0技术规范,CAN总线最先在Benz S系列轿车上实现
- 1993年,ISO颁布CAN国际标准ISO-11898
- 1994年,由CiA组织举办第一届国际CAN大会(iCC)
- 2005年,CiA在中国的第一场CAN研讨会
- 2013年,虹科与CiA正式深入合作致力CAN推广
- 2015年,CAN FD的 ISO标准化
- 2020年,CAN XL即将登场第十七届iCC大会
汽车网络是将汽车上所有电子传感器、执行器和电子控制单元(ECU)连接组网的通信形式。根据通信速率,汽车工程师协会(SAE)定义了如下类别的汽车网络。

当前的车用总线:
- CAN(CANFD)
- LIN
- MOST
- FlexRay
- 车载以太网

通常汽车CAN网络细分
- 动力CAN网络
- 车身CAN网络
- 组合仪表CAN网络
- 诊断CAN网络
- …

汽车网络典型应用
GLOF整车CAN网络拓扑


CAN总线在汽车网络中脱颖而出的“秘密”
曾经的车用总线
- SAE J1850(Class2)
- SAE J1708
- K-Line
- BEAN
- Byte flight
- D2B…
CAN通信特性的“公开秘密”
- 节点间采用多主通信方式
- 采用短帧结构,报文帧的有效字节数为8个,可达汽车实时响应要求
- 报文ID值越小,优先级越高。报文ID可分成不同的优先级,进一步满足汽车网络报文的实时性要求。
- 非破坏性总线仲裁处理机制。
- 可靠的CRC校验方式,传输数据出错率极低,满足汽车数据传输的可靠性要求。
- 报文帧仲裁失败或传输期间被破坏有自动重发(机制)。
- 节点在错误严重的情况下,具有自动脱离总线的功能,切断它与总线的联系,不影响总线的正常工作。
- 通信距离最远达10km(速率5Kbps以下)
- 通信速率最高1MB/s(此时距离最长40m)
- 节点数实际可达110个
- CAN节点设计成本较低,通信介质采用双绞线
OSI模型与CAN的关系

CAN收发器
定义:CAN收发器逻辑信号和物理信号之间的转换采用差分电平方式
- 将逻辑数字信号转换成物理信号
- 将物理信号转换成逻辑数字信号



CAN信号电平
CAN总线有ISO11898和ISO11519(低速容错CAN)两个标准



CAN编码方式 -> NRZ(非归零)
CAN编码采用NRZ非归零编码,相同带宽情况下,NRZ编码方式的信息量更大。

CAN信号电平 -> 双绞线
问题:为什么要采用两根线(双绞线)的差分电平信号?
原因:双绞线传输差分信号时受到共模信号干扰后,电平差值不变,信号解码正常。


CAN信号电平 -> 线与原理
多个CAN节点并接到同一总线时,只要其中一个节点输出低电平,总线就为低电平;当所有节点输出高电平时,总线才为高电平。

CAN -> 异步串行通信
同步串行通信

异步串行通信

异步串行通信省去了时钟信号线,但遇到一个问题是:根据波特率做采样,波特率的误差会产生通信错误!
CAN -> 波特率误差带来的错误

问题:如何减少波特率的误差带来的通信错误?
解决:CAN总线规定信号的跳变沿时刻进行同步,将误差累计限制在两个跳变沿。