CAN是什么?
CAN 是 Controller Area Network 的缩写,中文是控制器局域网路,是 ISO 国际标准化的串行通信协议之一。
CAN: 控制器局域网( Controller Area Network)属于现场总线的范畴,是一种有效支持分布式控制系统的串行通信网络
CAN是由德国博世公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视,被广泛应用于汽车业、航空业、工业控制、安全防护等领域。随着CAN总线在各个行业和领域的广泛应用,对其的通信格式标准化也提出了更严格的要求。1991年CAN总线技术规范(Version2.0)制定并发布。该技术规范共包括A和B两个部分。其中2.0A给出了CAN报文标准格式,而2.0B给出了标准的和扩展的两种格式。CAN总线协议是一种ISO 国际标准化的串行通信协议,有ISO-11898 和 ISO-11519两个系列。
其定义有:
ISO-11898 定义了通信速率为 125 Kbps ~1Mbps 的高速 CAN 通信标准,属于闭环总线,传输速率可达1Mbps,总线长度 ≤ 40米,如图1。
ISO11519 定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环总线,传输速率为40kbps时,总线长度可达1000米,如图2。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。图 3 是车载网络的构想示意图。CAN 通信协议的开发,使多种 LAN 通过网关进行数据交换得以实现。
Controller是什么?
通常意义上指控制器,多个控制器之间进行通信,可以通过CAN线使其进行连接
典型用例:
CAN线如何连接呢
两根线:
CAN_H线
CAN_L线
CAN的两种电平
总线上的电平有显性电平和隐性电平两种。总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐 性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比 隐性电平更强)
显性电平:逻辑0:CAN_H 和 CAN_L 的电压一个3.5V一个1.5V 电位差是2V
隐形电平:逻辑1:CAN_H 和 CAN_L 的电压都是是2.5V 电位差是0V
CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。ISO11898 和 ISO11519-2 标准对于数据 链路层的定义相同,但物理层不同。
- ISO11898 是通信速度为 125kbps-1Mbps 的 CAN 高速通信标准。目前,ISO11898 追加新规约后,成为 ISO11898-1 新标准。
- ISO11519 是通信速度为 125kbps 以下的 CAN 低速通信标准
- ISO11898和ISO11519的主要不同点
下图是描述的就是压差为2V的逻辑0,跟压差为0V的逻辑1
单片机如何进行CAN通信
串行电平转换成差分电平
为什么要用差分线呢
主要是下面两个原因
- 抗干扰性:双绞线可以有效地减少电磁干扰的影响。CAN总线常常被应用于工业环境和汽车领域,这些环境中存在大量的电磁干扰源,如电机、继电器等。双绞线通过将两根导线紧密地绞合在一起,可以减少对外部电磁干扰的敏感性,从而提高通信的可靠性。
- 抗噪声性:双绞线还可以降低信号传输中的串扰噪声。当信号通过一根导线传输时,周围的导线可能会产生电磁场,从而对信号产生干扰。双绞线中的两根导线通过彼此绞合,可以减小这种串扰噪声的影响,提高信号的完整性和准确性。
这也就是CAN通信比串口通信传输更远的原因可以达到1000米。
CAN的协议桢
CAN(Controller Area Network)协议定义了几种不同类型的数据帧,用于在CAN总线上进行通信。以下是CAN协议中常见的几种数据帧及其作用:
- 数据帧(Data Frame):数据帧是CAN协议中最常用的帧类型。它用于在CAN总线上传输数据信息。数据帧包括数据域(Data Field),用于携带有效数据,以及标识符(Identifier),用于标识消息的发送者和接收者。
- 远程帧(Remote Frame):远程帧用于请求特定CAN节点发送数据。发送远程帧的节点向目标节点发送一个标识符,目标节点接收到远程帧后,会以数据帧的形式返回请求的数据。远程帧在需要获取其他节点数据时非常有用。有时候也叫遥控桢
- 错误帧(Error Frame):错误帧用于在CAN总线上报告错误情况。当节点检测到总线上的错误时,它可以发送错误帧来通知其他节点发生了错误。错误帧中包含有关错误类型和错误位置的信息,用于诊断和故障排除。
- 过载帧(Overload Frame):过载帧用于指示CAN节点附近存在过载条件。当节点无法及时处理接收到的消息时,它可以发送过载帧来通知其他节点,以便调整通信负载或采取其他措施。
- 错误被动帧(Error Passive Frame):错误被动帧用于指示发送节点处于错误被动状态。当节点连续发送错误帧数量达到一定阈值时,它会进入错误被动状态,此时会发送错误被动帧来通知其他节点。
- 帧间隔 :在CAN(Controller Area Network)通信中,帧间隔(Frame Interval)指的是两个连续CAN数据帧之间的时间间隔。帧间隔包括发送帧的间隔和接收帧的间隔
这些数据帧类型在CAN总线上的使用有助于实现可靠的通信和故障诊断。数据帧用于传输实际的数据信息,远程帧用于请求数据,错误帧用于报告错误情况,过载帧用于指示过载条件,而错误被动帧用于指示节点处于错误被动状态。通过这些数据帧,CAN协议能够提供高效、可靠的通信机制,并支持诊断和故障处理。
另外,数据帧和遥控帧有标准格式和扩展格式两种格式,
标准格式有 11 个位的标识符(Identifier: 以下称 ID),
扩展格式有 29 个位的 ID;
标准的一串数据帧是什么样的
标准帧(Standard Frame)是CAN(Controller Area Network)协议中常用的一种数据帧格式,用于在CAN总线上传输数据。以下是标准帧的格式及其各个字段的解释:
- 帧起始位(Start of Frame,SOF):一个固定为低电平的位,用于指示帧的开始。
- 标识符(Identifier):标识符用于唯一地标识发送的消息。它通常是11位长,但在CAN 2.0A协议中,标识符可以是11位或29位长。标识符中的位定义了消息的优先级、发送节点和接收节点等信息。
- 远程传输请求位(Remote Transmission Request,RTR):该位用于指示消息是否是远程帧。如果该位为1,则表示发送节点请求接收节点发送数据;如果该位为0,则表示消息是数据帧。
- 数据长度码(Data Length Code,DLC):DLC字段指定了数据域中所包含的字节数。它可以是0到8之间的值,表示数据域的长度。
- 数据域(Data Field):数据域是用于携带有效数据的部分。它的长度由DLC字段确定,可以包含0到8个字节的数据。
- CRC(Cyclic Redundancy Check):CRC字段用于检测数据帧中的错误。它是通过对标识符、RTR、DLC和数据域进行计算得出的校验值。
- CRC分隔位(CRC Delimiter):一个固定为1的位,用于分隔CRC字段和确认槽位。
- 确认槽位(Acknowledge Slot):确认槽位用于接收节点发送一个确认位(ACK)来指示数据的接收情况。如果接收节点成功接收到数据,则发送一个高电平ACK;如果接收节点检测到错误,则发送低电平ACK错误。
- 结束帧位(End of Frame,EOF):一个固定为高电平的位,用于指示帧的结束。
以上是标准帧的基本格式。CAN总线上的节点根据这个格式来发送和接收数据。标准帧通过使用固定长度的标识符和较短的数据域,提供了一种简单、高效的通信方式,适用于许多应用领域,如汽车、工业控制等。