最近在整理总线的基本知识,前几天对LIN总线进行了整理—>LIN总线。今天来整理一下CAN总线,首先回顾一下之前写过的CAN相关的文章。
- CAN总线错误处理机制
- 基于CAN的刷写流程
- CAN消息中的Motorola和Intel
- CAN一致性测试是什么
CAN历史
1983年,BOSCH开始着手开发CAN总线;
1986年,在SAE会议上,CAN总线正式发布;
1987年,Intel和Philips推出第一款CAN控制器芯片;
1991年,奔驰 500E 是世界上第一款基于CAN总线系统的量产车型;
1991年,Bosch发布CAN 2.0标准,分 CAN 2.0A (11位标识符)和 CAN 2.0B (29位标识符);
1993年,ISO发布CAN总线标准(ISO 11898),随后该标准主要有三部分:
ISO 11898-1:数据链路层协议
ISO 11898-2:高速CAN总线物理层协议
ISO 11898-3:低速CAN总线物理层协议
注意:ISO 11898-2和ISO 11898-3物理层协议不属于 BOSCH CAN 2.0标准。
2012年,BOSCH发布 CAN FD 1.0 标准(CAN with Flexible Data-Rate),CAN FD定义了在仲裁后使用不同的数据帧结构,从而达到最高 12Mbps 数据传输速率。CAN FD与CAN 2.0协议兼容,可以与传统的CAN 2.0设备共存于同样的网络。
CAN总线特点
CAN总线是一种串行数据通讯协议,具有对数据的位填充,数据块编码,循环冗余校验,帧优先级的判别等功能。其主要特点如下:
1、多主控制:在总线空闲时,所有节点都可以发送消息,最先访问总线的节点获得发送权,或当同时发时,高优先级ID获得发送权;
2、系统的柔软性:在CAN局域网内,增加节点不影响局域网内其他节点;
3、远程数据请求:可通过发送“遥控帧”请求其他节点发送数据;
4、错误检测功能、错误通知功能、错误恢复功能 ,CAN错误可以回顾CAN总线错误处理机制,对CAN故障及恢复有详细的讲解。
5、远程数据请求:可通过发送“遥控帧”请求局域网内其他节点发送数据。
总线拓扑
CAN总线采用双线传输,两根导线分别作为CAN_H、CAN_L,并在终端配备有120Ω电阻。收到总线信号时,CAN收发器将信号电平转化为逻辑状态,即CAN_H与CAN_L电平相减后,得到一个插值电平。总线上执行逻辑上的线“与”,显性电平为“0”,隐性电平为“1”。物理层特征如下图所示。
![f772939c9b69ab28f7d048e8dca62fdb.png](https://i-blog.csdnimg.cn/blog_migrate/ef0d65031a1f6dfe6ba1f27256e4e30c.jpeg)
CAN帧的种类CAN帧总共分为5种类型:1、数据帧:用于发送节点向接收单元发送数据;
![ca831f648e700e5e911153754f47c18f.png](https://i-blog.csdnimg.cn/blog_migrate/8aa1b2501cc518711772685c24aaee75.jpeg)
2、遥控帧:用于接收节点向具有相同ID的发送节点请求数据;
![c05c1f3e19051f1ae75b3474e76c3d48.png](https://i-blog.csdnimg.cn/blog_migrate/af33a2f5916ace2c2ba5f8303db11091.jpeg)
3、错误帧:用于当检测到错误时向其他节点通知错误;
![fb7858aed91d5d039f6020e5dec3c5bb.png](https://i-blog.csdnimg.cn/blog_migrate/80769098fd96040339f4bc831245fbcb.png)
4、过载帧:用于接收节点通知其尚未做好接收准备;
![c04a27e92dbf03b5b3b20d7fae76412d.png](https://i-blog.csdnimg.cn/blog_migrate/bd7932c81b65f63b054eaa54ecb19db7.png)
5、帧间隔:用于将数据帧及遥控帧与前面的帧分离开;
![718e0454cd9ce13dc2bc86e943fe6208.png](https://i-blog.csdnimg.cn/blog_migrate/83df4e79d7fc8df5789299a66d6b0f52.png)
数据帧的帧结构数据帧构成如下图所示,其由7部分构成。
![c15cdef6826b0a6ae36f64586379888e.png](https://i-blog.csdnimg.cn/blog_migrate/e32c3ed602fe08af4d6d32fe6bdb003c.jpeg)
1、帧起始
在总线空闲时,总线为隐性状态。帧起始由单个显性位构成,标志着报文的开始,并在总线上起着同步作用。
![34f9de3b7d717d99ed6daf06cb2ce899.png](https://i-blog.csdnimg.cn/blog_migrate/8aaf1e2ae889e08ce2ea62cbbab90148.png)
2、仲裁段
仲裁的主要是定义了报文的标识符,也俗称ID。在CAN2.0A规范中,标识符为11位,而在CAN2.0B中变为了29位。这意味着在2.0B中可以存在更多不同类型的报文,但是也降低了总线的利用率。
![1697412f8298d7c3a1a22e3342deaa00.png](https://i-blog.csdnimg.cn/blog_migrate/7a399db36819b1f09202f930b4396680.png)
3、控制段
主要定义了数据域字节的长度。通过数据长度码,接收节点可以判断报文数据是否完整。
![f24a0a36db415cc099d9193fca03dde5.png](https://i-blog.csdnimg.cn/blog_migrate/5f774892b0d7b52ad55128b656eff88d.png)
4、数据域
包含有0~8个字节数据。
![4b3effdee0cb87bb1cd1fb45626426fb.png](https://i-blog.csdnimg.cn/blog_migrate/601d1825c3749079e169e04bf3aa4b62.png)
5、CRC域
CRC又称循环冗余码校验,是检查帧传输错误的帧。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符组成,其CRC的计算范围包括帧起始、仲裁段、控制段、数据段。
![63d2ee4be35d2378d056bdd3370f2984.png](https://i-blog.csdnimg.cn/blog_migrate/e72ae13d3ef4ec2d04f2a6e18a588533.png)
6、ACK域
用于接收节点确认是否正常接收,由ACK槽和ACK界定符组成。
![15ff4fc79241203f188d6d3586cb1dbf.png](https://i-blog.csdnimg.cn/blog_migrate/91a84aafebb7d46c38ffcdbce7340926.png)
7、帧结束
由连续的7个隐性位组成,表示报文帧的结束。
![8b53ccce2ba6113a48c1b9379a5fb9e4.png](https://i-blog.csdnimg.cn/blog_migrate/a9b946c89d5bf34309133d22818ee4ff.png)