一、控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线、同轴电缆或光纤来传输信号,因其高性能、高可靠性和高实时性等特点,已经成为了世界上应用最广泛的现场总线之一。公元1991年,CAN总线技术规范(CAN Version2.0)制定并发布,该技术规范共包括A和B两部分,称为CAN2.0A和CAN2.0B。其中CAN2.0A给出了CAN报文的标准格式,CAN2.0B给出了标准格式和扩展格式两种。CAN总线最高传输速率可达1Mbps(通信距离最长40m),如果降低传输速率,其直接通信的最远距离可达10km(速率5Kbps以下),其总线上的节点数可达110个。
二、CAN总线工作原理:
1. CAN总线没有主从节点之分,所有CAN总线上的节点都是地位等价的。当CAN总线上的一个节点发送数据时,它以报文的形式广播给网络中的而所有节点;这样对于每个节点来说,无论数据是否发给自己,都对其进行接收。
2. CAN总线每组报文开头的11位字符为标识符,定义了报文的优先级;在同一个总线中,标识符是唯一的,不可能有两个节点发送具有相同标识符的报文。当然接收节点也会根据标识符来判断是否接收这帧信息,一般称这项技术为报文滤波技术。
3. CAN总线接收节点可以通过远程数据请求发送远程帧请求发送节点发送相应的数据,回应节点传送的数据帧与请求数据的远程帧具有相同的标识符。
4. CAN总线的优先权由发送数据报文中的标识符决定报文占用总线的优先权;标识符越小,优先权越高。
5. CAN总线的仲裁机制:只要总线空闲,任何节点都可以向总线发送报文。如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。通过使用标识符逐位仲裁可以解决这个碰撞问题。而且当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。
6. 目前CAN总线通信协议仅仅包括OSI七层互联参考模型中的数据链路层和物理层。
三、CAN总线物理层:
1. CAN总线物理层主要采用两个差分传输信号线组成CAN总线网络,分别为CANH和CANL,所有CAN总线上的节点都可以连接到这两条差分信号传输网络上进行通信。下图是CAN总线物理层的互联模型,其中每个ECU可以视为每个CAN节点。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/353a9fd8-4d35-46d7-8dd9-652915072a54202206288a9ae452-579e-4fa1-9ae9-c1204f4f04281.jpg)
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/wp-content/uploads/2020/11/2020110816061913.jpg)
2. CAN节点一般由两部分组成:CAN收发器、CAN控制器。
CAN收发器负责将CAN控制器的TTL或CMOS的电平信号转换为CAN差分模拟电平信号进行数据传输;也将CAN的差分模拟电平信号转换为TTL/CMOS的电平信号送到CAN控制器,以实现完整的双向通信。
CAN控制器负责解析来自CAN收发器送来的数据,也将用户的数据传送到CAN收发器并发送出去;CAN控制器一般具备数据帧的解析与解码,数据屏蔽与滤波,数据帧的打包与封装等功能,是与用户交互的端口。
下图是一般的CAN节点的构造电路图。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/272b0dfb-79d0-4b0e-9170-a814fecec293202206289c751186-bc8a-45e9-8e26-b776a0e997d71.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
3. CAN总线物理层标准:CAN协议经过ISO标准化后有ISO11898标准(高速CAN)和ISO11519-2标准(低速CAN)两种,这两种标准的数据链路层是一样的,但是物理层不同。下图是两种标准的差异对比图。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/6931d26c-0bea-4abf-8891-b20d8a16fc002022062851d9176b-f3e4-46e4-b43b-ee65247e3c931.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
高速CAN物理层协议应用最为广泛,而低速CAN物理层协议一般应用于可靠性要求较高的场合,这里不做详细介绍。
4. CAN总线显性与隐性:CAN2.0规范定义了两种互补的逻辑数值:显性和隐性。同时传送显性和隐性位时,总线呈现显性状态;同时传送显性状态位时,总线呈现显性状态;同时传送隐性状态位时,总线呈现隐性状态。显性数值表示逻辑0,隐性数值表示逻辑1。
如下图所示,CAN总线为隐性(逻辑1)时,CANH和CANL电平都为2.5V(电位差为0);CAN总线为显性(逻辑0)时,CANH和CANL电平分别为3.5V和1.5V(电位差为2V)。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/29346633-1dee-4235-aea6-93a5f0fa889c20220628f371abea-5d6e-48fa-8d44-91dd8a4f9a9c1.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
四、CAN总线数据链路层:
1.下图是CAN标准数据帧:用于发送节点向接收节点传送数据的帧。当接收节点接收到帧起始到CRC字段的数据都没有错误时,接收节点将在确认间隙位发送一个显性电平(ACK),此时总线电平为发送节点的隐性和接收节点的显性线与为显性电平,表明数据传输无误,没有错误发生。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/9aba421b-dcb1-45aa-9322-0489c8502c8b20220628cda9a6b9-48d2-406b-842d-877dff691fc31.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
2.下图是CAN扩展数据帧:用于发送节点向接收节点传送数据的帧。当接收节点接收到帧起始到CRC字段的数据都没有错误时,接收节点将在确认间隙位发送一个显性电平(ACK),此时总线电平为发送节点的隐性和接收节点的显性线与为显性电平,表明数据传输无误,没有错误发生。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/9b731ca5-17bb-44bf-987f-9063f03ba6c920220628ad9600d9-727b-4030-b1ad-959146f4baee1.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
3. 下图是CAN远程帧:用于接收节点向具有相同ID的发送节点请求数据的帧。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/afc76bcd-e209-48be-832b-b4129a20fd8320220628c7803183-98ed-4fe3-ba2d-573a12f122311.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
4. 下图是CAN主动错误帧:用于发送节点或接收节点检测出错时向其他节点通知错误的帧。CAN总线一般存在五种错误:CRC错误、格式错误、应答错误、位发送错误、位填充错误。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/76df9f31-80d6-4ae1-857f-ffe4fe7b596120220628cd421d65-7b5c-46c8-9f11-0c35e42c0ed61.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
5. 下图是CAN过载帧:用于接收节点通知发送节点其尚未做好接收准备的帧。由于存在多个节点同时过载且过载帧发送有时间差的问题,可能出现过载标志叠加后超过6个位的现象。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/51dce96e-2152-4f70-8863-cb1a4e8b34422022062860b6dcc1-9a2c-43e4-85ab-9d36cac0005d1.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
五、CAN总线延时分析:
1. CAN总线的数据传输总会有一定的延时,例如:隔离器件延时、CAN控制器延时、CAN收发器延时、传输线延时等。下图是CAN总线传输过程的延时示意图。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/9057f079-b6e0-44aa-a670-70ad7dff6e4320220628a6d73acc-0756-4de7-94b7-0bc7f4933d541.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
如图可知,以发送节点发送数据,到接收节点接收数据后发送ACK应答信号,再到发送节点成功接收到ACK应答信号为止。这一整个数据通信过程的延时为:![]()
。由此可见,CAN总线的通信距离和通信速率是和CAN总线数据通信的传输延时密切相关的。
2. CAN总线的位定时与采样点:以1Mbps的传输速率为例,则速率的周期为1000ns,即CAN总线每传输一位数据需要1000ns的时间周期。但是CAN总线数据传输有一定的延时,因此必须合理考虑每一位数据的采样点位置,以满足延时的要求。下图是CAN总线网络通信的位定时与采样示意图,其中位时间为1000ns。
![CAN总线传输协议[通俗易懂]](http://javaforall.cn/synimg/9aeb9ded-565e-4174-b050-a89cc91e749720220628a6c41256-cf92-49c8-848e-60e0c23230d51.jpg)
![CAN总线传输协议[通俗易懂]](http://www.javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
如图所示,CAN总线中每一位数据由四部分构成:同步段、传播段、相位缓冲段1、相位缓冲段2。
同步段:用于总线各个节点之间的同步。
传播段:用于补偿信号的物理传播延时。
相位缓冲段1 && 相位缓冲段2:用于补偿信号沿的相位误差,以便更精确地进行采样。可以联想到建立时间和保持时间,是不是很熟悉有没有?熟悉就好,不说了。

