APP下载

基于CAN总线的新能源汽车ECU控制器程序刷写系统设计

2018-04-18吴进军方继根王西峰赵锦涛李晨风谢志鹏

机电产品开发与创新 2018年2期
关键词:转码校验编程

吴进军,方继根,王西峰,赵锦涛,李晨风,谢志鹏

0 引言

随着新能源汽车的发展,越来越多的车载ECU被应用于新能源汽车电子控制领域。同时,由于新能源汽车具有繁多的品种和匹配测试需求,使得车载ECU程序刷写越来越被主机厂所重视,程序刷写的速度和可靠性要求一再提高。

其对于开发的需求也在上升[1],而对于一个主机厂而言,开发一套自己的软件刷新的基础软件,用于车辆的验证和重复开发,可以大大降低其开发的成本和时间[2]。

在CAN总线的发源地德国,宝马、奔驰、保时捷、奥迪和大众等全球知名厂家一起成立了HIS(Hersteller Initiative software)技术联盟,制定了自己的刷新标准。国内的主机厂根据相应的国际标准,或采用统一的标准,也有指定第三方软件开发商(Vector、KPIT、Mentor等)开发基础的Flashloader软件[3]。而在国内,由于汽车电子技术起步的原因,早期并没有主机厂进行相关方面的研究,近一两年来,也逐步出现了针对各类单片机的CANBootloader的实现[4],但并没有形成商业化的软件,软件本身也并不完善。

CAN总线作为最为常见的车载通讯方式,具有通讯速率高,可靠性高等特点。

1 CAN烧录系统设计

1.1 硬件系统设计

整个系统在通讯过程中采用了两种通讯方式,第一种是基于电脑可以识别的USB通讯,第二种是应用于车载OBD所能够接受的CAN通讯,因而,在二者之间,采用了USB转CAN的设备进行信号的转化。此USB转CAN的设备支持0K~1000K的波特率范围、拥有2000帧的内部缓存、支持CAN帧的掩码屏蔽、扩展帧和标准帧的切换。因而可以得到如图1的通讯结构图。

图1 通讯结构图Fig.1 Communication structure diagram

1.2 软件系统设计

ECU的烧录过程大致可以分为三个环节。第一个环节是数据传输,指的从ECU和PC建立通讯到ECU的FLASH部分(程序段)数据从PC传送给单片机的环节;第二个环节是数据校验,通过数据校验的方式,判断传输数据的正确与否;第三个环节是FLASH的擦除和写入,将通过第二个环节校验成功后的数据放入对应的FLASH区域进行编程。

由于应用对象的单片机为XC2000系列,其具有内部CAN-BSL是固化的,无法修改的特点。且根据官方提供的源码中表明,其不存在数据校验等功能,且其对起始帧的帧消息限制仅仅为第一个字节和第二个字节均为0x5555,不满足SAE J1939的协议。同时在非专用网络上,这种不限制帧ID的方式,会导致其响应其他恰好有数据位0x5555的非起始帧[5]。因而是需要对其编程方式进行重新设计,在单片机的FLASH区域,单独开辟出一块区域来用于BootLoader。整个刷写的原理如图2所示。

图2 CAN刷写原理图Fig.2 CAN brushing schematic diagram

在XC2364单片机Bootloader区域内,PC端通过握手和数据传输的方式,向XC2364单片机的PSRAM段传输数据。在单片机执行PSRAM段程序时,通过PC端数据传输的方式,将单片机的用户段数据传输给单片机并写入用户段区域。

由于XC2000系列的单片机的RAM有限,同时为了方便其FLASH的编程,因而,选择单页编程,即将用户段数据程序一次编程128个字节的方式。同时考虑到代码的更新时间与用户代码的干扰,选择在上电后的几秒内检测单片机的用户段数据更新。此外还可以根据需要,设置单片机的跳转来实现ESC程序的实时刷写。由此,我们可以得到整个烧录的流程为图3。

图3 CAN烧录流程Fig.3 CAN burning process

其中深色箭头为CAN帧传输的方向,黑色箭头为程序的执行方向。其中,深色箭头由单片机往PC机传输的大多是响应报文,包括肯定响应和否定响应,由PC机发送给单片机的大多是数据报文,也有部分响应报文。其中,在FLASH写入环节的CRC校验过程是由上位机发送校验数据,单片机根据前面的数据进行计算,计算完成后进行比对,比对通过后发送CRC通过的响应。

2 数据操作

对于单片机数据的操作分为两种,第一种是数据转码,第二种是数据校验,数据转码应用于将编写获得的程序代码数字转化为ECU控制器内应当具有的二进制码规律,数据校验则是指在传输过程中的数据校验操作。下面将就两部分进行介绍。

2.1 数据转码

这里的文件转码主要指的是将keil编译完成的H86文件,转码成可以被用于CAN发送的data数组。而对于hex(H86)文件,其每一行均满足以下规则。因而,可以根据这一规则将数据进行转化。整个转化的思路见图5。其中,判断是否有效包括了有效数据表示符和末尾的和校验值比对两个环节。对于整个hex文件的转码我们可以采用流程图的方式进行展示。

图4 H86文件解读规则Fig.4 H86 file interpretation rules

图5 H86文件解读流程Fig.5 H86 Document interpretation process

2.2 数据校验

整个刷写流程的数据校验为两种,一种是和校验,一种是CRC校验。

由于软件的编写环境是LabVIEW,为了方便实现数据校验,PC端在编写和校验和CRC校验的时候采用了调用库文件的方式:先利用VC完成了动态连接库文件的编写,再通过LabVIEW完成库文件的调用。

和校验是一种比较简单的校验方式,其适用对校验数据的准确度不是很高,或者数据量不是很大的场合。其原理是对所有需要校验的数据按字节进行不计进位的加合,对加合的结果进行比对。

CRC校验即循环冗余校验码 (Cyclic Redundancy Check)。其通过多项式计算进行结果获取。其具体算法是约定一个多项式即生成多项式。将生成多项式写为2进制码,将信息码右移生成多项式项数-1位,用生成多项式去除信息码移位后的结果。得到的余数就是CRC掩码。

此处的生成多项式采用CRC CCITT。CRC校验相对较为复杂,因而比较适合小批量的数据进行精确校验,以节省校验时间。同时,为了加快CRC校验的速度,采用了查表法进行CRC的计算。

综合考虑软件的复杂程度和两种校验的特点。最终选择在数据转码时采用和校验,最终数据全部传输完成时进行和校验,单页数据传输时采用CRC16 CCITT校验。这样,既充分发挥了两种校验的特点,保证了校验的合理性,又照顾了数据传输的效率。

3 内存单元操作

3.1 Memory分区

对于英飞凌的Memory,其官方文件—XC2000系列单片机应用手册(以下简称应用手册)[6]中有详细的介绍。在这里,将只介绍与编程相关的部分。英飞凌的XC2000与XE166系列单片机均采用“冯诺依曼”体系架构,这意味着代码和数据的访问使用同一个线性地址空间。单片机总的可寻址空间为16MB,分256段,每段的大小为64KB。

将只采用片上存储,且操作的主要对象为FLASH和PSRAM。因而根据FLASH段的不同功能,将FLASH段分为BootLoader区和用户区。由于有一部分区域被BootLoader区给占用,用户区的起始地址从原先的C00000变为了 C10000,因而整个线性地址空间的分区如图6所示。

图6 单片机memory分区示意图Fig.6 Schematic diagram of single chip memory zoning

利用C00000-C10000作为ECU的BootLoader区域,一方面是因为单片机上电复位的入口在C00000处,使得单片机在上电复位后能够执行BootLoader的代码,另一方面也避免了C09000-C10000地址保留段的影响。同时,现有的ESC控制器的程序总代码量在250K左右,而此单片机的FLASH段的总大小为832K,占用的BootLoader区域的大小为64K,因而可以保证尽管有区域被Boot-Loader所占用,仍然能满足用户正常的代码空间需求。

3.2 数据的擦除和写入

英飞凌的应用手册对其FLASH的编程有所介绍,此外,其自带的BootLoader也在其官方的文件[7]中进行了细说。下面以应用手册中的内容进行FLASH擦写部分的介绍。

首先,由于FLASH的自我保护,当前正在执行FLASH的某个模块时,无法对其进行写操作。官方的自带的BootLoader执行时,其代码的执行区域并不是用户可以操作的FLASH模块,因此FLASH是可以操作的。因而当采用自己的BootLoader时,需要寻找一块并不属于FLASH的区域进行代码的执行。而在XC2000系列的单片机中,其可以执行代码的区域为程序FLASH/ROM以及程序SRAM(PSRAM)。而由于SRAM的特点,其掉电后,数据丢失。因而,需要先通过FLASH区段的程序将PSRAM段的程序进行接收后再跳转至PSRAM中执行。

其次,根据应用手册的描述,XC2000系列单片机的片上FLASH的结构可以划分。该FLASH存储器有4个阵列,前三个阵列为256K,最后一个阵列为64K,前3个阵列每个由64个扇区组成,每个扇区由32页组成。一个扇区的大小为1K,一页的大小为128字节。由于单片机的片上RAM有限,不适合大规模存储数据,同时为了操作简便,本文中采用了按扇区擦除的,按页进行编写的方式。

整个FLASH的操作参考应用手册的汇编历程。扇区的擦除根据应用手册是一个三周期命令。页编程分为三步:进入该页,加载该页数据,编程该页。其中,进入该页是对页面操作最初的步骤,加载该页数据为将数据加载到该页FLASH内,编程该页则是将数据固化,保证数据在掉电后不会丢失。

4 结论

根据新能源汽车实用的需求,提出了一种基于CAN总线的程序刷写方式,并根据英飞凌XC2000系列单片机,完成了刷写系统的软硬件设计。与传统的车载ECU刷写方式相比,具有较高的刷写速率,有一定的ECU刷写保护功能,并且支持ECU的外部升级,方便生产、匹配测试人员对ECU进行维护。经过软件测试,所设计的基于CAN总线的ECU程序刷写方式具有较高的可靠性,可以应用于新能源汽车车载ECU的程序开发、维护、升级。

参考文献:

[1]Joao H.Silva,Visteon Corp.Advanced Firmware Device Manager for Automotive:A Case Study.

[2]王涛.基于CAN诊断汽车控制器刷新软件的设计与实现[D].成都:电子科技大学,2011.

[3]戴胜晓.CAN总线技术在商用车上的设计应用 [M].城市车辆,2006.

[4]陈彤,黄立梅.一种用于汽车电控单元 CAN Bootloader的设计与实现[J].汽车实用技术,2016.

[5]黄全安.汽车自动变速系统控制器开发平台研究[D].北京:清华大学,2011.

[6]InfineonTechnologies,XC2300ADerivativesUser’sManual V2.0,2009-03[EB/OL].

[7]Infineon Technologies,XC2000/XE166 Family16-bit Microcontrollers AP16164 Flash Progamming via CAN BSL(Bootstrap Loader) Application Note V1.0,2009-10[EB/OL].

猜你喜欢

转码校验编程
使用Excel朗读功能校验工作表中的数据
天津台新闻云系统外来视频文件转码方案
编程,是一种态度
元征X-431实测:奔驰发动机编程
视频转码技术在广播电视中的应用研究
编程小能手
纺织机上诞生的编程
视频转码软件的需求和框架分析
炉温均匀性校验在铸锻企业的应用
电子式互感器校验方式研究