一、CAN协议
1、协议简介
CAN(Controller Area Network)是ISO国际标准化的一种实时应用的串行通信协议,在汽车电子系统中,用于各种电子系统之间的通信,现在由于CAN的高性能和可靠性被认可,已经被广泛用于工业自动化、工业设备等方面。
CAN协议经过ISO标准化后有两个标准,ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,ISO11519-2是针对125Kbps以下的低速通信标准。
2、CAN协议特点
2.1 多主工作方式
在总线空闲时,所有单元都可以发送消息:
①最先向总线发送消息的节点获得发送权
②当两个以上单元同时开始发送消息时,根据标识符ID决定优先级,对对ID的每个位进行逐个仲裁比较,优先级高的继续发送消息,仲裁优先级低的停止发送而进行接收工作。
2.2 系统的柔性
CAN总线上节点没有地址概念,仅用标志符指示功能信息、优先级信息,因此增加节点不会对已有节点的软硬件及应用层造成影响。o
2.3 通信速度 ①在同一条CNA总线上,所有节点通信速度必须相同,如果不同通信速度的总线上节点想要实现信息交互,必须通过网关。 ②CAN通信速率较快,通信距离远。最高1Mbps(距离小于40m),最远可达10KM(速率低于5Kbps) 2.4 错误检测、错误通知、错误恢复功能 ①错误检测:所有单元都可以检测错误 ②检测出错误的单元会立即同时通知其他所有单元(错误通知)
③正在发送消息的单元一旦检测出错误,会强制结束当前的发送;强制结束发送的单元会不断反复重新发送此消息直到成功发送为止(错误恢复)。
2.5 故障封闭
CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
2.6 多节点连接
CAN总线可同时连接多个单元总线,实际可连接的单元数受总线上时间延迟及电气负载限制;降低通信速度可增加连接单元数量。
2.7 其他性能
实时性强、传输距离较远、抗干扰能力强、成本低
二、信号传输架构
CAN的传输链路为CPU-CAN控制器-CAN收发器-节点单元
1、发送过程
CAN控制器将CPU发送的数据信号转换为逻辑电平(逻辑0显性/逻辑1隐形),CAN收发器将逻辑电平转换为差分电平发送给CAN总线上。
2、接收过程
CAN收发器将CAN_H和CAN_L线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转换为相应的信号发送给CPU
总结:发送方通过使总线电平发生变化,将其信息传递到CAN总线上。
接收方通过监听总线电平,将总线上的消息读入自己的接收器。
三、CAN电气特性
电信号的传输在物理层面都是靠电压高低区分来实现的,CAN也是如此;CAN总线使用双绞线进行差分电压传输,使用CAN_H和CAN_L两根线上的电位差来表示CAN信号,CAN总线上的电位差分为显性电平(逻辑0)和隐形电平(逻辑1)
显性(逻辑为0):高速CAN 1.5V<CANH-CANL<3V,典型2V;低速CAN 0.3V<CANH-CANL,典型值3V;
隐性(逻辑为1):高速CAN -0.5V<CANH-CANL<0.05V,典型值0V;低速CAN -0.3V<CANH-CANL,典型值-1.5V;
注:CAN总线采用线与规则进行冲突仲裁,即当多个CAN信号同时发送时,只要有0则总线就是0,因此0为显性。
四、CAN电路设计
1、CAN控制器
CAN控制器分为两类:独立的控制器芯片、CAN控制器集成在微控制器中
1.1 控制器原理
①接口逻辑管理IML
接口逻辑管理用于连接CPU,解释来自主控的命令,控制CAN控制器寄存器的寻址,并向主控提供中断信息和状态信息。
②CAN核心模块
收到一个报文时,CAN核心模块根据CAN规范将串行位流转换成用于接收的并行数据,发送报文时相反。
③发送缓冲器TXB
发送缓冲器用于存储一个完整报文,当CAN控制器发送初始化时,接口管理逻辑会使CAN核心模块从发送缓冲器读CAN报文。
④验收滤波器ACF
验收滤波器可以根据用户的编程设置,把报文头中的标识符和验收滤波器寄存器中的内容进行比较,以判断是否接收报文,如果接收,报文存入接收FIFO。
⑤接收FIFO
接收FIFO是验收滤波器和主控制器之间的接口,用于存储从CAN总线上接收并通过了过滤的报文,使CPU处理一个报文同时可以接收其他报文。
⑥位流处理器BSP
位流处理器是在发送缓冲器、RXFIFO和CAN总线之间控制数据流的程序装置,还在CAN总线上执行错误检测、仲裁、填充和错误处理。
⑦错误管理逻辑EML
按照CAN协议完成错误界定,接收BSP的出错报告,通知BSPhereIML进行错误统计。
⑧位时序逻辑BTL
监视CAN总线和处理与总线有关的位时序,用于同步CAN总线位流。
1.2 控制器外围电路设计
引脚说明:
AD7-AD0:数据总线,与CPU连接
ALE/AS:ALE输入信号(Intel模式/LSB),AS输入信号(Motorola模式/MSB)
/CS :片选输入,一般低电平有效
(/RD)/E:MCU的/RD信号(Intel模式),或E使能信号(Motorola模式)
/WR:MCU的/WR信号(Intel模式),或RD/信号(Motorola模式)
CLKOUT:控制器产生给MCU的时钟输出,来源于控制器内部振荡器,不用可禁止该引脚
XTAL1:输入到振荡器放大电路,外部晶振信号输入
XTAL2:振荡放大电路输出
MODE:模式选择(Intel/Motorola)
TX0:与CAN收发器的TX连接
TX1:悬空
TX0和TX1是控制器内部
RX0:与CAN收发器的RX连接
RX1:接VCC
2、CAN收发器
CAN收发器是CAN控制器和物理总线之间的接口,将CAN控制器的逻辑电平转换为CAN总线的差分电平。CAN收发器也分为独立型与组合型两大类,由于独立型应用更灵活,因此最广泛使用,后者通常与CAN控制器组合在一起,形成具有CAN收发功能的CAN组件。
2.1 CAN收发器原理
2.2 CAN收发器外围电路设计
引脚说明:
TX:接CAN控制器/MCU的TX
RX:接CAN控制器/MCU的RX
VIO:接与TXD信号相同的参考电压,一般3,3V
S:Silent 模式选择,高有效,一般接地;监听模式使用,不向总线发送数据
3、终端电阻
CAN一般会在首尾增加120Ω匹配电阻,主要是有以下几个作用:
①为改善由于阻抗突变导致的信号质量恶化问题,提高信号质量;
②可以使得总线上的寄生电容得到快速泄放,快速恢复到隐性状态;
③当总线没有负载时,隐性时差分电阻阻值大,外部干扰容易使得总线进入显性,因此使用终端电阻可以吸收干扰,提升抗干扰能力;
注意仅在首尾两个节点添加,封装不小于0805;
五、CAN数据结构
1、数据帧
用于发送单元向接收单元传送数据的帧,根据仲裁段ID码长度不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)
数据帧由7个段构成,分别是:
①帧起始:表示数据帧的开始段,由一个显性位组成。
②仲裁段:用于仲裁该帧优先级的段,有两种格式:
RTR:远程发送请求位,数据帧中为显性,远程帧中为隐性
SRR:替代远程请求位(在扩展格式中在RTR的位置),隐性位。
IDE:标识符扩展位,标准帧显性,扩展帧隐性,表示该帧为标准帧还是扩展帧
③控制段:表示数据的字节数及保留位的段,共6位
R1、R0:保留位
DLC:数据长度代码
④数据段:数据的内容,可发送0~8个字节的数据
⑤CRC段:检查帧传输错误的段,由15位CRC值和1位CRC界定符(隐性位)组成
⑥ACK段:2位,由应答位和应答界定位组成。在应答域中,发送器发出两个隐性位,当接收器正确的接收到有效的报文,该接收器就会在应答位期间,用一显性位填充应答位作为回应,而应答界定位一直保持为隐性。当节点接收的帧起始到CRC段内容没有错误,会在ACK段发送一个显性电平。
⑦帧结束:表示数据帧结束的段,由7个隐性位组成。
2、远程帧
用于接收单元向具有相同ID的发送单元请求数据的帧
远程帧由帧起始、仲裁段、控制段、CRC段、ACK段和帧结束6个部分组成
与数据帧的区别:
①RTR位,数据帧为显性,远程帧为隐性
②远程帧没有数据域
③远程帧发送特定的ID,然后对应ID的节点收到远程帧后自动返回一个数据帧。
3、错误帧
错误帧由错误标志和错误界定符组成
①出错标志有两种:主动(积极)错误和被动错误,主动错误由6个连续的显性位组成,被动错误由6个隐性位组成。
错误积极节点如果检测到一个错误条件,会发送一个积极错误标志进行标识,这个错误标志违反了正常的位填充规则,会引起其他节点检测到新的错误节点并各自开始发送错误标志,因此检测到的显性序列是各个节点发出的不同错误标志的叠加。
消极错误节点如果检测到一个错误条件,会试图发送一个消极错误进行指示,这个消极错误节点会一直等待6个具有相同极性的连续位,当检测到6个相同极性的连续位时,消极错误标志发送即完成。
②错误界定符由8个隐性位组成
4、过载帧
用于接收单元通知其尚未做好接收准备的帧,由过载标志和过载界定符组成
过载标志由6个位的显性位组成
过载界定符由8个位的隐性位组成
5、帧间隔
用于将数据帧、远程帧与之前的帧分离开的帧,数据帧、远程帧可以通过插入帧间隔将与本帧与前面的任何帧分开,过载帧、错误帧不能插入帧间隔。
笔记写了这么多,不过在硬件中,到目前关注比较多的还是信号质量问题,尤其是挂了很多节点的时候;
鉴于CAN的仲裁和错误校验机制,确实比485靠谱很多,不过,对于实时性要求比较高的情况,CAN的通讯速率又不太够,所以需要选择带CAN-FD的主控;就不得不吐槽某国产MCU,有点坑。。。
来自 Roger的硬件升级之路公众号
热门跟贴