欢迎来到可志信息技术(上海)有限公司官方网站!我们提供专业的智能硬件及物联网开发服务。
超高STC值 热线电话
您现在的位置:主页 > 新闻中心 > 公司新闻 > CAN技术协议基础介绍
CAN技术协议基础介绍
来源:未知    日期:2020-07-08    阅读( )
CAN协议在汽车电子领域有着广泛的应用。可志信息在汽车电子领域有着深厚的积累,能够把汽车电子中关于稳定性,可靠性的设计常识应用到日常工作项目中。

CAN基础

CAN总线基础(一)——CAN总线概述
 
CAN总线基础(二)——CAN总线物理层介绍(总线电压详解)
 
如何学习CAN总线?
 
CAN总线波特率的设定——以STM32F103为例
 

一口气从零读懂CAN总线

第一部分(1-3):这部分讲了CAN总线的历史、标准、物理层。
第二部分(4-5):这部分讲了CAN总线数据链路层,和CAN总线同步机制。
下面是将这两部分进行梳理和精简后得出的内容。

1.CAN收发器(芯片)

CAN总线分高速CAN和低速CAN,收发器也分为高速CAN收发器(1Mbps)和低速CAN收发器(125Kbps)。低速CAN也叫Fault Tolerance CAN,指的是即使总线上一根线失效,总线依然可以通信。如同串口中的MAX3232用作电平转换,CAN收发器的作用则是把逻辑信号转换为差分信号。
 

2.差分信号

CAN总线采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。在差分信号中,逻辑0和逻辑1是用两根差分信号线的电压差来表示。当处于逻辑1,CAN_High和CAN_Low的电压差小于0.5V时,称为隐性电平(Recessive);当处于逻辑0,CAN_High和CAN_Low的电压差大于0.9V,称为显性电平(Dominant)。
 
高速CAN
 
高速CAN
 
 
低速容错CAN (Fault Tolerance CAN)
CAN总线遵从“线与”机制:“显性”位可以覆 盖“隐性”位;只有所有节点都发 送“隐性”位, 总线才处于“隐性” 状态。这种“线与”机制使CAN总线呈现显性优先的特性。
 
显“00”隐“1”隐“1”

3.CAN总线连接器

 

4.CAN数据链路层

在SPI通信中,片选、时钟信号、数据输入及数据输出这四个信号都有单独的信号线。而CAN使用的是两条差分信号线,只能表达一个信号。简洁的物理层决定了CAN必然要配上一套更为复杂的协议。如何用一个信号通道实现同样甚至更强大的功能,答案就是对数据或操作命令进行打包。

通信机制

多主机(Multi-Master)
安全敏感的应用(如汽车动力)对通信系统的可靠性要求很高。将总线能否正常工作归结到单一节点是非常危险的,比较合理的方案是对总线接入的去中心化,即每个节点都有接入总线的能力。这也是CAN总线采用多主控(Multi-Master)线性拓扑结构的原因。
在CAN总线上,每个节点都有往总线上发送消息的能力,而消息的发送不必遵从任何预先设定的时序,通信是事件驱动的。只有当有新的信息传递时,CAN总线才处于忙碌的状态,这使得节点接入总线速度非常快。CAN总线理论最高数据传输速率为1Mbps,对于异步事件反应迅速,基本对于ms级别的实时应用没有任何问题。
 
寻址机制
不同于其它类型的总线,CAN总线不设定节点的地址,而是通过消息的标识符(Identifier)来区别消息。这种机制虽然会增加消息的复杂度(增加标识符),但是节点在此情况下可以无需了解其他节点的状况,而相互间独立工作。在总线上增加节点时仅需关注消息类型,而非系统上其他节点的状况。这种以消息标识符寻址的方式,让总线上增加节点变得更加灵活。
 
总线访问CSMA/CD+AMP
CAN总线通信原理可简单描述为多路载波侦听+基于消息优先级的冲突检测和非破坏性的仲裁机制(CSMA/CD+AMP)。CSMA(Carrie Sense Multiple Access)指的是所有节点必须都等到总线处于空闲状态时才能往总线上发送消息;CD+AMP(Collision Detection + Arbitration on Message Priority)指的是如果多个节点往总线上发送消息时,具备最高优先级的消息获得总线。
多路载波侦听:网络上所有节点以多点接入的方式连接在同一根总线上,且发送数据是广播式的。网络上各个节点在发送数据前都要检测总线上是否有数据传输:若网络上有数据,暂时不发送数据,等待网络空闲时再发;若网络上无数据,立即发送已经准备好的数据。
冲突检测:节点在发送数据时,要不停的检测发送的数据,确定是否与其他节点数据发送冲突,如果有冲突,则保证优先级高的报文先发送。
非破坏性仲裁机制:通过ID仲裁,ID数值越小,报文优先级越高。
 
 
发送低优先级报文的节点退出仲裁后,在下次总线空闲时自动重发报文。
 
高优先级的报文不能中断低优先级报文的发送。
 
报文接收过滤
CAN控制器大多具有根据ID过滤报文的功能,即只接收某些ID的报文。节点对接收到的报文进行过滤:比较消息ID与选择器(Accepter)中和接受过滤相关位是否相同。如果相同,接收;如果不相同,则过滤。
问:过滤的名单在实际应用中,该如何去修改?(通过修改电路OR更换芯片OR软件代码?)
 

5.CAN的报文种类及结构

报文的种类
在原始数据段的前面加上传输起始标签片选(识别)标签控制标签,在数据的尾段加上CRC校验标签应答标签传输结束标签。把这些内容按特定的格式打包好,就可以用一个通道表达各种信号了。各种各样的标签,起到了协同传输的作用。当整个数据包被传输到其他设备时,只要这些设备按格式去解读,就能还原出原始数据。类似这样的数据包就被称为CAN的数据帧
为了更有效的控制通信,CAN一共规定了5种类型的帧,帧也称为报文。
 

数据帧(扩展帧)

数据帧在CAN通信中最主要,也最复杂。数据帧以一个显性位(逻辑0)开始,以7个连续的隐性位(逻辑1)结束。CAN总线的数据帧有标准格式(Standard Format)和扩展格式(Extended Format)的区分。
 
数据帧可以分为七段:
帧起始(SOF)
标识一个数据帧的开始,固定一个显性位。
 
用于同步,总线空闲期间的任何隐性到显性的跳变都将引起节点进行硬同步。只有总线在空闲期间节点才能够发送SOF。
仲裁段(Arbitration Field)
仲裁段的内容主要为本数据帧的ID信息。数据帧分为标准格式扩展格式两种,区别就在于ID信息的长度:标准格式的ID为11位;扩展格式为29位。在CAN协议中,ID决定着数据帧发送的优先级,也决定着其他设备是否会接收这个数据帧。
仲裁段的内容主要为本数据帧的ID信息。数据帧分为标准格式和扩展格式两种,区别就在于ID信息的长度:标准格式的ID为11位;扩展格式为29位。在CAN协议中,ID决定着数据帧发送的优先级,也决定着其他设备是否会接收这个数据帧。
 
 
仲裁段除了报文ID外,还有RTR, IDE, SRR位。
RTR:显性表示数据帧,隐性表示远程帧
IDE:显性表示数据帧为标准格式;隐性表示数据帧为扩展帧格式
SRR:扩展 CAN 帧的 SRR 位应为隐性以允许正在发送标准CAN远程帧的节点发出显性RTR 位。
仲裁段除了报文ID外,还有RTR, IDE, SRRSSSSSSSSSSSSRR位。SS
控制段
在控制段,标准帧R(reserved1),和扩展帧r1(reserved1)和r0(reserved0)为保留位,默认设置为显性位。最主要的是DLC(Data Length Code)段,它是用二进制编码表示本报文中的数据段包含多少个字节。DLC段由4位组成,DLC3−DLC0,表示的数字为0-8.
在控制段,r1(reserved1)和r0(reserved0)为保留位,默认设置为显性位。最主要的是DLC(Data Length Code)段,它是用二进制编码表示本报文中的数据段包含多少个字节。DLC段由4位组成,DLC3−DLC0,表示的数字为0-8.
 
 
数据段
数据帧的核心内容,有0-8个字节长度,由DLC确定。
数据帧的核心内容,有0-8个字节长度,由DLC确定。
 
CRC段
为了保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,一旦接收端计算出的CRC码跟接收到的CRC码不同,就会向发送端反馈出错信息以及重新发送。CRC部分的计算和出错处理一般由CAN控制器硬件完成,或由软件控制最大重发数。
在CRC校验码之后,有一个CRC界定符,它为隐性位,主要作用是把CRC校验码与后面的ACK段隔开。
为了保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,一旦接收端计算出的CRC码跟接收到的CRC码不同,就会向发送端反馈出错信息以及重新发送。CRC部分的计算和出错处理一般由CAN控制器硬件完成,或由软件控制最大重发数。
在CRC校验码之后,有一个CRC界定符,它为隐性位,主要作用是把CRC校验码与后面的ACK段隔开。
 
 
ACK段
包含确认位(ACK slot)界定符(Delimiter,DEL)。ACK在发送节点发送时,为隐性位。当接收节点正确接收到报文时,对其用显性位覆盖。DEL界定符同样为隐性位,用于隔开。
 
 
帧结束段(End-of-Frame, EOF)
帧结束段由发送端发送7个隐性位表示结束。
结束段由发送端发送7个隐性位表示结束
帧结束段由发送端发送7个隐性位表示结束。帧结束段由发送端发送7个隐性位
 

远程帧

通常,数据传输是由数据源节点(例如,传感器发出数据帧)自主完成的。但也可能存在目标节点向源节点请求发送数据的情况。要做到这一点,目标节点需发送一个远程帧,其中的标识符应与所需数据帧的标识符相匹配。随后,相应的数据源节点会发送一个数据帧以响应远程帧请求。
 
远程帧 与数据帧存在两点不同:
1)远程帧的 RTR 位为隐性状态;
2)远程帧没有数据字段。
 
当带有相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁,因为其标识符后面的 RTR 位为显性。这样,可使发送远程帧的节点立即收到所需数据。
 

错误帧

 
1. stuff_check
a) 接收方检测
b) 检测是否有位填充错误,出现6个同极性位就报错
2. form_check
a) 接收方检测
b) 检测crc界定符和ack界定符以及eof区域是否出现显性位
3. bit monitoring
a) 发送方检测
b) 发送显性位,但总线是隐性位就报错
4. crc
a) 接收方检测
b) 接收方会快速生成一个值,与发送方的crc段进行比对,不一致就报错
5. ack_check
a) 发送方检测
b) 接收会在收到消息后在ack应答位给出一个显性电平,如果如果发送方检测到该位为隐性,则报错
 
当错误主动节点检测到一个总线错误时,这个节点将产生一个主动错误标志来中断当前的报文发送。主动错误标志由 6 个连续的显性位构成。这种位序列主动打破了位填充规则。所有其他节点在识别到所生成的位填充错误后,会自行产生错误帧,称为错误反射标志。
错误标志字段因此包含 6 到 12 个连续显性位 (由 1 个或多个节点产生)。错误定界字段 (8 个隐性位)为错误帧划上句号。在错误帧发送完毕后,总线主动恢复正常状态,被中断的节点会尝试重新发送被中止的报文。
 
错误跟踪机制 error tracking
为了避免总线被永久错误节点卡死,比如,这个节点由于本身的原因一直在报错,导致总线无法正常发送了,需要一种机制进行鉴别并限制其功能
 
 
Error Active:节点广播错误信息,错误计数大于127转入Error Passive
Error Passive:节点发送6个隐性位,错误计数大于255转到Bus off
Bus off: 软件重启或者接收到128x11位的隐性位后转到Error Active
 

过载帧

过载帧与主动错误帧具有相同的格式。
但是,过载帧只能在帧间间隔产生,因此可通过这种方式区分过载帧和错误帧 (错误帧是在帧传输时发出的)。过载帧由两个字段组成,即过载标志和随后的过载定界符。过载标志由 6 个显性位和紧随其后的其他节点产生的过载标志构成 (而主动错误标志最多包含 12个显性位)。过载定界符包含 8 个隐性位。
节点在两种情况下会产生过载帧:
1)节点在帧间间隔检测到非法显性位。在 IFS 的第三位期间检测到显性位除外。这种情况下,接收器会把它看作一个 SOF 信号。
2)由于内部原因,节点尚无法开始接收下一条报文。节点最多可产生两条连续的过载帧来延迟下一条报文的发送。
 
 
 

6.总线同步

CAN总线使用位同步的方式来确保通信时序,以及对总线的电平进行正确采样。CAN总线使方式来确保CAN总线使用位同步的方式来确保通信时序,以及对总线的电平进行正确采样。

位时序

在讲位时序之前,先介绍几个基本概念。
Time Quantum 时间份额tQ :CAN控制器工作的最小时间单位,通常对系统时钟分频得到。之前,先介绍几个基本概念。
Time Quantum 时间份额tQ :CAN控制器工作的最小时间单位,通常对系统时钟分频得到。
讲位时序之前,先介绍几个基本概念。Time Quantum 时间份额tQ :CAN控制器工作的最小时间单位,通常对系统时钟分频得到。
 
波特率:单位时间内(1s)传输的数据位,公式:1/位时间。举个栗子,系统时钟频率36MHz预分频因子4,则CAN时钟频率9MHz,则Tq=1/9M。假设一个CAN位包含10个Tq,则一个位周期T=10Tq,从而波特率为1/T=0.9MHz.
 
为了实现位同步,CAN协议把每一位的时序分解成下图所示的四段。这四段的长度加起来即为一个CAN数据位的长度。一个完整的位由8-25个Tq组成。了实现位同步,CAN协议把每一位的时序分解成下图所示的四段。这四段的长度加起来即为一个CAN数据位的长度。一个完整的位由8-25个Tq组成。
为了实现位同步,CAN协议把每一位的时序分解成下图所示的四段。这四段的长度加起来即为一个CAN数据位的长度。一个完整的位由8-25个Tq组成。为了实现位同步,CAN协议把每一位的时序分解成下图所示的四段。这四段的长度加起来即为一个CAN数据位的长度。一个完整的位由8-25个Tq组成。
 
·同步端(SS,Synchronization Segment)
一个位的输出从同步段开始。若总线的跳变沿被包含在SS段的范围之内,则表示节点与总线的时序同步。节点与总线同步时,采样点采集到的总线电平即可被确定为该电平的电位。SS段的大小为1Tq.
 
·传播段(PTS,Propagation Time Segment)
用于补偿信号在网络和节点传播的物理延时时间,是总线上输入比较器延时和输出驱动器延时总和的两倍。通常1-8Tq
 
·相位缓冲段1(PBS1, Phase Buffer Segment 1)
主要用于补偿边沿阶段的误差,其时间长度在重新同步时可以加长。初始大小1-8Tq.
 
·相位缓冲段2(PBS2,Phase Buffer Segment 2)
也是用于补偿边沿阶段的误差,其时间长度在重新同步时可以缩短。初始大小2-8Tq.

同步

CAN同步分为硬同步和重新同步。重新同步。CAN同步分为硬同步和重新同步。CAN同步分为硬同步和重新同步。
同步规则:
l 一个位时间内只允许一种同步方式
l 任何一个“隐性”到“显性”的跳变都可用于同步
l 硬同步发生在SOF阶段,所有接收节点调整各自当前位的同步段,使其位于发送的SOF位内。
l 重新同步发生在一个帧的其他阶段,即当跳变沿落在同步段之外。
硬同步
当总线上出现帧起始信号(SOF,即隐性到显性的边沿)时,其他节点的控制器根据总线上的这个下降沿对自己的位时序进行调整,把该下降沿包含到SS段内。这样根据起始帧来进行的同步称为硬同步。
可以看到在总线出现帧起始信号时,该节点原来的位时序与总线时序不同步,因而这个状态的采样点采集到的数据是不正确的。所以节点以硬同步的方式调整,把自己的位时序中的SS段平移至总线出现下降沿的部分,获得同步,这时采样点采集到的数据是正确数据。
可以看到在总线出现帧起始信号时,该节点原来的位时序与总线时序不同步,因而这个状态的采样点采集到的数据是不正确的。所以节点以硬同步的方式调整,把自己的位时序中的SS段平移至总线出现下降沿的部分,获得同步,这时采样点采集到的数据是正确数据。
 
同步前
 
同步后
重新同步
 
因为硬同步时只是在有帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,所以CAN引入了重新同步的方式。在检测到总线上的时序与节点使用的时序有相位差时(即总线上的跳变沿不在节点时序的SS段范围),通过延长PBS1段或缩短PBS2段来获得同步,这样的方式称为重新同步。
分两种情况:第一种, 节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后2个Tq,这是控制器在下一个时序中的PBS1段增加2Tq的时间长度,使得节点与总线时序重新同步。步时只是在有帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,所以2个Tq,这是控制器在下一个时序中的PBS1段增加2Tq的时间长度,使得节点与总线时序重新同步。
因为硬同步时只是在有帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,所以CAN引入了重新同步的方式。在检测到总线上的时序与节点使用的时序有相位差时(即总线上的跳变沿不在节点时序的SS段范围),通过延长PBS1段或缩短PBS2段来获得同步,这样的方式称为重新同步。分两种情况:第一种, 节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后2个Tq,这是控制器在下一个时序中的PBS1段增加2Tq的时间长度,使得节点与总线时序重新同
第二种,节点从总线的边沿跳变中,检测到它的时序相对超前2Tq,这时控制器在前一个位时序中的PBS2段减少2Tq的时间长度,获得同步。种,节点从总线
 
在重新同步的时候,PBS1和PBS2段的允许加长或缩短的时间长度定义为,重新同步补偿宽度(SJW,reSynchronization Jump Width)。这里设置的PBS1和PBS2能够增减的最大时间长度SJW=2Tq,若SJW设置的太小则重新同步的调整速度慢,若太大,则影响传输速率。
波特率小的时候设置SJW大一些,波特率大的时候设置SJW小一些,最小设置为1,

位填充

连续性的5个位没有边沿跳变,硬件会自动填充一个与当前电平相反的电平,用示波器观察数据时要将填充的位去除.
 
由于位填充规则的存在,所以就存在即使两个帧都是标准数据帧,但发送不同ID或者数据段的时候报文时间会不同,图5为1M波特率下ID跟数据都为0x00的标准数据帧报文。原本108个位的标准数据帧的真实的报文时间为123us。
 
而0x55的标准数据帧报文格式则如图 6:ID为555H,数据段为55H,报文没有出现连续的相同位,所以填充位最少,8位的数据段位时间为标准的8us,全报文时间为108us。
 
下表给出了标准数据帧、扩展数据帧、标准远程帧、扩展远程帧四种帧类型在发送不同ID和数据时位时间的差别。
 

7. Baud Rate波特率计算

Baud_Rate = fclk / (SS + PTS+ PBS1 + PBS2)

个人总结

l 11898-1对应controller
l 11898-2对应高速CAN收发器
l 11898-3对应低速CAN收发器
l 使用sub-d9插头
 
1. 传输长度40m,高速CAN传输最高速度1Mbit/s,低速CAN传输最高速度125kbit/s
2. 网络末端需要有120Ω的终端电阻(注意低速CAN不一定需要),标准32个节点最高可以扩展到110个节点
3. 总线空闲时间任一节点均可竞争发送消息
4. 消息将被广播,由节点自己决定是否过滤
5. 相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁
6. 每个节点在进行发送时都会对总线电平进行检测
a) send0 出现1:报错
b) send0 出现0:继续
c) send1 出现1:继续
d) send1 出现0:竞争失败
7. 竞争失败
a) 行为:节点会自动在检测到总线空闲的第一时间再次尝试发送
b) 在网络负载很高,也就是消失很多的时候,低优先级的消息可能会延迟很久才发送成功
8. 节点访问总线过程
 
9. 标准帧:数据长度8字节的情况下,占108位,再加上帧间隙3个位,总共111位(没有算上位填充)
a) 250k波特率下:每秒理论最多传输250000/111=2252帧
b) 500k波特率下:每秒理论最多传输500000/111=4504帧
10. 扩展帧:数据长度8字节的情况下,占128位,再加上帧间隙3个位,总共131位(没有算上位填充)
a) 250k波特率下:每秒理论最多传输250000/131=1908帧
b) 500k波特率下:每秒理论最多传输500000/131=3816帧
11. 
 
 
 
 
 
 
   

CANoe测试环境搭建

卸载CANoe

首先需要卸载之前的CANOE,从原来安装程序中,用原安装程序的INSTALL来完成。
  
 
 
  
一定要上面的选择。
 
如果是12.0版本,uninstall界面如上图所示。
如果原来没有安装过CANOE,则可以自动忽略此步骤。

重新安装vector驱动

 
 
选择CANcaseXL log
 
按照上图完成选择,然后选择install
 
如果出现安装失败,则再安装一次Vector Keyman。安装可能需要15分钟左右。
 

安装CANoe

 
 
选择64BIT
 
输入序列号,然后一路NEXT。
注意:序列号请不要选错,选择错误后,软件安装版本也是错误的
50000021842
WUHAN V-Cycle Software Co.,Ltd
33K2-5I47-FFRZ-FDXZ-3GNC-3WDR-VRWM-1DZ7
  
最后完成安装

CANOE使用说明

CANOE使用-LIN

 
启动CANalyzer即可
 
 
 

STM32 CAN测试

 
 
Question
重同步
1. 位填充机制 bit stuffing
2. 利用隐性位到显性位的边沿进行重同步
 
上一篇:可志信息综合数据记录仪设计文档 下一篇:可志信息硬件设计教程