目录
1 CAN总线简介
2 CAN总线物理结构
2.1 CAN总线原理
2.2 CAN总线和I2C
3 CAN的电气属性
4 CAN帧的种类
4.1 CAN帧的种类
4.2 数据帧
4.3 遥控帧
1 CAN总线简介
1.1 CAN是什么?
CAN总线,全称为Controller Area Network,即控制器局域网,CAN 总线最初是由德国电气商博世公司开发,其最初动机就是为了解决现代汽车中庞大的电子控制系统之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。
1.2 CAN总线特点
-
多主方式:可以多主方式工作,网络上任意一个节点均可以在任意时刻主动地向网络上的其他节点发送信息,而不分主从,通信方式灵活。
-
系统柔软性:由于CAN总线的设计允许节点自主决定何时发送数据,这使得系统能够灵活地适应不同的通信需求和条件。
-
速度快,距离远:CAN总线支持较高的数据传输速率,并且可以在较长的距离上稳定传输数据,这得益于其高效的通信协议和抗干扰能力。
-
具有错误检测、错误通知和错误恢复功能:CAN总线使用循环冗余校验(CRC)等机制来检测数据在传输过程中是否出现错误。当检测到错误时,节点会发送错误帧,以通知网络上的其他节点。在检测到错误后,系统可以采取相应的措施,如重传数据,以确保数据的正确传输。
-
故障封闭功能:CAN总线能够将故障节点隔离,防止故障扩散到整个网络,从而保证系统的稳定性。
-
连接节点多:CAN总线理论上可以支持多达110个节点,这使得它非常适合大规模的网络通信。
2 CAN总线物理结构
2.1 CAN总线原理
CAN 控制器根据两根线(CAN_H、CAN_L)上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。显性电平为逻辑 0,隐性电平为逻辑 1。发送方通过使总线电平发生变化,将消息发送给接收方。
1)CAN总线硬件电路一般包括
- 微控制器(如51单片机):负责处理数据和控制通信。
- CAN控制器(如SJA1000):负责CAN协议的实现和数据帧的生成。
- CAN收发器(如PCA82C250):将CAN控制器的数字信号转换为适合在CAN总线上传输的电信号。
2)一些现代微控制器,如STM32系列,已经将CAN控制器集成到芯片内部,因此只需要外加一个CAN收发器,如SN65HVD230,来完成信号的转换。
3)CAN总线由两条线组成:CAN_H(高电平)和CAN_L(低电平),它们通过差分信号传输数据,以提高抗干扰能力,通常使用带屏蔽的双绞线来减少电磁干扰。
2.2 CAN总线和I2C
CAN总线和I2C(Inter-Integrated Circuit)总线都是用于设备间通信的串行通信总线协议,但两者有以下不同点:
- 用途不同:CAN总线通常用于工业控制、汽车网络等高可靠性应用,而I2C通常用于低速控制和数据传输。
- 速率不同:CAN总线速率可以高达1 Mbps,而I2C总线通常在400 Kbps以下。
- 线路不同:CAN总线使用双绞线,I2C总线则可以使用双线、三线和四线架构,其中最常见的是双线架构。
- 地址机制不同:CAN总线使用11位或29位标准帧标识符来识别设备,而I2C总线使用7位或10位设备地址来寻址。
- 工作方式不同:CAN总线是多主机环境下的异步通信协议,而I2C总线通常在单主机环境下的同步通信协议。
总的来说,虽然CAN总线和I2C总线都是串行通信协议,但它们的应用场景和特点有所不同。
3 CAN的电气属性
CAN总线的电平信号是差分信号,它使用两条线(CAN_H和CAN_L)来传输数据。差分信号的一个主要优点是它对外部电磁干扰具有较好的抗干扰能力。
- 如果CAN控制器发送逻辑1时,CAN收发器使CAN_H和CAN_L都为2.5V,这时,两条线上的电压差为0V。总线上称为隐性电平。
- 如果CAN控制器发送逻辑0时,CAN收发器使CAN_H为3.5V,CAN_L为1.5V,这时,两条线上的电压差为2V。总线上称为显性电平。
- 多个节点同时开始发送时,会涉及到总线仲裁。
4 CAN帧的种类
4.1 CAN帧的种类
CAN(Controller Area Network)协议定义了几种不同类型的数据帧,以下是CAN帧的基本种类:
数据帧 | 用于发送单元向接收单元传送数据的帧。 |
遥控帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧。 |
错误帧 | 当CAN节点检测到错误时发送,用于通知网络上的其他节点存在错误。(硬件自动完成) |
过载帧 | 当CAN节点无法在当前的波特率下处理接收到的数据时发送。(硬件自动完成) |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开来的帧(硬件自动完成) |
帧的种类有很多,其中错误帧、过载帧、帧间隔都是由硬件完成的,没有办法用软件来控制。对于一般使用者来说,只需要掌握数据帧与遥控帧。
4.2 数据帧
数据帧由7个段组成,分别为:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。
- 帧起始 :表示数据帧开始的段。
- 仲裁段:表示该帧优先级的段。
- 控制段:表示数据的字节数及保留位的段。
- 数据段:表示数据的内容的段,可发送 0~8 个字节的数据。
- CRC 段:检查帧的传输错误的段。
- ACK 段:表示确认正常接收的段。
- 帧结束:表示数据帧结束的段。
数据帧的发送过程:
- 当总线空闲时,发送节点开始发送帧起始位。
- 接着发送仲裁段和控制段。
- 如果DLC不为零,则发送数据段。
- 然后发送CRC段,用于错误检测。
- 如果接收节点正确接收了帧,它会在ACK段将ACK槽置为显性,表示确认。
- 最后,发送节点发送帧结束位,完成数据帧的发送。
仲裁段
仲裁段分为标准格式(11位)以及扩展格式(29位)。
- ID位,标准格式的标识符长度的是11位,扩展格式的标识符长度的是29位,仲裁段中的ID号用于标识帧的唯一性并决定其在总线上的优先级。ID号越小,帧的优先级越高,
- RTR位,用于表明此帧是数据帧还是远程帧。
- IDE位,用于表明此帧是标准帧还是扩展帧。
- ID位,扩展格式的标识符长度加起来是29位;
- RTR位,用于表明此帧是数 据帧还是远程帧。
控制段
紧跟在仲裁段之后,为CAN网络中的节点提供关于即将传输数据的重要信息。以下是控制段的详细说明:
- DLC(数据长度代码):控制段中的DLC字段是一个4位的字段,用于指示数据段中字节的数量。
- RTR(远程传输请求位):在数据帧中,RTR位是显性的(逻辑"0"),表示这是一个包含实际数据的帧。而在遥控帧中,RTR位是隐性的(逻辑"1"),表示这是一个请求数据的帧。
- IDE(标识符扩展位):仅在扩展格式的帧中存在,用于指示接下来的仲裁段是标准格式(11位ID)还是扩展格式(29位ID)。
4.3 遥控帧
CAN总线的遥控帧(Remote Frame),实际上是一种请求数据的帧。当一个节点需要从另一个节点请求数据时,它会发送一个遥控帧,这个帧只包含仲裁段和控制段,不包含数据段。
遥控帧组成
发送节点通过发送遥控帧来请求具有特定ID的数据。当接收节点识别到与其ID匹配的遥控帧时,它会响应并发送一个数据帧,其中包含请求的数据。这种方式的好处是,只需要一帧的时间就能完成一次双向交互,提高了通信的效率 。遥控帧组成如下:
- 帧起始(SOF):表示帧开始的段。
- 仲裁段:包含标识符(ID)和远程发送请求位(RTR),RTR位为隐性(1),表明这是一个遥控帧。
- 控制段:包含数据长度代码(DLC),但在遥控帧中,DLC的值通常设置为0,因为遥控帧不包含数据段。
- CRC段:用于检查帧传输过程中的错误。
- ACK段:用于确认帧已被正常接收。
- 帧结束:表示遥控帧结束的段。
数据帧与遥控帧的区别:
- 数据帧和遥控帧在格式上非常相似,但遥控帧缺少数据段。
- 数据帧的RTR位为显性(0),表示传输的是数据;而遥控帧的RTR位为隐性(1),表示传输的是请求 5。
遥控帧的应用场景:
- 遥控帧在需要周期性地从某个节点获取数据时非常有用,例如在汽车或工业自动化系统中,中控机可能需要定时获取传感器的实时数据。