分享

CAN总线详解 |附下载

 Kuai2012 2022-04-26

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总线采用双线差分传输,两根导线分别为CAN_H、CAN_L,在总线空闲状态下,CAN H和 CAN L的电压为 2.5VCAN 将逻辑“0”定义为显性位,将逻辑“1”定义为隐性位。发送显性位时,CAN H为3.5,CAN L为1.5V,即显性位的差分电压为2V。隐性位传输时CAN H和CAN L均为2.5V,表示隐性位的差分电压为0V。CANH和CANL线的物理端应加120欧的CAN总线终端电阻,以避免任何信号反射。

图1 CAN 总线差分信号

CAN帧类型:

帧是一种定义的结构或格式,它在网络内承载有意义的数据(字节)。CAN 有四种帧类型:数据帧、远程帧、错误帧、过载帧。

数据帧

数据帧包含要传输的实际数据。数据帧由提供有关消息的附加信息的字段组成,即仲裁字段、控制字段、数据字段、CRC 字段、2 位确认字段和帧结束。

有两种类型的数据帧

  1. 标准帧格式

  2. 扩展帧格式

两种格式的唯一区别是标准帧支持 11 位标识符,扩展帧支持由 11 位标识符和扩展 18 位标识符组成的 29 位标识符。IDE 位在标准帧中为显性,在扩展帧中为隐性。

基本帧格式:

SOF-在总线空闲时,总线为隐性状态。帧起始由单个显性位构成,标志着报文的开始,并在总线上起着同步作用。

Identifier-也称之为仲裁段,也代表消息优先级 值越低,优先级越高。在CAN2.0A规范中,标识符为11位,而在CAN2.0B中变为了29位。这意味着在2.0B中可以存在更多不同类型的报文,但是也降低了总线的利用率。

RTR - 远程传输请求。它对于数据帧是显性的,对于远程帧是隐性的。

IDE - 单一标识扩展。它对标准帧显性,对扩展帧隐性。

R0 - 保留位。

DLC - 数据长度。定义Data的长度。它是 4bit。

数据 - 要传输的数据,长度由 DLC 决定。

CRC-CRC又称循环冗余码校验,是检查帧传输错误的帧。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符组成,其CRC的计算范围包括帧起始、仲裁段、控制段、数据段。

ACK-用于接收节点确认是否正常接收,由ACK槽和ACK界定符组成。

EOF - 帧结束,由连续的7个隐性位组成。

IFS-帧间隔。它包含控制器将正确接收的帧移动到其正确位置所需的时间。

图3 扩展帧格式

它与标准帧相同,但有一些附加字段。

SRR- 替代反向请求。如果两个消息具有相同的 11 位标识符,则 SRR 位始终作为隐性位传输,以确保标准数据帧与扩展数据帧相比具有高优先级。除了 11 位标识符之外,它还包含一个 18 位标识符。

r1- 保留位。

远程帧 

远程帧类似于数据帧,但有两个不同之处。远程帧由接收器发送以向发送器请求数据。远程帧和数据帧之间的区别在于远程帧中不包含任何数据字段,因为它不用于数据传输。第二个区别是仲裁字段中的 RTR 位对于远程帧是隐性的。由于数据帧中的显性 RTR 位,如果两者都准备好同时发送,则数据帧将赢得仲裁。

错误帧

如果发送或接收节点检测到错误,它将立即停止发送并发送一个错误帧,该帧由一个由 6 个显性位组成的错误标志和由 8 个隐性位组成的错误标志定界符组成。

错误标志:

1.主动错误标志

2.被动错误标志

活动错误标志:当在 CAN 网络上检测到错误时由节点传输

被动错误标志:当在 CAN 网络上检测到主动错误时由节点传输。

错误计数器:如果在总线上检测到错误,则 TEC 或 REC 计数增加。

1.传输错误计数器(TEC)

2.接收错误计数器(REC)

  • 当TEC和REC小于128时,发送一个主动错误帧

  • 当TEC或REC大于127小于255时,发送被动帧

  • 当TEC大于255时,节点进入总线关闭状态,此时无帧传输

图4 错误转换状态图 

过载

过载帧包含两个字段 Overload flag 和 Overload Delimiter。过载标志由六个显性位组成,后跟由其他节点生成的过载标志。过载定界符由八个隐性位组成。导致传输过载帧的过载条件有:

1.当接收方需要下一帧的延迟时。

2.在间歇期间检测到显性位时。

仲裁

仲裁是一种在多个节点同时准备传输消息时解决冲突的机制。只要总线空闲,任何节点都可以传输数据。如果多个节点准备同时传输数据,则对总线的访问会发生冲突,可以通过使用标识符进行仲裁来解决。在仲裁过程中,每个发送器都会将传输的位值与总线上的位值进行比较。如果位值相同,则节点继续传输位。如果传输的位值与总线值不同,则显性位会覆盖隐性位。

CAN 消息的仲裁字段由 1 位或 29 位标识符和 RTR 位组成。具有最低值的标识符具有最高优先级。如果数据帧和远程帧具有相同的标识符并且同时准备发送数据,则数据帧具有高优先级,因为远程传输位(RTR)在数据帧中是显性的,而在远程帧中是隐性的。

消息级 CAN 总线错误控制机制

与其他协议相比,CAN 协议是健壮的。如果检测到错误,则通过这些机制,节点传输错误帧并销毁传输的帧。

CRC错误

发送节点在发送CAN报文(数据帧或遥控帧)时,会对帧起始、仲裁段、控制段、数据段进行CRC计算,并将计算的结果放置在CRC段。接收节点在接收报文时对相同的段执行相同的CRC算法,如果计算结果与CRC段的数据不同,则接收节点检测出CRC错误。

ACK错误

节点在发送报文(数据帧或遥控帧)时,如果接收节点成功接收报文,那么接收节点会在ACK槽对应的时间段内向总线发送一个显性位,告知发送节点报文已正常接收。当发送节点在ACK槽时间内没有回读到显性位,则发送节点检测到ACK错误。

格式错误

报文中,固定形式的位场含有1个或多个非法位,包括数据帧或遥控帧的CRC界定符、ACK界定符、EOF、错误帧界定符、过载帧界定符,则节点检测为格式错误。

位时序

CAN 总线的每一位分为四段。每个段由TQ组成。细分:

1.同步段
2.传播段
3.相位段 1
4.相位段 2

图5 CAN位时序

1)同步段(Synchronization Segment)

  • 长度固定,1个时间量子Tq;

  • 一个位的传输从同步段开始;

  • 同步段用于同步总线上的各个节点,一个位的跳边沿在此时间段内。

2)传播段(Propagation Segment)

  • 传播段用于补偿报文在总线和节点上传输时所产生的时间延迟;

  • 传播段时长 ≥ 2 × 报文在总线和节点上传输时产生的时间延迟 ;

  • 传播段时长可编程(1~8个时间量子Tq)。

3)相位缓冲段1(Phase Buffer Segment1)

  • 用于补偿节点间的晶振误差;

  • 允许通过重同步对该段加长;

  • 在这个时间段的末端进行总线状态的采样;

  • 长度可编程(1~8个时间量子Tq)

4)相位缓冲段2(Phase Buffer Segment2)

  • 用于补偿节点间的晶振误差;

  • 允许通过重同步对该段缩短;

  • 长度可编程(1~8个时间量子Tq)

采样点

  • 位周期内的采样点决定了 CAN 总线电压是隐性还是显性。

  • 以位周期的百分比表示,位置是从位周期的起点计算的,位于阶段1和阶段2之间。

处理位级错误

填充错误

CAN 协议遵循 NRZ 编码进行传输。位间隔之间的逻辑电平不会改变。CAN 需要逻辑电平转换以进行重新同步。因此,在 5 个相同的连续位之后发送 1 位相反的逻辑电平。这称为填充位,接收器识别它。

位错误

发送该位的节点始终监视总线。如果发送器发送的位与总线上的位值不同,则会生成错误帧。

CAN 总线 DB9 引脚排列

CAN 总线通常通过连接器访问

图 6. CAN 总线 DB9 引脚排列 

Pin1:保留
Pin2:CAN_L
Pin3:CAN GND
Pin4:保留
Pin5:CAN_SHLD
Pin6:GND Pin7:
CAN_H
Pin8:保留
Pin9:CAN_V+


    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多