一种基于LIN总线的在线更新程序设备的研究
2022-11-24银燕杰唐琳
银燕杰,唐琳
(1.四川爱创科技有限公司,四川绵阳,62100;2.吉利学院,四川成都,641400)
0 前言
新能源汽车中的电子部件越来越多,光是ECU就有上百个,这么多的电子单元都要进行信息交互。传统的点对点通信已经不能满足需求,因此必须采用先进的总线技术。车用总线就是车载网络中底层的车用设备或车用仪表互联的通信网络。目前,有四种主流的车用总线:CAN总线、LIN总线、F lexRay总线和Ethernet总线[1]。
其中LIN(Local Interconnect Network)是一种低成本的串行通信网络,用于实现汽车中的分布式电子系统控制。LIN 的目标是为现有汽车网络(例如CAN总线)提供辅助功能,因此LIN总线是一种辅助的总线网络。在不需要CAN 总线的带宽和多功能的场合,比如智能传感器和制动装置之间的通信使用LIN 总线可大大节省成本。
LIN总线有如下特点:
(1)串行通信:线间干扰小,节省线束,传输距离长;(2)单线传输:增强的ISO9141 (ISO 15765-1) , 总线电压基于VBAT;(3)最高速率20Kbit/s:满足车身上大部分的应用需求,常用波特率为9600bit/s、19200bit/s;(4)单主多从结构:无需仲裁;(5)基于通用UART/SCI的低成本接口硬件:几乎所有MCU有具备LIN总线的硬件基础;(6)从节点无须晶振或陶瓷振荡器就可以实现同步:大幅度降低成本;(7)一条总线最多可连接16个节点:由总线电气特性决定;(8)支持诊断功能:支持UDS服务。
虽然LIN有如上相关特点,但是采用LIN通信的相关ECU无法通过整车OBD接口进行在线程序的刷写,如果出现ECU软件BUG,就需要拆除ECU并通过JTAG等接口进行软件升级。这样的操作不但操作繁琐,而且一旦需要花费大量资金用于软件升级。本文通过设计一种基于LIN总线的在线刷写程序设备即可通过ECU的接插件进行程序升级[2]。
1 整体框架设计
如图1所示,整体电路分为3个部分:(1)LIN收发器/供电电路;(2)MCU电路;(3)数码管电路[3]。
图1 整体设计框图
2 LIN收发器/供电电路设计
采 用Microchip的SBC(system basis chip)芯 片ATA663231即可实现LIN收发器和电源供电电路的设计。ATA663231器件系列包括两个基本功能:一个 LIN 系统基础芯片 和一个具有兼容封装的低压降稳压器。ATA663231是一款完全集成的 LIN 收发器,根据符合 LIN 规范 2.0、2.1、2.2、2.2A、ISO 17987-7 和 SAEJ2602-2,带有低压降稳压器(3.3V/5V/85 mA)。稳压器和总线收发器的组合使得在 LIN 总线系统中开发简单但功能强大的从节点成为可能。 ATA663231设计用于处理车辆中的低速数据通信(例如,在便利电子设备中)。改进的 LIN 驱动器斜率控制可确保高达 20 Kbaud 的安全数据通信。总线输出设计用于承受高压。即使在浮动或短路 LIN 总线的情况下,睡眠模式和静音模式也能确保将电流消耗降至最低。 ATA663231是一款完全集成的低压降稳压器,具有 3.3V/5V 输出电压和 85 mA 电流能力。它专为汽车环境而设计。一个关键特性是电流消耗始终低于170μA(无负载),即使电源电压低于稳压器的标称输出电压。电路图如图2所示。
图2 ATA6623C内部框图
ATA663231具备两个功能:
LIN数据收发:PIN6(LIN)收到整车LIN控制器的指令,内部转换后通过PIN1(RXD)发输给MCU。另一方面MCU也会将一些反馈数据,比如故障信息,通过PIN4(TXD)发送给ATA663221,再通过PIN6(LIN)传输给整车的LIN 控制器。ZD1为TVS,能有效抑制浪涌电压;L1和C8组成LC电路来提升设备的EMC性能。C8的容值不能选择过大,否则会导致LIN输入信号的上升沿和下降沿过缓,最严重会导致数据丢帧的情况发生。建议选择C8为100pF/50V的陶瓷贴片电容。L1可以选择EPCOS 的B82432-C。L1和C8还需要根据EMC测试来调整电容值和电感值。
LDO:整车蓄电池(9~16VDC)的电压通过PIN7(VS)输入到ATA663221,内部转换后输出PIN8(3.3V)给MCU供电。电源转换电路的输入和输入分别需要一个电解电容用来储能,一个陶瓷电容用来滤波,这样的设计可以抑制电源纹波。还需要注意的是,需要在电源输入端接防反接二极管ZD2用作保护。ZD2的选择除了考虑耐压,还需要选择压降小的肖特基二极管或者快恢复二极管。SW1是一个开关,在需要进行供电的时候闭合开关。
图3 防反接保护电路
3 MCU电路设计
MCU采 用Microchip的dsP IC33CK128MP 505,该MCU具备LIN控制器模块,它和ATA 663231的LIN收发器功能共同实现了LIN总线的硬件收发功能。由于需要通过Bootloader刷写ECU的程序,Flash需要选择256KB。电路设计如图4所示。
图4 MCU电路
MCU电路具体如下功能:
(1)晶振电路:晶振可为MCU提供基本的时钟信号,通常晶振应用在MCU系统中,有利于各部分保持同步。C11和C13为两个起振电容。只有在外部所接电容为匹配电容的情况下,振荡频率才能保证在标称频率附件的误差范围内。从原理上讲,直接将晶振接到单片机上,单片机也可以正常工作。但是,这样构成的振荡电路会产生谐波。虽然这些谐波对电路的影响不大,但会导致电路时钟振荡器的稳定性降低。所以,为了振荡电路的稳定性,建议在晶振的两个PIN接入两个陶瓷电容来削减对振荡电路稳定性的影响。但是这两个电容具体的大小没有什么普遍意义上的计算公式,不同MCU的要求也是不一样的。最终选择两个起振电容的容值后,需要进行测试来确保振荡电路的稳定性。
(2)按键及LED电路:通过KEY1和KEY2两个按键设置输入信息;3个LED等D1、D2、D3反馈相关信息。KEY1到MCU有0和1两种输入模式,同样KEY2也有;因此,总共可以设置4种输入模式。没一个LED也有亮和灭两种情况;因此,3个LED可以反馈8种模式。
(3)滤波去耦电路:需要在MCU的每对电源引脚(例如,VDD/VSS 和 AVDD/AVSS)上使用去耦电容。电路中的C9、C10、C12、C14为去耦电容。建议使用参数为 0.1μF(100 nF)、10-20V的电容。该电容应具有低ESR,谐振频率为20MHz 或更高。建议使用陶瓷电容。去耦电容应尽可能靠近引脚。建议将电容与器件放置在电路板的同一层。如果空间受限,可以使用过孔将电容放置在 PCB 的另一层,但请确保从引脚到电容的走线长度小于0.25英寸(6mm)。
由于电路只使用了MCU的少数PIN,为了防止外部干扰导致MCU工作异常,要么将没有使用的PIN通过电阻下拉到GND,要么通过软件设置为MCU内部下拉到GND。由于采用软件下拉到GND可以节约器件和利于PCB的Layout,最终采用此方案。
4 数码管电路
由于3个LED只能显示有效的信息,比如刷写程序的进度条等信息无法通过LED实时进行显示,那么设计必要的显示电路就显得尤为重要。数码管显示相对于LCD等液晶屏的显示,不但成本低,而且软件易编写。具体电路如图5所示。
图5 数码管驱动电路
数码管驱动芯片选用CH452,它内置时钟振荡电路,可以动态驱动 8 位数码管或者 64 位 LED,具有 BCD 译码、闪烁、移位、段位寻址、光柱译码等功能;同时还可以进行 64键的键盘扫描;CH452 通过可以级联的 4 线串行接口或者 2 线串行接口与单片机等交换数据;并且可以对单片机提供上电复位信号。
CH452 对数码管采用动态扫描驱动,顺序为 DIG0 至 DIG7,当其中一个引脚吸入电流时,其他引脚则不吸入电流。CH452 内部具有电流驱动级,可以直接驱动 0.5 英寸至 1 英寸的共阴数码管,段驱动引脚 SEG6~SEG0 分别对应数码管的段 G~段 A,段驱动引脚 SEG7 对应数码管的小数点,字驱 动引脚 DIG7~DIG0 分别连接 8 个数码管的阴极;CH452 也可以连接 8×8 矩阵的发光二极管 LED 阵列;CH452 可以改变字驱动输出极性以便直接驱动共阳数码管(不译码方式),或者通过外接反相驱动器支持共阳数码管,或者外接大功率管支持大尺寸的数码管。
数码管选择SMA420564共阴极数码管。MCU通过 相 关 指 令 控 制CH452的PIN4(ADDR)、PIN5(SDA)、PIN6(SCL),然 后CH452的PIN11(DIG3)、PIN12(DIG2)、PIN13(DIG1)、PIN14(DIG0)来控制SMA420564的4位数码管的哪一位,而PIN18~PIN24来控制7段中哪一段进行点亮。
5 PCB排版
原理图的绘制后,需要通过专用软件进行PCB的排版。排版的基本原则为分模块布局,并且美观。由于本设计器件较少,但是由于对尺寸空间要求尽量小型化,最终采用双面板进行PCB的排版。
6 软件设计
升级逻辑除了能完成更新程序的基本功能外还应当考虑其通用性和对原控制程序的影响。LIN通讯在实际应用,各整车厂具体的协议互不相同,并没有统一的行业标准。且各厂也未就升级在协议中做相关定义,因此,如果对车厂LIN协议进行扩展把升级功能加于其中,势必会破坏原协议。当整车厂进行协议调整或未给出LIN通讯网完整协议时对车厂协议进行扩展,存在引发协议冲突的风险。基于以上因素的考虑,对原APP程序增加一引导程序BOOTLOADER,采用BOOTLOADER+APP这样的结构形式,把升级功能放入到BOOTLAODER中,由BOOTLOADER再去加载APP应用程序。这样做即不会破坏原APP程序,同时双具有通用性强的优点。
当上电后BOOTLOADER有100ms的时间用于等待升级握手数据帧,如此时间段内没有收到上位机发来的有效握手数据帧,进入APP引导逻辑;否则进入到APP升级逻辑。
APP升级逻辑:首先对FLASH中的数据进行检查,如其中数据能通过校验,则进行APP引导,否则回到升级逻辑。
APP升级逻辑:当收到有效升级握手数据帧后进行升级准备,此时擦除FLASH中的数据,并在应答数据中通知上位机擦除动作是否成功。如成功擦除FLASH中的数据,此时上位机会把整个APP分解为多个数据帧依次发送过来,此时升级逻辑完成对接收到的数据的校验和写入数据,并在应答数据帧中通知上位其操作的结果。当APP升级数据发送完成后,升级逻辑完成对FLASH中数据的校验,并在应答数据帧中通知上位机校验结果。同时升启。
具体软件框图如图6所示。
图6
7 结论
由于整车OBD接口不能通过LIN总线来对ECU进行软件升级。通过基于LIN总线在线更新程序设备可以避免新能源汽车相关ECU出现软件BUG需要拆卸ECU的操作,有效地实现软件的更新。
本文以Microchip的dsPIC33CK128MP505为系统平台,通过ATA663231实现和整车的LIN总线通信。并通过BOOTLOADER+APP的形式实现软件的在线更新。