CAN协议

1.CAN简介

CAN协议,全称为Controller Area Network(控制器局域网络),是一种广泛应用的串行通信协议,最初由德国BOSCH公司开发,并已成为国际标准。

低速CAN(ISO11519)通信速率 10~125Kbps,总线长度可达 1000 米。

高速CAN(ISO11898)通信速率 125Kbps~1Mbps,总线长度 ≤40 米。

  • 定义:CAN协议是一种基于差分信号的异步串行通信协议,采用双绞线作为传输介质,具有高性能、高可靠性和独特的设计特点。

  • 特点

    • 多主控制:支持多主方式,即任何一个节点都可以在总线上发送数据,其他节点根据需要进行接收。当两个以上的节点同时开始发送数据时,会根据标识符(ID)决定优先级。

    • 系统柔软性:与总线相连的单元没有类似于“地址”的信息,因此在总线上增加单元时,连接在总线上的其他单元的软硬件及应用层都不需要改变。

    • 通信速度快、距离远:数据传输速率较高,标准速率为125kbps,扩展速率可达1Mbps,且通信距离远,最远可达10KM(速率低于5Kbps)。

    • 错误检测与恢复:具有错误检测、错误通知和错误恢复功能,能够确保数据传输的可靠性。

    • 故障封闭功能:能够判断出错误的类型,并将引起故障的单元从总线上隔离出去。

CAN协议因其高效、可靠的特点,被广泛应用于多个领域:

  • 汽车领域:用于实现车辆中各个控制单元(ECU)之间的通信,如发动机控制、车身控制、传动系统控 制等。

  • 工业自动化:用于机器人、物流设备、生产线等各种设备之间的通信与控制。

  • 航空航天:用于飞机中的各种子系统之间的数据通信,如飞行控制系统、引擎控制系统、仪表盘、通信系统等。

  • 船舶领域:用于实现船舶各种设备的可靠通信,包括远程控制、安全监测、航程分析、巡回检测等系统。

  • 智能家居:连接各种智能设备,如照明设备、空调系统、安防系统等,实现设备的互联互通。

  • 智能医疗:连接医疗设备,如监护仪、呼吸机等,实现设备间的快速通信。

2. CAN物理层介绍

2.1 总线拓扑图

CAN总线网络的结构有闭环和开环两种形式。

图18-1是闭环结构的CAN总线网络,总线两端各连接一个120Q的电阻,两根信号线形成回路。

这种CAN总线网络由ISO11898标准定义,是高速、短距离的CAN 网络,通信速率为125kbits到1Mbits。

在1Mbits通信速率时,总线最长达40m。

图18-2是开环结构的CAN总线网络,两根信号线独立,各自串联一个2.2kQ的电阻。

这种 CAN总线网路由ISO11519-2标准定义,是低速、远距离的 CAN 网络,通信速率最高为 125kbits.

在 40kbit/s 速率时,总线最长距离可达1000m。

CAN 总线只有两根信号线,即图18-1和图18-2中的CANH和CANL,没有时钟同步信号。所以CAN是一种异步通信方式,与UART的异步通信方式类似,而SPI、I2C是以时钟信号同步的同步通信方式。

CAN总线的两根信线通常采用双绞线,传输的是差分信号,通过两根信号线的电压差CANH-CANL来表示总线电平。以差分信号传输信息具有抗干扰能力强,能有效抑制外部电磁干扰等优点,这也是CAN总线在工业上应用广泛的一个原因。使用差分信号表示总线电平的还有RS485 网络,也是一种常用的工业现场总线。

两根信号线的电压差CANH-CANL表示CAN总线的电平,与传输的逻辑信号1或0对应对应于逻辑1的称为隐性(Recessive)电平,对应于逻辑0的称为显性(Dominant)电平。

对应于逻辑1和逻辑0,开环结构和闭环结构CAN网络的CANH和CANL的电压值不样,隐性电平和显性电平的电压值也不一样。两种网络结构下的 CAN 总线信号典型电压如表18-1所示。

在图18-1或图18-2的CAN总线网络中,CAN总线上的一个终端设备称为一个节点(Node),在CAN网络中,没有主设备和从设备的区别。

一个CAN节点的通常由CAN控制器、CAN收发器和双绞线组成。

  • CAN控制器负责处理数据的收发和协议转换。

  • CAN收发器负责将控制器的数字信号转换为差分信号进行传输,同时也负责将总线上的差分信号转换 为数字信号供控制器处理。

CAN 控制器一般是MCU的片上外设,例如,STM32F407有两个CAN控制器。CAN收发器一般是单独的芯片,并且根据 CAN总线的结构不同,需要使用不同的CAN收发器芯片,例STM32F407开发板上使用的CAN收发器芯片是TJA1040,只能构成闭环网络结构。

2.2 电平标准

CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。

  • 显性电平表示逻辑 0 ,通常 CAN_H 和 CAN_L 有 2V 的压差;

  • 隐性电平表示逻辑 1 ,通常 CAN_H 和 CAN_L 有 0V 的压差。

显性电平在通信中具有优先权,能够覆盖隐性电平,确保数据的正确传输。

隐性电平则作为总线的空闲或监听状态存在,等待有节点发送数据。

红色线:CANH

绿色线:CANL

Vdiff = CANH - CANL

  1. 高速CAN

    1. 由于两个电阻(120Ω),默认情况下是隐性电平 CANH=2.5v , CANL=2.5v , Vdiff = 0

    2. 显性电平 CANH =3.5v , CANL = 1.5v ,Vdiff =2v

  2. 低速CAN

    1. 显性电平:Vdiff=3v

    2. 隐性电平:Vdiff=-1.5v

2.3 CAN控制器与收发器

TJA1050模块

  1. CAN控制器通过串口与收发器通信。

  2. 收发器进行差分信号的转换和发送。

  3. 从电路原理图看出,是闭环高速CAN。

3. CAN协议层介绍

3.0 CAN总线传输的特点(重点看)

CAN总线的数据传输有其自身的特点,主要有以下几点。

  • CAN总线上的节点既可以发送数据又可以接收数据,没有主从之分。但是在同一个时刻,只能有一个节点发送数据,其他节点只能接收数据。

  • CAN总线上的节点没有地址的概念。CAN总线上的数据是以为单位传输的,帧又分为数据帧、遥控帧等多种帧类型,帧包含需要传输的数据或控制信息。

  • CAN总线具有“线与”的特性,也就是当有两个节点同时向总线发送信号时,一个发送显性电平(逻辑0),另一个发送隐性电平(逻辑1),则总线呈现为显性电平。这个特性被用于总线仲裁,也就是哪个节点优先占用总线进行发送操作。

  • 每个帧有一个标识符(Identifer,以下简称ID)。ID 不是地址,它表示传输数据的类型,也可以用于总线仲裁时确定优先级。例如,在汽车的CAN总线上,假设用于碰撞检测的节点输出数据帧的D为01,车内温度检测节点发送数据的D为05等

  • 每个CAN节点都接收数据,但是可以对接收的根据ID进行过滤。只有节点需要的数据才会被接收并进一步处理,不需要的数据会被自动舍弃。例如,假设安全气囊控制器只接受碰撞检测节点发出的ID为01的帧,这种ID的过滤是由硬件完成的,以便安全气囊控制器在发生碰撞时能及时响应。

  • CAN 总线通信是半双工的,即总线不能同时发送和接收。在多个节点竞争总线进行发送时,通过DD的优先级进行仲裁,竞争胜出的节点继续发送,竞争失败的节点立刻转入接收状态。

  • CAN 总线没有用于同步的时钟信号,所以需要规定CAN总线通信的波特率,所有节点都使用相同的波特率进行通信。

3.1 CAN帧种类介绍

1. 数据帧Data Frame:数据帧是CAN总线上用于传输用户数据的帧,包括必要的帧头、标识符、控 制位、数据长度代码、数据域、CRC校验码和应答域等部分,是CAN通信中最基本和最重要的帧类型。 (发送某个ID的数据)

2. 遥控帧(Remote Frame):遥控帧用于向总线上的其他节点请求发送具有相同标识符的数据帧,它没有数据域,仅通过标识符来指定所需的数据。遥控帧的帧结构与数据帧相似,但缺少数据部分。 (请求某个ID的数据)

3. 错误帧(Error Frame):当CAN总线上的任何节点检测到通信错误时,会发送错误帧来通知其他节点(发送节点也会被通知到)。错误帧包含错误标志和错误界定符,用于指示错误的存在和类型。 (不符合CAN协议,提示)

4. 过载帧(Overload Frame):过载帧用于在连续的数据帧或远程帧之间提供额外的延时,以指示接收节点尚未准备好接收下一个帧。当接收节点因内部条件限制而无法立即接收数据时,会发送过载帧来请求发送节点暂停发送。 (通知发送方不要发太快了)

5. 帧间隔(Interframe Space):帧间隔用于隔离数据帧与前面的帧,确保它们之间的时间间隔足够长,以避免总线上的冲突和数据丢失。帧间隔包括连续三个隐性位(间隔段)和可能存在的空闲段,用于将数据帧或远程帧与前面的帧分隔开来。

3.2 标准数据帧和遥控帧

标准格式数据帧和遥控帧的结构如图18-4所示,它们都有11位的ID。数据帧传输带有DD的0到8字节的数据;遥控帧只有ID,没有数据,用于请求数据。数据帧可以分为以下几段。

  (1)帧起始(Start OfFrame,SOF)

  帧起始只有一个位,是一个显性电平(逻辑0),表示一个帧的开始。

  (2)仲裁段(ArbitrationField)

  仲裁段包括11位的ID和RTR位,共12位。多个节点竞争总线发送数据时,根据仲裁段的数据决定哪个节点优先占用总线。哪个ID先出现显性电平(逻辑0),对应的节点就占用总线。所以,ID数值小的优先级更高。如果两个节点发送数据帧的ID 相同,再根据仲裁段最后的 RTR 位裁决。

  RTR(Remote Transmit Request)是远程传输请求,RTR 位用于区分数据帧和遥控帧。数据帧的 RTR位是显性电平(逻辑0),遥控帧的RTR位是隐性电平(逻辑1)。所以,具有相同ID的数据帧和遥控帧竞争总线时,数据帧优先级更高。

  (3)控制段

  控制段包括IDE位、RBO位和4位的DLC,共6位。IDE是标识符扩展位(Identifer Extension Bit),用于表示帧是标准格式,还是扩展格式标准格式帧的IDE是显性电平(逻辑0),扩展格式帧的IDE是隐性电平(逻辑1)。

  RB0是保留位,默认为显性电平。

  DLC是4个位的数据长度编码(DataLength Code),编码数值为0到8,表示后面数据段的字节数。遥控帧的 DLC编码数值总是0,因为遥控不传输数据。

  (4)数据段。

  数据段里是数据帧需要传输的数据,可以是0到8字节,数据的字节个数由DLC 编码确定。遥控帧没有数据段。

(5)CRC段。

  CRC段共16位,其中前15位是CRC校验码,最后一位总是隐性电平,是CRC段的界定符(Delimiter)(占位符)。发送端给数据生成CRC校验码,数据和CRC校验码一起发送出去,接收端将重新生成CRC校验码,并与接收的校验码进行对比。

(6)ACK段。

  ACK段包括一个ACK位(Ackmowledge Bit)和一个 ACK 段界定符(占位符)。在发送数据帧时,发送节点会在ACK槽位置发送一个隐性位(逻辑1)。当接收节点正确无误地接收到数据帧后,它会在ACK槽期间向总线发送一个显性位(逻辑0),以此作为应答信号。如果接收节点检测到数据帧中存在错误(如CRC错误、格式错误等),则不会发送应答信号,或者会发送错误帧来通知发送节点。

  (7)帧结束(EndOfFrame,EOF)

  帧结束是帧结束段,由7个隐性位表示EOF。数据帧或遥控帧结束后,后面一般是帧间空间或过载帧,用于分隔开数据帧或遥控帧。

3.3 扩展格式数据帧和遥控帧

扩展格式数据帧和遥控帧的结构如图18-5所示。扩展格式的ID总共是29位,扩展格式帧与标准格式帧的差异在于仲裁段和控制段。

(1)仲裁段。

扩展格式数据帧的仲裁段总共32位,包括11位标准ID、SRR 位、IDE 位、18 位扩展 ID、RTR 位。SRR位(Substitute Remote Request Bit)只存在于扩展格式帧中,用于替代标准格式帧中的RTR 位。SRR位总是隐性电平,相当于是一个占位符,真正的RTR位在仲裁段的最后一位。RTR位还是用于区分数据帧和遥控帧。

扩展格式帧中的IDE位总是隐性电平,表示这是扩展格式的。

(2)控制段。

控制段由RB1位、RB0位和4位DLC组成。RB1位和RB0位是保留位,总是显性电平。4位的DLC编码表示数据的长度,从0到8字节。

3.4 位时序和波特率

一个CAN网络需要规定一个通信的波特率,各节点都以相同的波特率进行数据通信。位时序指的是一个节点采集CAN 总线上的一个位数据的时序,位时序如图18-3所示。通过位时序的控制,CAN 总线可以进行位同步,以吸收节点时钟差异产生的波特率误差,保证接收数据的准确性。

CAN总线以“位同步”机制(位时序),实现对电平的正确采样。位时序都由四段组成:同步段(SS)、传播时间段(PTS)、 相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。

  1. 图18-3,有些教程将PTS和PBS1合并,合并之后影响不大。

  2. 图18-4,

    1. SS时序固定是1Tq。

    2. PTS、PBS1、PBS2没有固定个数的Tq。

以下是关于这些段落的详细解释:

  1. SS(同步段):SS段的大小是固定的,在这个时间段内,总线上应该发生一次位信号的跳变。如果节点在同步段检测到总线上的一个跳变沿,就表示节点与总线是同步的。如果不在这个时间段内发送一次信号跳变,说明信号跳变提前了或者延迟了,然后就需要在这次位时序里调整PBS1或者PBS2了(后面同步机制会讲到)

  2. 同步段长度固定为1个Tq。Tq(time quantum)被称为时间片,由CAN控制器的时钟频率Fcan决定。在 STM32F407中,两个CAN控制器在 APB1总线上,CAN控制器有预分频器,APB1总线的时钟信号PCLKI经分频后得到Fcan。

  3. PTS(传播时间段):PTS段用于补偿信号在网络和节点之间传播的物理延迟时间。PTS段的大小可以在一定范围内调整,通常为1~8个最小时间单位Tq。

  4. 位段1(BitSegment1,PBS1):定义了采样点的位置。在BS1结束的时间点对总线采样,得到的电平就是这个位的电平。BS1的初始长度是1到16个,但它的长度可以在再同步(resynchronization)的时候被自动加长,以补偿各节点频率差异导致的正相位漂移。

  5. 位段2(BitSegment2,PBS2):定义了发送点的位置。BS2的初始长度是1到8个再同步时可以被自动缩短,以补偿负相位漂移。

CAN 控制器可以自动对位时序进行再同步,再同步时自动调整BS1和BS2的长度,位段加长或缩短的上限称为再同步跳转宽度(ResynchronizationJumpWidth,SJW),SJW的取值是1到4个t。CAN总线的波特率就由标称位时间长度NBT决定,而NBT是位时序3个段的时间长度和,即

CAN总线通过时钟同步机制来确保各个节点在通信过程中保持同步。时钟同步机制包括硬同步和再同步两种:

  1. 硬同步:

    1. 硬同步只在帧的起始位(SOF)处进行。CAN总线的硬同步确实是在每次发送帧时都会进行的同步过程,无论是发送数据帧还是遥控帧,都会通过SOF(Start of Frame,帧起始)位的下降沿来实现同步。

    2. 当接收节点检测到帧起始位的下降沿时,接收节点会调整各自当前位的SS(同步段),使其位于发送的SOF位内,从而实现同步。这个过程就是硬同步。

    3. 硬同步是CAN总线通信中保持各个节点同步的关键机制之一。它确保了所有节点在接收到帧的起始位置时能够有一个共同的参考点,从而能够正确地解析和响应后续的数据位。如果没有硬同步机制,各个节点的时钟可能会因为各种原因(如晶振误差、传输延迟等)而产生偏差,导致通信失败或数据错误。

  1. 图18-5,当检查到下降沿(SOF)时,调整SS(同步段)。

  2. 将SS(同步段)移动到当前下降沿的时间点。

  1. 再同步:

    1. 再同步在帧的后续数据位中进行。

    2. 每发送一个位之前,在SS(同步段)时间段内,总线上应该发生一次位信号的跳变。如果接收节点检测到数据位的跳变沿不在自身的SS(同步段)内,则会通过延长或缩短相位缓冲段的时间来调整自身的位时间,以重新获得同步。

    3. 再同步时,PBS1和PBS2中增加或者减少的时间被称为“再同步补偿宽度(SJW)”,其范围:1~4 Tq。

    4. 分三种情况:第一种是提前发送一次位信号的跳变,第二种是延迟发送一次位信号的跳变,第三种是准时发送一次信号的跳变。

  1. 延迟了2Tq才发送位信号的跳变。

  2. 处理过程也很简单,就是在PBS1后面增加2个Tq。

  3. 此次采样的时间延迟了2个Tq。

  4. 下一次采样的时间,也是按照信号的跳变3种情况再次分析。

  1. 在上一次PBS2时间段里,提前了2Tq发送位信号的跳变。

  2. 处理过程也很简单,就是提前结束上次的PBS2时间段,等同于将上次的PBS2删除2Tq。

3.5 CAN仲裁机制

CAN总线处于空闲状态,最先开始发送消息的单元获得发送权。

多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。仲裁原理如下:

  1. 标识符优先级:

    1. CAN总线中传输的数据帧的起始部分为数据的标识符(ID)。这个标识符不仅用于区分消息,还表示消息的优先级。在CAN 2.0标准中,标识符可以是11位或29位(对于扩展帧)。标识符的数值越小,优先级越高。

    2. 例如,在11位标识符的情况下,ID为0x000的消息具有最高优先级,而ID为0x7FF的消息具有最低优先级。

  2. 逐位仲裁:

    1. 当两个或两个以上的节点同时开始传送报文时,就会产生总线访问冲突。此时,各节点会按照标识符的位顺序逐位进行仲裁。

    2. 在仲裁过程中,每个节点都会将自己发送的电平与总线上的电平进行比较。如果电平相同,则节点继续发送下一位;如果电平不同,则优先级低的节点停止发送,而优先级高的节点继续发送。

    3. 这种仲裁方式是非破坏性的,即优先级低的节点在仲裁过程中不会破坏总线上已经存在的数据。

  3. 显性电平优先:

    1. 在CAN总线上,显性电平(逻辑0)的优先级高于隐性电平(逻辑1)。因此,在仲裁过程中,如果某个节点发送的是隐性电平,但检测到总线上存在显性电平,那么该节点就会知道有更高优先级的消息正在发送,并主动停止发送。

一旦仲裁结束,优先级最高的节点将获得总线控制权并开始传输数据。其他节点则成为接收节点并监听总线上的数据,并会自动检测总线空闲,在第一时间再次尝试发送。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2023框框

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值