作者:Neo
出品:汽车电子与软件
01 首语 随着人们对汽车功能需求越来越多样化、智能化,汽车的零部件(ECU,Electronic Control Unit)的数量也越来越多、越来越复杂,像自动驾驶、主动安全等功能加入,普通汽车搭载ECU数量大约为50-100个,而豪华智能汽车的ECU数量平均可达到300个以上。在如此庞大数量的ECU的汽车中,各个ECU之间是如何进行信息交换、共同协作,以及ECU是如何完成在线升级(OTA,On The Air)的呢?本文将介绍汽车电子中常用的通信协议——控制器局部网(CAN,Controller Area Network)。 02 CAN基础概念介绍 CAN通信技术是由博世(BOSCH)公司于1986 年开发出面向汽车的一种通信协议,随后通过ISO-11898和ISO-11519对其进行标准化: 1、ISO-11898:定义了通信速率为 125 kbps~1 Mbps 的高速 CAN 通信标准,属于闭环总线,传输速率可达1Mbps,总线长度 ≤ 40米。 2、ISO-11519:定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环总线,传输速率为40kbps时,总线长度可达1000米。 CAN通信网络是欧洲汽车网络的标准协议,在发展过程中,其高性能和可靠性被广泛认可,所以也会被使用在工业自动化、船舶、医疗设备、工业设备中。 CAN总线为显性电平时代表逻辑0,CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差Vdiff为2.0V左右)。 前面提到CAN是一种异步通信,没有时钟信号线,其通信过程类似串口通信(Serial Communications),CAN控制器之间通过事先约定好的时序进行通信,但CAN通信还会采用位同步(Bit Synchronization)的方式来抗干扰、吸收误差,从而使得CAN控制器可以对总线信号进行正确采样,保证正常通信。 • Prop_Seg(传播时间段) 这个时间段是用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。Prop_Seg段的大小可以为 1-8Tq。 • Phase_Seg1(相位缓冲段1) 这个时间段主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。Phase_Seg1段的初始大小可以为 1-8Tq。 • Phase_Seg2(相位缓冲段2) 这个时间段也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。Phase_Seg2段的初始大小可以为 2-8Tq。 ECU需要从总线中获取CAN帧中的信号电平,转化为逻辑电平,也就是将图2 差分信号中的显性电平和隐性电平转换为对应的逻辑电平0和逻辑电平1,这样在总线中的CAN帧就被转换成程序中使用的CAN报文了。 这个步骤就是由CAN收发器(CAN Transceiver)来完成的,如图1 ECU连接图所示,其位于MCU和CAN Network之间,接收CAN总线上的CAN帧相关的信号电平并将其转化为逻辑信息电平转发给CAN控制器,并且也接收从CAN控制器传输过来的逻辑电平信息并将其转化为信号电平传从到CAN总线上。 03 CAN帧 CAN有五种帧的类型:数据帧(Data Frame)、远程帧(Remote Frame)、错误帧(Error Frame)、间隔帧(Can Interval Frame)和过载帧(Overload Frame),其中最复杂的帧类型为数据帧,其作用是传输数据,数据长度是可变的,一个经典CAN(Classical CAN)数据帧可传输0-8个字节的数据(数据内容长度,不含CAN帧的控制信息),而一个CAN FD(CAN with Flexible Data rate)的可传输的数据长度可达64个字节,后文提到的CAN为经典CAN。CAN帧会因其ID位数的不同而不同,以ID位数分为两类:标准帧(11位CAN Identifier)和扩展帧(29位CAN Identifier)。 这个区域包含CAN Identifier的[28:18],总共11位,其范围为0x000-0x7FF,CAN Identifier的值越小会在CAN总线仲裁时拥有更高的优先级(Priority)。RTR位用来指示该帧是否位远程帧(用来区分没有数据的数据帧和远程帧)。 • 控制区 IDE位用来指示该帧是否为扩展帧;r0为保留位;DLC指示该帧数据区的长度。 • 数据区 这里放着0-8个字节需要传输的数据。 • 校验区 CRC(Cyclic Redundancy Check):循环冗余校验;Delimiter:分隔符。 • 应答区 ACK SLOT:应答槽,发送方会将此位作为隐性电平发送,接收方成功接收后会将此位重写,以此来让发送方知道此帧是否被成功发送。 r0/r1位:保留位 04 CAN控制器 虽然有相应的标准来规范CAN通信,但是不同的芯片厂商对其功能的具体实现却各不相同,不同点主要在CAN外设在芯片中的寄存器设计,各自驱动程序自然也有区别,但在CAN总线上发出和接收的CAN帧都和标准规定的一致。下面是一些具体的例子来描述CAN控制器的大致工作机制。 Cypress Traveo II系列芯片是英飞凌专为汽车应用设计的32位MCU,其CAN控制器支持经典CAN和CAN FD(ISO 11898-1:2015)。收发CAN帧时支持多种模式,给应用带来更多可能,方便实现不同的场景需要。 接下来是存储CAN帧的关键区域,这里存着CAN控制器从总线接收到符合上面已经配置好的CAN ID的CAN帧、即将要发送的CAN帧,从图中可以看出接收/发送时可以使用FIFO(实际也有Queue)模式和Buffer模式,后面会详细介绍不同的模式的工作方式以及CAN帧的内部构造。 图7 Rx FIFO RTR位:用来区分该帧为远程请求帧还是数据帧,若此位为0则该帧是数据帧,若此位为1则该帧是远程请求帧。 DLC[3:0]:此4位数据用来指示该帧含有的数据的字节数,本文只讨论经典CAN,所以DLC规定的范围应该在0-8字节。 R2-R3:这两行数据就是数据帧中的数据域中的内容,经典CAN最多传输8个字节数据,从图中可以看出,这样一个CAN帧块最大支持8个字节的数据,DB0-DB7。 CAN控制发送过程就相对复杂一些,因为上层应用可能需要发多种CAN ID报文,其报文优先级有高有低,高优先级需要尽快发出,低优先级则可以在缓冲区中等待优先级更高的CAN帧发送完,再发出。 图9 同时使用Tx Buffer和Tx FIFO 如图9所示,当同时使用Tx Buffer和Tx FIFO时,CAN控制器每次都会扫描这些区域,当前状态下,Tx Buffer中一个CAN ID为2的CAN帧等待发送,因为它是Tx Buffer区域中CAN ID最小的,并且比Tx FIFO中处于Get Pos的这一帧(CAN ID为4)小,所以它拥有最高优先级,这一帧将会最先被发出去,第二次CAN控制器再次扫描这些区域,发现处于Tx FIFO中Get Pos的这一帧(CAN ID为4)是这些区域中最小的(包括Tx Buffer),所以第二次将会发送CAN ID为4的这一帧,如此往复,直到这些区域内的所有Tx CAN帧块被全部通过CAN收发器转换为信号电平发送到总线上。 图10 Tx Element 如图10所示,与Rx Element类似,XTD、RTR、ID、DLC以及DB0-DB7的用法与Rx Element一致,只有部分内容有不同。 MM[7:0]:Message Marker,这是一个与发送事件(Tx Event)相关的信息。 EFC(Event FIFO Control)位:该位表示该帧是否有将发送事件存在对应的MRAM中。 FDF位:此位用来标识该帧是否为一个CAN FD帧。 BRS(Bit Rate Switching)位:当该帧位CAN FD帧(即FDF为1时),此位才有效,决定该帧在发送时是否启用速率切换(Rate Switching),以更高的速度传输。 更多与Traveo II发送和接收CAN帧相关的细节,大家可以去查阅英飞凌提供的技术手册TRM。 05 总结差分信号
位时序
CAN收发器
标准帧
扩展帧
消息区
接收
发送
随着时代的变化,大家对新能源车的要求越来越高,更复杂的娱乐功能、高级辅助驾驶、自动驾驶功能等等,CAN通信在这些功能的就有点力不从心了,现在出现FlexRay、车载以太网等一些新的通信技术,随着这些有趣的技术快速发展,让我们来看看会发生什么。
已完成
数据加载中