李明君,于 翔,夏 雨,王志福
(1.同济大学 a.电子与信息工程学院;b.汽车学院,上海 201804;2.大陆泰密克汽车系统(上海)有限公司,上海 201807)
车载诊断(OBD,On-Board Diagnostic)系统是汽车电子的一个重要的组成部分,它提供了外部电子设备与汽车的计算机网络的标准接口。在汽车中的电子产品占比逐步增长的趋势下,车载诊断系统对车辆的重要性也越来越大。在车辆的诊断过程中,尤其是车辆零件部件的供应商所进行的测试中,ISO 14230-2规范[1]规定了被测试的ECU(电子控制单元)需要支持基于ISO-K协议的诊断接口。该协议被广泛应用于各车载电控单元的诊断系统中,它同串行标准接口RS232技术一样[2],都是基于典型的通用异步串行通信电路。
目前的ISO-K诊断系统与上位机之间的通信连接大都采用串口(例如RS232标准串口)转ISO-K的方式。随着笔记本电脑的更新换代,轻量化和便携化逐渐成为趋势。RS232接口逐渐被很多笔记本厂商减配,从而采用更加高效的USB接口,这就造成了原有的诊断系统同测试终端接口不匹配无法建立通信。同时,USB接口越来越成为市场的主流,与RS232接口的数据传输速率相比,USB凭借差分特性能够达到更高的传输速率和更强的抗干扰性能。
在测试终端与车载电气网络的连接中,不仅要考虑传输速度的要求,还要兼顾对连接双方的电气保护。在车辆的诊断过程中,被测件可能会接受来自外部电源的多个电压脉冲,其中有些波形的电压高达上百伏,而且波动较大。一方面会导致诊断信号受到干扰,从而无法获得可靠的被测件状态信息;另一方面,剧烈的电压波动还可能会通过测试端口对测试终端造成破坏。因此,如何实现基于ISO-K协议的USB接口的诊断系统,就成了行业内亟待解决的技术问题。本文提出了一种应用于OBD系统的ISO-K诊断适配器,基于ISO-K协议和UART协议设计了相关的电路图并与前人的解决方案[3-5]进行了对比,通过实验验证了该适配器在诊断过程中能够稳定工作。
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)通常称作UART[4],是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用2根信号线(RX和TX)就可以完成通信过程,也称为异步串行通信。图1为UART协议的示意。
图1 UART协议示意
UART能够在双方未通过外部时钟进行同步的情况下就能够完成通信过程,这主要依赖于UART规定了其传输的帧格式和波特率,收发双方需要按照固定的格式和速度进行发送和接收数据[6],UART的帧格式定义如图2所示。
图2 UART数据帧格式
其中,UART通信的空闲状态高电平数值为1,在传输字符之前先发出一个逻辑0信号(起始位),表示传输字符的开始。数据帧中的其余位的意义如下:
1) 数据位:可以是5~8位逻辑0或1,如果在没有校验位的情况下,传输的数据位可以到达9位。可以传输的数据包括ASCII码(7位),扩展BCD码(8位)。LSB和MSB分别代表传输的数据中的最低位和最高位。
2) 传输校验位:由于在传输过程中电平会受到电磁辐射、误匹配的波特率,以及传输距离的影响,因此接收端在接收到数据后会对每一帧数据中的0和1的个数进行计数。这便是传输校验位的作用。如果传输校验位为0,则数据帧中1的个数应该是偶数;如果为1,则为奇数。如果接收端的计数结果满足这一规定,那表明传输过程中没有发生数据丢失,反之,则数据在传输过程中被损坏。
3) 停止位:它是一个字符数据的结束标志。
4) 空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送。
ISO-K协议是在UART协议基础上的一种车辆内通信系统中的协议,通常用于ISO 14229-1[7]和ISO 15031-5[8]中所规定的诊断过程。基于ISO-K协议的K线是一种双向的通信链路,除了能够在诊断过程中为诊断终端和ECU提供通信之外,还常常被用于初始化阶段地址信息的传达和快速初始化情况下从外部测试设备到ECU的唤醒[9]。由于直接将测试终端通过RS232串口接入基于ISO-K协议的设备中的诊断方式缺乏检查一致性和验证功能等高级属性,同时在诊断过程中,测试人员需要知道被测件距离其极限工作点的距离,而以上功能都是通过RS232串口的直接连接所无法达到的。在基于ISO-K协议的异步传输过程中,发射机和接收机通过寄存器起止比特位的设置从而实现同步,在诊断过程中不需要额外的时钟线路,能够做到单线通信。与RS232串口不同,ISO-K类似于一个总线系统,通过寻址,它可以与各种各样的控制装置进行通信。标准的通信速率为10.4 kbit/s,在一些特殊的情况下,例如向Flash中写入软件程序的时候可以达到115.2 kbit/s。
基于ISO-K协议的诊断的过程主要分为两部分,分别是初始化过程和数据传输过程。其中,初始化过程十分重要,在ISO 9141[10]和ISO 14230-1[11]中分别定义了ISO-K通信协议。尽管ISO 14230-1正在逐渐取代ISO 9141成为普遍使用的协议,然而在相当长的一段时间内,两者还会共同存在。对于每一个诊断服务端(ECU中用于诊断的部分)只能支持上述的其中一种协议,因此,诊断客户端(一般为PC终端)需要通过初始化来确定服务端所使用的协议版本,同时确定两者通信所使用的数据格式和波特率等信息。
ISO 14230-2为ISO-K协议分别定义了两种不同的初始化模式,一般5 bit/s模式更为常用,其流程如下:
1) 地址字段传输。客户端向服务端以5 bit/s的速度发送地址字段0x33,地址字段为8 bit,再加上起始位和结束位各占1 bit,因此,该过程耗时2 s。
2) 地址字段验证。ECU中的服务端会对收到的字段进行验证,该过程耗时在20~300 ms。
3) 同步字段传输。ECU服务端会向客户端发送用于同步的字段0x55,发送的格式和波特率都由服务端指定,从而通知外部的测试设备(客户端)新的通信波特率。
4) 同步字段验证和新波特率设置。客户端对接收到的同步字段进行解析并设置更新后的波特率。该阶段耗时在5 ms之内。
5) 关键字节传输。服务端在发送同步字段之后等待5~20 ms,等待客户端设置新波特率完毕之后,会发送2个关键字节。两个关键字节决定了该次通信采用何种协议。如果采用ISO 2141-2协议,2个关键字符分别为0x0808或者0x9494;如果发送的字符为0x8FE9,0x8F6B,0x8F6D,0x8FEF,则通信应选用ISO 14230-4所规定的ISO-K协议。
6) 关键字验证。客户端会对收到的关键字进行验证,从而选择测试设备所要使用的ISO-K协议。此外,客户端还需要获取关键字所使用的头部字段格式以及2个关键字的间隔,从而保证2个关键字的间隔在规定的范围之内。
7) 异或关键字传输。客户端会在25~50 ms的等待之后将服务端发来的关键字进行异或后发出。
8) 异或关键字验证。服务端验证接收到的异或关键字。
9) 同步完成。在等待一定时间之后,服务端会将初始化字符进行异或发送给客户端作为做好通信准备的信号。至此,初始化在服务端就结束了。
10) 异或初始化字符验证。客户端会对接收到的异或初始化字符进行验证。验证之后,初始化过程在客户端结束。
这种初始化方式步骤繁琐,速度较慢;另外一种方式为快速初始化,只需要一次收发过程,因此得到了越来越广泛地应用。
基于ISO-K协议传输的数据帧包括3个部分:数据头、协议数据和校验和,其结构如图3所示[12]。
图3 ISO-K协议数据格式
2.3.1 数据头
格式字符(FMT,Format byte):1个格式字符包含6位长度位和2位地址位。在进行ISO-K通信之前,程序通过初始化过程中的关键字的头部字符获得其格式。在头部字符中,最高和次高2位组成了地址位。00表示头部字符中不包含地址信息;01表示使用ISO 9414-2规范所规定的ISO-K协议;10表示物理层寻址;11表示多个客户端和一个服务端建立了连接;后5位长度位标志了不包括头部字符和校验和的其余字符的长度。通常情况下,一个数据帧的长度在1~63个字符。如果长度位为0,则说明传输的数据长度超过了63个字符。
目标地址字符(TA,Target Addressing byte):头部字符中的目标地址字符指的是消息接收端的识别符。这一字符通常和源地址符配合使用。目标地址字符通常分为两种:一种用于物理寻址,另外一种用于功能寻址。物理寻址指的是一对一通信情况下的寻址方式。而功能寻址则指一对多通信情况下的寻址方式。这些地址在ISO 9414,ISO 14230-2,ISO 14230-4等国际标准中都进行了严格的规定。通常情况下,目标地址字符只会在通信网络中有多个节点出现的时候才会启用,而在一对一的单点通信的情况下,此标识符会被省略。
源地址字符(SA,Source Address byte):源地址字符是消息发送端的标识。它通常被看作是一个物理地址。和目标地址字符一样,也仅仅用于多点通信的网络中。
长度字符(LEN,Length byte):长度位在消息长度不超过63个字符的情况下不会出现,也就是说,在短消息的情况下,消息的长度由FMT中的6位长度位来表示。而只有当消息的长度超过63个字符的时候,FMT中的第6位长度位为0,长度字符表示整个消息的字符个数。通常情况下,不是所有的服务端都会支持这一字符。在初始化阶段,服务端必须通过关键字符来告知客户端自己是否支持这一长度字符。
2.3.2 协议数据
协议数据就是K总线上传递的数据信息。它通常为1~63个字符或者1~255个字符。其中第1个字符为请求的服务标识,其余的字符内容取决于具体的服务。
2.3.3 校验和
校验和字符位于消息的尾部,它的长度为1个字符,值为消息中除了校验和字符之外所有字符的总和。
适配器的功能主要由EMC保护、ISO-K接口转换UART电路以及UART电路转USB电路等三大模块组成。EMC保护模块主要用于车载电控的电压波动对于上位机(PC端)的损坏,ISO-K接口转换UART电路主要目的是将ISO-K协议通过IC芯片转换为UART通信协议,UART电路转USB电路主要目的是将UART电路协议转换为USB协议的接口信号。
根据前述的UART协议以及ISO-K协议,重新设计并制造了一款基于ISO-K协议的诊断适配器,优化了之前的技术设计方案,实现了适配器的小型化和轻量化的新型设计。
3.2.1 整体架构
与原本的技术方案需要将TTL电平作为中间单元的转换不同,该技术方案摒弃了作为中间转换的RS232接口,采用直接将ISO-K通过通用的UART电路转换为USB电路。同时,在K线与车载电控单元的诊断接口之间同样设置了电气隔离保护单元,以确保最极端的情况也不会对适配器造成损坏,乃至造成上位机PC端的USB端口的损坏。
图4 技术方案架构
3.2.2 ISO-K的UART芯片选型
该芯片需要能够将K线的双向信号准确并且可靠地转化为满足UART协议的TX和RX信号,为满足该功能需求选择L6937D型芯片。该芯片提供了一整套的满足ISO9414标准的总线串行通信服务,包括一个双向的K线接口,一对TX,RX接口。该芯片的优势还表现为在针对过压、短接、温度过高或者正负极接反等意外情况时采取的保护措施,以及在抗扰性方面,对每一个针脚上的最大容忍干扰可达±0.2 mJ,通信速度最高可达50 kbit/s。K线端为高电平时的电流小于120 μA,而在低电平时的待机电流仅为1 μA。此外,从睡眠状态到唤醒状态之间的时间延迟小于5 μs。芯片的外围电路设计如图5所示。
图5 L6937D芯片外围电路
3.2.3 UART转USB的芯片选型
该芯片需要满足将UART协议的TX,RX数据快速地转换为能够被USB串口读取的格式。基于该功能需求选用FT230X芯片作为主要芯片。该芯片是一款专门为小型电子设备设计生产的UART串行数据和USB数据相互转换的专用芯片。该芯片内置时钟,无需外部晶振,传输速度为300 bit/s~3 Mbit/s,拥有512 bit的缓冲空间区域,因此能够实现较大的传输容量。同时,该芯片采用和USB相同的5 V供电,可直接从USB端进行取电。芯片的外围电路如图6所示,其中R1和R2,R4和R5为网络终端电阻用于匹配网络差分信号;R3为一个0 Ω电阻,是磁珠的预留焊盘,而磁珠主要用于过滤高频信号,提升适配器的EMC性能,如需要可将0 Ω电阻换成磁珠。
图6 FT230X芯片外围电路
3.2.4 总电路设计图
将车载电控单元接口设备模块、EMC保护电路、ISO-K接口转换UART电路、UART电路转USB电路以及USB接口等模块串联在一起的设计方案如图7所示,由于电气隔离功能集成在了L6937D的芯片中,从而实现了更加紧凑的系统设计,实物如图8所示。
图7 技术方案总设计
图8 USB转ISO-K线
在性能测试环节,分别采用以RS232和USB为接口的诊断适配器对同一内容文件大小为2.35 MB的软件进行刷写试验。试验结果表明,以RS232为接口的适配器的刷写时间为235.3 s,而本文设计的USB接口适配器仅用时217.5 s,刷写速率提高了7.56%。同时,本文所设计的USB接口适合于目前所有电脑,并且相比于RS232接口的适配器质量更轻、体积更小。
在如今的测试设备逐渐淘汰RS232串口的技术背景条件下,原先设计需要在RS232接口后级联一个RS232转换USB接口的设备才能实现应用需求。随着系统复杂性的上升和空间的扩大,在诊断系统发生故障时,给故障的排查带来诸多不确定因素。USB数据的传输速率可以高达480 MB/s,远高于RS232总线的数据传输速率。另外,新的车载电控单元诊断系统USB适配器的设计,将电气隔离模块集成到ISO-K和UART的转换芯片中,减小了适配器的体积。新的设计方案实现相同的需求,只用了2个芯片,系统的复杂度大大简化,而且传输速度也有明显提高。该方案凭借其小巧的体积和较轻的质量以及较高的传输速率将大大改善工程应用的效率。