徽州骆驼 · 2022年10月31日 · 北京市

通俗易懂的CAN网络解读

以下文章来源于积木家智能科技 ,作者何羡森

CAN概述

1.CAN总线定义

CAN,全称为“Controller Area Network”,CAN总线是控制器局域网总网,由德国博世公司研发出来的IOS国际标准化串行通信协议总线,是一种分布式实时控制的串行网络,用于在不同的ECU下传输数据,是国际应用最广的现场总线之一。

2.CAN总线标准

CAN总线标准规定数据链路层和物理层,应用层需要用户定义,不同场景使用的不同的应用层标准,例如物理层和数据链路层使用ISO 11898 协议。

image.png

3.CAN网络分层

遵循IOS\OSIwnagl标准模型,can规定了数据链路层和物理层,数据链路层又分逻辑链路控制子层LLC和媒介访问控制子层MAC,不同的can标准仅物理层不同。
image.png

4.CAN协议

CAN有两个ISO国际通信协议 :

ISO11519:定义了通信速率10~125kbps的低速can通信标准,属于开环总线,传输速度为40kbps时,总线长度可达1000米 。低速can用于车身控制系统等要求高的场景,低速can在断掉任一线路时还可以继续接收数据 。

ISO11898:定义了通信速率为125kbps~1mbps的高速can通信标准,属于闭环总线,最高可达1mbps,总线长度<40米 。高速can用于发动机 变速箱等要求实时性 传输效率高场景。

image.png

5.CAN应用层

CAN总线只提供可靠的传输服务,所以节点接收报文时,要通过应用层协议来判断是谁发送的数据,数据代表什么含义。

CAN应用层协议驱动是运行在主控制器上的程序,它按照应用层协议对CAN报文进行定义,完成报文的解析和拼装,例如:将帧ID当作节点地址,当接收到的帧ID与自身节点ID不通过时,就直接丢弃或交给上层处理。

6.ISO11898与ISO11519物理层不同点

image.png

7.CAN电压

CAN总线上通过CAN_H和CAN_L两条线的电位差来表示can信号,can总线上两种电位差分别为显性电平逻辑0和隐性电平逻辑1,显性电平优先级高于隐性电平,can控制器将cpu传来的信号转为逻辑电平,can发射器将接收到的逻辑电平转化成差分电发送到can总线上。
image.png

8.CAN差分信号

image.png

9.开环总网络/闭环总网络

image.png
来自CSDN
image.png
来自CSDN

10.CAN的优点

传输速度:传输最高速度可达1mbps,最远1000米,无损位仲裁机制,多主结构 

低成本:ECUs通过单个CAN接口通信,布线成本低 

高集成:CAN总线系统允许在所有ECUs上进行集中诊断和配置 

可靠性:该系统对子系统故障和电磁干扰有很强的鲁棒性,是汽车控制系统的理想选择 

高效率:可以对信息ID进行优先排序,以便最高等级的的信息不被中断 

灵活性:每个ECU包含一个用于can信号收发芯片,随意添加can节点

11.CAN的特点

多主控制:总线空闲时ECU都可以发送信号,两个以上单位同时发送信号时以标识符(ID)决定优先级 。

系统柔软性:连接总线的单元没有“地址”信息,所以添加新的单元时,其他的已连接的单元软硬件和应用层都不需要做出改变 具有错误检测,错误通知,错误恢复功能:所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

故障封闭功能:CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

CAN通讯详解

1.CAN的通讯流程

CAN通讯是一种基于信号的通信,信号的发送一般是基于事件和周期的属性,CAN信号发送可以一对一,也可以一对多,采用广播形式,也就一条总线上一个节点发送的信号会被其他节点接收到,所以一条can总线上不允许多个ECU发送相同的CANID,避免总线冲突。
image.png
来自CSDN

2.CAN通信网络结构

实际上,CAN总线网络底层只采用了OSI基本参照模型中的数据链路层、传输层。
image.png

3.CAN通讯载体

常见CAN总线是由带屏蔽层的双绞线、收发器、控制器和终端电阻组成的。
image.png

4.CAN的通讯节点

can通讯节点是由一个can控制器和can收发器组成,控制器与收发器之间通过can-Tx和can-Rx信号相连接,收发器与can总线之间用can-low和can-high信号线相连,其中can-tx和can-rx使用的普通类似ttl巡逻信号,而can-high和can-low是一对差分信号线,使用比较特别差分信号 。

TTL:晶体管_晶体管逻辑电平,TTL信号电平规定,+5V等价于逻辑1,0V等价于逻辑0,这样的数据通信及电平规定方式,被称为TTL。
image.png

5.CAN节点

CAN收发器是实现CAN控制器逻辑电平和CAN总线差分电平的互换,实现CAN收发器的方案有两种:

一是使用CAN收发IC(需要加电源隔离和电气隔离)

二是使用CAN隔离收发模块

CAN控制器是CAN的核心元件,它实现了CAN协议中数据链路层的全部功能,能够自动完成CAN协议的解析,CAN控制器一般有两种 一是控制器IC(SJA1000)二是集成CAN控制器的MCU(LPC11C00) 。

MCU负责实现对功能电路和CAN控制器的控制,在节点启动时初始化CAN控制器参数;通过CAN控制器读取和发送CAN帧;在CAN控制器发生中断时,处理CAN控制器的中断异常;根据接收到的数据输出控制信号。

image.png

6.CAN节点构建

构建节点,实现相应控制,由下而上分为4部分,:

CAN节点电路

CAN控制器驱动

CAN应用层协议

CAN节点应用程序 

虽然不同节点完成的功能不同,但是都有相同的硬件和软件架构。

CAN的收发器和控制器分别对应CAN的物理层和数据链路层,完成CAN报文的收发 功能电路完成特定的功能,如信号采集或控制外设等 主控制器与应用程序按照CAN报文格式解析报文,完成相应控制CAN硬件驱动是运行在主控制器上的序,它主要完成以下工作:

基于寄存器的操作、初始化 

CAN控制器、发送CAN报文、接收CAN报文 

如果直接使用CAN硬件驱动,当更换控制器时,需要修改上层应用程序,移植性差,在应用层和硬件驱动层加入虚拟驱动层,能够屏蔽不同CAN控制器的差异 。

一个CAN节点除了完成通信功能,还包括一些特定的硬件功能电路,功能电路驱动向下直接控制功能电路,向上为应用层提供控制功能电路的函数接口,特定功能包括 数据采集、人机显示等。
image.png

7.CAN控制器

接口管理逻辑 解释MCU指令,寻址CAN控制器中各功能模块的寄存器单元,向主控制器提供中断信息和状态信息 。

发送缓冲区和接收缓冲区都可以储存CAN总线网络的完整信息 验收滤波是将储存的验证码与CAN报文的识别码比较,跟验证码符合的CAN帧才会储存到接收缓冲区 CAN内核实现数据链路的全部协议。

CAN报文发送流程

1.报文发送

节点发送要检测到总线空闲状态(连续11位隐性) 。

只有总线空闲时节点才能发送报文 在发送过程中进行回读,判断发出的位和回读的位是否一致。
image.png

2.报文仲裁

线与机制 通过ID进行制裁 显性位能够覆盖隐性位,报文ID值越小,优先等级越高。

报文同时发送时才启动仲裁机制

image.png

3.仲裁处理

非破坏性仲裁 退出仲裁后进入接收状态 。

总线空闲时重新发送

image.png

4.报文接收和过滤

通过滤波器对接收的报文进行过滤 。

相关就接收,不相关就过滤。

image.png

CAN帧解析

1.CAN帧种类

数据帧:用于发送单元向接收单元传送数据的桢 

遥控帧:用于接收单元向相同ID单元发送请求的桢 

错误帧:用于当检测出错误时向其他单元通知错误的桢 

过载帧:用于接收单元通知其尚未做好准备的桢 

帧间隔:用于将数据桢和远程桢与前面桢隔开的桢

2.CAN数据帧格式

image.png
来自CSDN

一、帧起始(SOF)

桢最开始就是起始帧,也叫(SOF)。

SOF恒定为显性(1bit)。

image.png

来自CSDN

1.NRZ编码与位填充

NRZ(非归零)编码 

确保报文紧凑,相同宽带下信息量更大 。

不能保证足够的跳变沿同步,带来节点间计时器误差的累积。

image.png

2.CAN的波特率及位同步

由于can属于异步通信,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,特别的 CAN 还会使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

(1)位时序分解

为了实现位同步,CAN 协议把每一个数据位的时序分解成如图 所示的 SS 段、PTS 段、PBS1 段、PBS2 段,这四段的长度加起来即为一个 CAN 数据位的长度。分解后最小的时间单位是 Tq,而一个完整的位由 8~25 个 Tq 组成,总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个 Tq,就可以确定 CAN 通讯的波特率。

image.png
image.png

(2)CAN的同步机制

一个位时间内只允许一种同步方式 任何一个从隐性到显性的下降沿都可以用来同步 硬同步发生在报文SOF位,所有接收节点调整自己当前位的同步段 重同步发生在一个报文SOF位之外的其他段,当下降沿在同步段之外时发生重同步 从SOF到冲裁场发送时间段内,如果有多个节点同时发送报文,那么这些节点对跳变沿不发生重同步。

(3)硬件同步

接收单元在总线空闲时检测出帧起始时进行的同步调整 。

在检测出边沿的地方不考虑SJW值,而认为SS段。
image.png

(4)再同步

在接收过程中检测总线电平发生变化时进行同步调整 当检测出边沿时,根据SJW值通过加长PBS1段或缩短PBS2段进行同步,但如果发生超出SJW值的误差时,最大调整量不能超过SJW值。

image.png

来自CSDN

二、仲裁段

仲裁段是用来判断一帧报文的优先等级(包含报文源地址和目标地址)。

数据仲裁段RTR恒定为显性,远程帧恒定为隐性(标准帧11位bit,拓展帧29位bit。

image.png

仲裁场SSR与标准帧同一位置,故名远程代替请求位 SRR为隐性1,确保标准帧收发高于拓展帧优先级。
image.png
仲裁场IDE位,标准帧中的IDE对应拓展帧中的IDE,确保前11位ID相同下,数据帧优先于拓展帧 区分标准帧和拓展帧 。

标准桢为显性0(11位ID) 拓展桢为隐性1(29位ID)。
image.png

三、控制段

保留位r0,r1发送时必须是显性,接受方可以是显性和隐性任意组合 最后4个字节的DLC代表数据长度,指示了数据桢中的数据长度,对于没有数据段的遥控帧,DLC表示该遥控帧对应的数据帧的数据段的字节数。
image.png

四、数据段

数据段为数据帧的核心内容,它是节点要发送的原始信息,由 0~8 个字节组成,MSB 先行。

image.png

五、校验场(CRC)

CRC段包含了CRC校验序列(15位)和CRC界定符1(隐性)。

image.png

六、应答场(ACK)

发送节点在ack段发送2个隐性位,即发送方发送报文ack槽为隐性 。

接受节点在接收到正确信息后在ack槽发送显性,通知发送节点正常接收。

image.png

七、帧结束(EOF)

固定格式,连续7个隐性单位,表示数据桢结束。
image.png

八、ITM间歇场

固定格式 :3个连续的隐性位 ITM后进入总线空闲状态,此时节点可以收发报文。
image.png

3.遥控帧

image.png
来自CSDN

image.png

来自CSDN

4.错误帧

在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧错误一共有5种,多种错误可能同时发生:

位错误 

填充错误 

CRC错误 

格式错误 

ACK错误。
image.png
image.png

(1).错误帧的输出

检测出满足错误条件的单元输出错误标志通报错误。

处于主动错误状态的单元输出的错误标志为主动错误标志;处于被动错误状态的单元输出的错误标志为被动错误标志。

发送单元发送完错误帧后,将再次发送数据帧或遥控帧、

image.png
来自CSDN

image.png

(2).节点状态

节点始终处于3种状态:

  • 总线关闭        

    不能收发任何报文 

  • 被动错误        

    能够进行总线通信        

    错误产生时发送被动错误标志(6个连续隐性位)        

    限制(不能连续发送2次报文) 

  • 主动错误 

    正常进行总线通信,错误产生时发送主动错误标志(6个连续显性位)

image.png

5.过载帧

image.png

6.帧间隔

image.png

CAN网络负载率

1.CAN网络负载率

CAN负载率概念CAN总线负载率是指在CAN总线上单位时间内实际传送的位数和可以传送的位数之比。

2.标准CAN负载率计算

帧起始(1bit)、仲裁域(12bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、应答域(2bit)、1(bit)分隔符和帧结尾(7bit),共108位,但实际发送一帧报文长度应该在111左右。

image.png

3.拓展帧负载率计算

帧起始(1bit)、仲裁域(29bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、应答域(2bit)和帧结尾(7bit),共124位,但实际发送一帧报文长度应该在128左右。

image.png

作者:何羡森
来源:汽车电子与软件
微信公众号:
汽车电子与软件.jpg

推荐阅读:

更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
5713
内容数
453
汽车电子与软件行业的相关技术报道及解读。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息