计算机系统应用教程网站

网站首页 > 技术文章 正文

基于CAN总线的Bootloader设计与实现

btikc 2024-12-14 10:07:22 技术文章 19 ℃ 0 评论

摘 要: 使用BDM工具下载或升级应用程序,不仅麻烦而且稳定性也不高。采用在线更新的方法,设计并实现了一种基于CAN总线的Bootloader。介绍车载网络通信与诊断服务的实现、Bootloader的设计以及其在车载控制单元的实现,并在此基础上,提出最小Bootloader的概念,可以有效提高程序的灵活性。实验结果证明,Bootloader能正确引导加载程序的运行,准确方便地实现应用程序的下载和更新,在软件开发和测试过程中能够极大地提高工作效率,而且Bootloader的稳定性也很高。还能将网络层和UDS诊断服务部分方便地移植到其他芯片上,为后序的软件开发与测试提供了方便。

0 引言

为了避免在更新程序的过程中拆除ECU,通过串行总线、SD卡或USB口以及相应的通信协议,将应用程序更新到单片机中[1]。在更新过程中,系统不免受到外界干扰和软件故障等影响,因此可靠性成为Bootloader开发工作中首要考虑的因素。同时,Bootloader也存在软件升级的问题,现行的方案并不完善。为此,本文提出最小Bootloader以保证程序的灵活性,为了应对程序更新出错的意外状况,提出Stay-In-Boot的概念,增强程序的稳定性。

1 Bootloader部分

1.1 Bootloader原理

Bootloader的主要工作是初始化硬件设备、分配内存映射等,构建良好的软硬件程序,并决定升级应用程序还是继续运行原有的应用程序[2]。如果升级应用程序,则擦除原有程序数据并通过CAN网络把更新的程序下载到Flash中,再拷贝到RAM中运行;如果继续运行原有的应用程序,则把Flash中的应用程序数据拷贝到RAM里,程序跳转到地址0x4000(仅针对S12G192而言)处运行。

1.2 S12G192单片机的内存空间

S12系列单片机支持两种寻址方式:局部地址寻址和全局地址寻址。只有在对Flash进行操作时才会有全局地址的概念,对RAM和EEPROM进行操作时使用局部地址就可以了。

Bootloader应该放在受保护的Flash中,但不是所有Flash都可以设置保护,所以一般放置在0xc000~0xfeff区间内。

2 ISO15765协议[3]

按协议内容和体系结构实现来进行划分,ISO15765协议共分为4层,分别是应用层、网络层、数据链路层和物理层。应用层诊断协议设计应遵循ISO14229-1或ISO15765-3,应用层规定了具体诊断服务的服务标识符(SID)及后面所携带的参数格式与内容。应用层数据经过网络层实现数据的传输、打包、解包,数据传输时以单帧和多帧的方式按ISO15765-2进行传输。数据经数据链路层时应按ISO 11898-1转化为有效的CAN数据帧,最后经物理层实现与另一节点的通信。被诊断电子控制单元(Electronic Control Unit,ECU)收到请求报文后,再按协议体系结构进行逐层解析。

3 基于ISO15765的Bootloader设计与实现

单片机中的Bootloader程序必须设计得尽量小,因为ECU中有限的Flash容量是由应用程序和Bootloader程序共同占用的。本文将Bootloader分为8大部分,如图1所示。下面详细介绍框图内各个组件的设计与实现。

3.1 CAN Driver的设计与实现

CAN驱动完成CAN的底层配置,包括CAN初始化,CAN的发送和接收函数。CAN初始化又分为关看门狗、屏蔽所有中断、初始化PLL和时钟等[4]。

3.2 ISO15765协议的实现

ISO15765协议的实现主要包括udsDiag.c、udsDiag.h、udsNWL.c和udsNWL.h 4个文件的配制。udsDiag.c和udsDiag.h用于提供诊断服务[5],udsNWL.c和udsNWL.h用于提供网络传输服务。udsNWL.c中最重要的是从网络层发送和接收数据的两个函数。udsDiag.c对每个服务进行响应。

3.3 Flash驱动的实现

在Flash写入或擦除数据之前,必须验证操作的合法性[6],在S12G192中通过配置FPROT寄存器来保护Flash不受非法的擦写。在下载应用程序时把Flash Driver下载到ECU的RAM中,应用程序下载完成后再把RAM中的数据清除,ECU进入正常操作模式。这样不仅可以保护Bootloader,还能节省Flash内存空间,因为在大多数微控制器平台中Flash存储的代码不能对Flash擦除或编程[7],至少是对与代码在同一页的Flash不能这样操作。

3.4 安全模式的实现

安全模式提供安全访问和下载验证,本文通过实现ISO15765[3]中的安全访问服务(服务号为0x27)来提供下载验证[8],具体流程是上位机向ECU发送requestSeed来申请一个Seed;得到ECU返回Seed后,上位机将Seed进行处理得出结果Key发送给ECU,如果Key正确,则得到访问ECU的授权。

3.5 最小Bootloader

考虑到Bootloader后续升级和同一系列芯片移植的需求,通过BDM或P&E烧写进芯片的Bootloader仅完成传送和接收数据的这一基本需求,Flash擦写、部分诊断服务和加锁等程序数据通过网络层传送到单片机写进指定的内存空间,这一举措不仅方便Bootloader实现增量更新,还能提高Bootloader的可移植性。

3.6 Bootloader主程序

3.6.1 初始化流程

单片机复位后,在调用主程序之前,进入Start12.c源文件。执行Init(void)函数,完成的操作有清空RAM空间,把初始化数据从ROM拷贝到RAM等[9]。

3.6.2 上电启动流程

ECU上电或者复位后,程序从0xfffe处开始运行[10],先进行一些基本初始化操作,再根据有无外部编程请求来决定进入Bootloader还是应用程序。但是如果升级过程中出现意外导致升级失败,则再次上电时可能无法进入Bootloader。为了避免此类情况的发生,提出Stay-In-Boot的概念,也就是在上电复位后即使存在应用程序,也强制单片机进入Bootloader。设置一个wait timer,在wait timer没有超时的情况下,如果收到一个Stay-In-Boot CAN Message,则ECU停留在Bootloader中;如果wait timer过期了,而且应用程序有效,则进入应用程序。这样可以有效避免更新程序时出现意外导致无法重新刷新的情况,保证了程序的稳定性。

3.6.3 主循环流程

ECU进入Bootloader后,设置全局变量waitTime,每次进入收发中断将waitTime减1,在主程序的for循环中不断检测waitTime的值,如果为零,则跳转到应用程序启动地址,否则继续检测CAN网络上有无数据可接收。为了保证CAN网络上的数据能够完整接收,本设计将waitTime设置得很大,设置为5 000。

3.7 测试及结果分析

用BDM编程工具[11]将实现的Bootloader烧录到S12G192[12]单片机中,随后移除BDM,将外部开关设为启动加载模式,并上电。通过上位机发送编写完成的“*.s19”文件,通过CAN网络把数据流发送到单片机中,并运行。多次烧录均没有出现数据丢失的情况,能完整地解码上位机发送的数据流,而且烧录后也能成功下载应用程序,应用程序能正常工作,也能持续响应PC端上位机的诊断请求。

Bootloader的性能指标主要在稳定性,另外本文也提出灵活性给开发工作带来的好处。在板子已烧写了最小Bootloader的前提下,通过上位机传送Flash驱动程序和应用程序的s19到单片机(如图2所示),通过CANoe检测到应用程序发送的报文[13](如图3所示),证明最小Bootloader能正确高效地运行,在需要扩展Flash时Bootloader将不需要改变,更改上位机发送的Flash配置文件即可。

另外,本文采用的是传输S-record文件,这有改进之处,通过实验证明,直接传输hex文件比S-record快近一倍,因为Bootloader不再进行文件的解析,解析工作交给PC端上位机。这一改进可有效提高量产效率。

4 结论

本文设计并实现了基于ISO15765协议的Bootloader,提出使用最小Bootloader来优化程序,增强程序的灵活性;开发过程中增加Stay-In-Boot状态,防止刷新出错时出现死循环,提高了程序的稳定性。经测试证明Bootloader能正确引导程序运行,下载数据完整、无误,没有出现数据丢失、错误等现象,在高负载下也能准确、高效地实现ECU端程序的在线下载和更新。

参考文献

[1] 王亚刚.嵌入式Bootloader机制的分析与移植[J].计算机工程,2010,36(06):267-269.

[2] Cheng Anyu, Yao Yan, Duan Zhihui, et al. ECU loader design of in-vehicle CAN network based on ISO15765[C].International Conference on Information Science and Technology, 2011:1215-1217.

[3] International Organization for Standardization. ISO 15765-2004 road vehicles-diagnostic on controller area network(CAN)[S]. 2004.

[4] 张艳,鲍可进.整车控制器Bootloader的设计与实现[J].计算机工程,2011,37(12):233-235.

[5] 李锐,王晶莹,姚燕,等.基于ISO15765的车载CAN网络诊断设计[J].计算机工程,2012,38(4):35-36.

[6] 李权,鄢萍,贺晓辉.高可靠性的嵌入式软件现场更新方法[J].计算机应用,2010,30(08):2221-2231.

[7] 李婉,李宏.单片机IAP升级方法在血液中分析仪中的应用[J].微型机与应用,2014,33(21):16-18.

[8] 王冬良.基于CAN总线的转向角传感器采集电路设计[J].微型机与应用,2014,33(22):77-79.

[9] 张家田,王金成,严正娟,等.基于CAN总线的井下视频信号采集系统设计[J].电子应用技术,2013,39(12):15-21.

[10] 何海波.基于XC2287M的工程机械ECU设计[J].电子应用技术,2014,40(12):27-29.

[11] 罗峰,孙泽昌.汽车CAN总线系统原理、设计与应用[M].北京:电子工业出版社,2011.

[12] Freescale.MC9S12G family reference manual and data sheet[Z]. 2013.

[13] International Organization for Standardization. ISO 14229-2006 road vehicles——unified diagnostics services(UDS) specification and requirements(v2)[S]. 2006.

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表