《基于BOOTLOADER自更新的ECU固件更新方法.pdf》由会员分享,可在线阅读,更多相关《基于BOOTLOADER自更新的ECU固件更新方法.pdf(11页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 104360877 A(43)申请公布日 2015.02.18CN104360877A(21)申请号 201410577297.8(22)申请日 2014.10.24G06F 9/445(2006.01)(71)申请人同济大学地址 200092 上海市杨浦区四平路1239号(72)发明人张戟 廖治 谢朋甫 朱翔宇彭勇 陈启鹏(74)专利代理机构上海科盛知识产权代理有限公司 31225代理人叶敏华(54) 发明名称基于Bootloader自更新的ECU固件更新方法(57) 摘要本发明涉及一种基于Bootloader自更新的ECU固件更新方法,包括:步骤S1:划分ECU系。
2、统的存储空间;步骤S2:判断ECU系统接收到应用程序更新请求还是Bootloader更新请求,若为应用程序更新请求,执行步骤S3,若为Bootloader更新请求,执行步骤S4;步骤S3:采用增量更新方式更新应用程序代码区的代码,执行步骤S5;步骤S4:Bootloader程序进行整体式自更新Bootloader区的代码,执行步骤S5;步骤S5:重写版本信息区中的相应版本信息,ECU系统复位。与现有技术相比,本发明具有节约时间和成本,保证Bootloader的安全性,以及烧写过程更加高效可靠等优点。(51)Int.Cl.权利要求书2页 说明书5页 附图3页(19)中华人民共和国国家知识产权局(。
3、12)发明专利申请权利要求书2页 说明书5页 附图3页(10)申请公布号 CN 104360877 ACN 104360877 A1/2页21.一种基于Bootloader自更新的ECU固件更新方法,其特征在于,包括以下步骤:步骤S1:运行Bootloader程序,将ECU系统的存储空间划分为用户数据存储区和程序存储区,所述用户数据存储区包括版本信息区和标记区,所述版本信息区包括Bootloader版本信息和应用程序版本信息,所述标记区包括更新请求标记、应用程序有效性标记和引导区交换标记,所述程序存储区包括应用程序更新区、Bootloader区和固定区域,所述应用程序更新区包括应用程序代码区和。
4、中断向量重映射表,所述固定区域包括复位向量重映射表和中断向量表;步骤S2:读取更新请求标记,判断ECU系统接收到应用程序更新请求还是Bootloader更新请求,若为应用程序更新请求,执行步骤S3,若为Bootloader更新请求,执行步骤S4;步骤S3:获取最新的应用程序版本信息,采用增量更新方式更新应用程序代码区的代码,执行步骤S5;步骤S4:获取最新的Bootloader版本信息,Bootloader程序进行整体式自更新Bootloader区的代码,执行步骤S5;步骤S5:更新版本信息区中的Bootloader版本信息或应用程序版本信息,ECU系统复位。2.根据权利要求1所述的基于Boo。
5、tloader自更新的ECU固件更新方法,其特征在于,所述用户数据存储区为EEPROM区域。3.根据权利要求1所述的基于Bootloader自更新的ECU固件更新方法,其特征在于,所述用户数据存储区为Flash区域,ECU系统的存储空间还包括用户数据备份区,为用户数据存储区的信息备份。4.根据权利要求1所述的基于Bootloader自更新的ECU固件更新方法,其特征在于,所述应用程序代码区划分为若干个功能模块,每个功能模块存储不同功能的应用程序代码,每个功能模块具有一个应用程序有效性标记与之对应。5.根据权利要求4所述的基于Bootloader自更新的ECU固件更新方法,其特征在于,所述应用程。
6、序有效性标记分为有效和无效,若功能模块对应的应用程序有效性标记为有效,则执行此功能模块的应用程序代码,反之不执行。6.根据权利要求5所述的基于Bootloader自更新的ECU固件更新方法,其特征在于,所述步骤S3具体为:301:获取最新应用程序版本信息以及对应的最新应用程序代码;302:由中断向量表跳转中断向量重映射表,执行相应中断处理程序,对比最新应用程序代码与现有应用程序代码,获得两者间有变动的功能模块,并使与之对应的应用程序有效性标记为无效;303:擦除应用程序有效性标记为无效的功能模块中现有应用程序代码,烧写最新应用程序代码到擦除后的功能模块,并使与之对应的应用程序有效性标记为有效,。
7、完成增量更新。7.根据权利要求1所述的基于Bootloader自更新的ECU固件更新方法,其特征在于,所述Bootloader区划分为两块Bootloader分区域。8.根据权利要求7所述的基于Bootloader自更新的ECU固件更新方法,其特征在于,所述引导区交换标记分为无效和有效,无效表示不切换ECU系统运行的Bootloader分区权 利 要 求 书CN 104360877 A2/2页3域,有效表示切换ECU系统运行的Bootloader分区域。9.根据权利要求8所述的基于Bootloader自更新的ECU固件更新方法,其特征在于,所述步骤S4具体为:401:获取最新Bootloade。
8、r版本信息以及对应的最新Bootloader程序代码;402:ECU系统复位,由中断向量表跳转到复位向量重映射表,读取引导区交换标记为无效,不切换ECU系统运行的Bootloader分区域,则跳转到原Bootloader分区域,运行现有Bootloader程序;403:擦除与当前Bootloader分区域对应的另一Bootloader分区域,并烧写进最新Bootloader程序代码,引导区交换标记设为有效;404:ECU系统再次复位,由中断向量表跳转到复位向量重映射表,读取引导区交换标记为有效,则跳转切换后的Bootloader分区域,运行最新Bootloader程序代码,引导区交换标记设为无。
9、效。权 利 要 求 书CN 104360877 A1/5页4基于 Bootloader 自更新的 ECU 固件更新方法技术领域0001 本发明涉及一种固件更新方法,尤其是涉及一种基于Bootloader自更新的ECU固件更新方法。背景技术0002 在汽车电子控制单元(ECU)中,不需要加载操作系统内核,引导程序(Bootloader)是用来完成嵌入式系统启动和系统软件加载工作的程序,主要工作是用于应用程序代码的更新,即在线更新。0003 一般对ECU进行程序烧写,常采用整体更新的方式,先对整个存储空间进行擦除,然后将整个新的程序烧写至目标ECU中。但有的时候,前后ECU软件版本改动不大,若仍然。
10、采用整体更新的方式,则更新效率低,且更新时占用的内存消耗也大。0004 同时,在设计Bootloader时,应尽可能保证其功能完善且没有漏洞。但是不能完全消除漏洞存在和考虑不全的可能性。所以还需要考虑Bootloader的自更新功能,以便能够在发现问题或者改善其相关功能后,发布新的版本,通过远程更新的方式,对其进行重新烧写,进一步保证Bootloader的各项性能,从而保证ECU固件远程更新的高效、安全和可靠的执行。发明内容0005 本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于Bootloader自更新的ECU固件更新方法,应用程序的更新采用增量更新方法,只对新版本程序不同于旧。
11、版本程序的部分进行更新,节约时间和成本,而Bootloader自更新能保证Bootloader的安全性,使得程序烧写更加高效可靠。0006 本发明的目的可以通过以下技术方案来实现:0007 一种基于Bootloader自更新的ECU固件更新方法,包括以下步骤:0008 步骤S1:运行Bootloader程序,将ECU系统的存储空间划分为用户数据存储区和程序存储区,所述用户数据存储区包括版本信息区和标记区,所述版本信息区包括Bootloader版本信息和应用程序版本信息,所述标记区包括更新请求标记、应用程序有效性标记和引导区交换标记,所述程序存储区包括应用程序更新区、Bootloader区和固定。
12、区域,所述应用程序更新区包括应用程序代码区和中断向量重映射表,所述固定区域包括复位向量重映射表和中断向量表;0009 步骤S2:读取更新请求标记,判断ECU系统接收到应用程序更新请求还是Bootloader更新请求,若为应用程序更新请求,执行步骤S3,若为Bootloader更新请求,执行步骤S4;0010 步骤S3:获取最新的应用程序版本信息,采用增量更新方式更新应用程序代码区的代码,执行步骤S5;0011 步骤S4:获取最新的Bootloader版本信息,Bootloader程序进行整体式自更新说 明 书CN 104360877 A2/5页5Bootloader区的代码,执行步骤S5;00。
13、12 步骤S5:更新版本信息区中的Bootloader版本信息或应用程序版本信息,ECU系统复位。0013 所述用户数据存储区为EEPROM区域。0014 所述用户数据存储区为Flash区域,ECU系统的存储空间还包括用户数据备份区,为用户数据存储区的信息备份。0015 所述应用程序代码区划分为若干个功能模块,每个功能模块存储不同功能的应用程宇代码,每个功能模块具有一个应用程序有效性标记与之对应。0016 所述应用程序有效性标记分为有效和无效,若功能模块对应的应用程序有效性标记为有效,则执行此功能模块的应用程序代码,反之不执行。0017 所述步骤S3具体为:0018 301:获取最新应用程序版。
14、本信息以及对应的最新应用程序代码;0019 302:由中断向量表跳转中断向量重映射表,执行相应中断处理程序,对比最新应用程序代码与现有应用程序代码,获得两者间有变动的功能模块,并使与之对应的应用程序有效性标记为无效;0020 303:擦除应用程序有效性标记为无效的功能模块中现有应用程序代码,烧写最新应用程序代码到擦除后的功能模块,并使与之对应的应用程序有效性标记为有效,完成增量更新。0021 所述Bootloader区划分为两块Bootloader分区域。0022 所述引导区交换标记分为无效和有效,无效表示不切换ECU系统运行的Bootloader分区域,有效表示切换ECU系统运行的Bootl。
15、oader分区域。0023 所述步骤S4具体为:0024 401:获取最新Bootloader版本信息以及对应的最新Bootloader程序代码;0025 402:ECU系统复位,由中断向量表跳转到复位向量重映射表,读取引导区交换标记为无效,不切换ECU运行的Bootloader分区域,则跳转到原Bootloader分区域,运行现有Bootloader程序;0026 403:擦除与当前Bootloader分区域对应的另一Bootloader分区域,并烧写进最新Bootloader程序代码,引导区交换标记设为有效;0027 404:ECU系统再次复位,由中断向量表跳转到复位向量重映射表,读取引导。
16、区交换标记为有效,则跳转切换后的Bootloader分区域,运行最新Bootloader程序代码,引导区交换标记设为无效。0028 与现有技术相比,本发明具有以下优点:0029 1)本发明方法能够通过Bootloader实现ECU应用程序在线烧写,应用程序采用增量更新方法,只对新版本程序不同于旧版本程序的部分进行更新,节约时间和成本;0030 2)本发明同时实现了Bootloader自我更新的功能,Bootloader自更新能保证Bootloader的安全性,使得程序烧写更加高效可靠。0031 3)本发明针对应用程序增量更新和Bootloader自更新对ECU系统的存储空间进行了合理规划,包括。
17、:在用户数据存储区为Flash区域时,还分配了一个用户数据备份区;Bootloader分区域与复位中断向量做隔离,防止丢失复位向量,并利用复位向量重映射,完说 明 书CN 104360877 A3/5页6成两个Bootloader分区域之间的切换,以便在更新过程的任意时刻发生异常,都能保证其重映射到功能完备的Bootloader区中,避免整个系统进入“孤立”状态。附图说明0032 图1为本发明方法流程图;0033 图2为本发明ECU存储空间规划示意图;0034 图3为本发明ECU应用程序增量更新方法中存储空间布局示意图;0035 图4为本发明Bootloader自更新方法中存储空间布局示意图。。
18、具体实施方式0036 下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。0037 如图l所示,一种基于Bootloader自更新的ECU固件更新方法,包括以下步骤:0038 步骤S1:如图2所示,运行Bootloader程序,将ECU系统的存储空间划分为用户数据存储区和程序存储区,用户数据存储区(Data Flash)包括版本信息区和标记区,版本信息区包括Bootloader版本信息和应用程序版本信息,标记区包括更新请求标记、应用程序有效性标记和引导区交换标记,程序存储区(Progr。
19、am Flash/Code Flash)包括应用程序更新区、Bootloader区和固定区域,应用程序更新区包括应用程序代码区和中断向量重映射表,固定区域包括复位向量重映射表和中断向量表。0039 在版本验证时,需要读取版本信息区的信息,同上位机发送过来的版本信息作比对,同时在更新完成后,需要重写版本信息。为了防止外部异常,该部分信息需要单独存储,一直保持有效性。0040 在该布局中应用程序更新区、Bootloader区以及固定区域位于程序/代码Flash中,该三块区域都应该保持程序/代码Flash最小擦除块对齐。用户数据存储区为EEPROM(电可擦除只读存储器)区域;或者用户数据存储区为Fl。
20、ash区域,ECU系统的存储空间还包括用户数据备份区,用户数据备份区为用户数据存储区的信息备份,在ECU系统不包含EEPROM时有效,因为若没有EEPROM支持,不能对数据进行单字节操作,在改写数据时,需要对整个扇区进行擦除,如果系统出现异常,将引起数据丢失,故需要再分配一块区域作为信息备份。0041 步骤S2:读取更新请求标记,判断ECU系统接收到应用程序更新请求还是Bootloader更新请求,若为应用程序更新请求,执行步骤S3,若为Bootloader更新请求,执行步骤S4。0042 步骤S3:获取最新的应用程序版本信息,采用增量更新方式更新应用程序代码区的代码,执行步骤S5。其中,应用。
21、程序代码区划分为若干个功能模块,每个功能模块存储不同功能的应用程序代码,应用程序有效性标记分为有效和无效,若功能模块对应的应用程序有效性标记为有效,则执行此功能模块的应用程序代码,反之不执行。0043 步骤S3具体为:0044 301:根据ECU系统内现有应用程序版本信息,获取最新应用程序版本信息以及对说 明 书CN 104360877 A4/5页7应的最新应用程序代码;0045 302:由中断向量表跳转中断向量重映射表,在中断向量重映射表内有跳转指令,通过跳转指令跳转到应用程序中断处理路径中,执行相应中断处理程序,包括:对比最新应用程序代码与现有应用程序代码,获得两者间有变动的功能模块,并使。
22、与之对应的应用程序有效性标记为无效;0046 303:擦除应用程序有效性标记为无效的功能模块中现有应用程序代码,烧写从上位机下载的最新应用程序代码到擦除后功能模块的应用程序代码区内,并使与之对应的应用程序有效性标记为有效,完成增量更新。0047 因此要对一段应用程序进行更新需要先清除其有效性标记,使该段程序不可执行,然后将其擦除,再烧写新的应用程序,新程序烧写完成后,将写程序有效性标记使更新后的程序为有效,至此,新的程序被置为可执行的有效程序。0048 如图3所示,在功能模块A修改前后,其他模块的内容及其在控制器中的内存位置都保持不变,更新部分内容仅与修改模块相关。但是由于在内存配置时,需要为。
23、每个功能模块预留一定的内存地址,以满足其功能扩展的需要,在各功能模块间会产生一定大小的内存碎片,影响内存利用率。要减小内存碎片,最有效的办法是减小可变功能模块的数量,这需要对应用程序功能模块做详细的分析。0049 步骤S4:获取最新的Bootloader版本信息,Bootloader程序进行整体式自更新Bootloader区的代码,执行步骤S5。0050 其中,Bootloader区划分为两块Bootloader分区域,包括第一Bootloader区和第二Bootloader区。引导区交换标记(SWAP_FLAG)分为无效和有效两类,无效表示ECU系统运行的Bootloader分区域不做切换,。
24、有效表示ECU系统运行的Bootloader分区域要进行切换,所以,根据该标记做复位向量重映射表,当引导区交换标记为有效时,复位向量重映射表跳转到“更新器起始地址”,否则进入Bootloader区。0051 如图2、4所示,步骤S4具体为:0052 401:根据ECU系统内原Bootloader版本信息,获取最新Bootloader版本信息以及对应的最新Bootloader程序代码;0053 402:ECU系统复位(RESET),由中断向量表跳转到复位向量重映射表,读取引导区交换标记为无效,ECU系统运行的Bootloader分区域不做切换,则跳转到原Bootloader分区域,假设为第一Bo。
25、otloader区,运行现有Bootloader程序;0054 403:擦除与当前Bootloader分区域对应的另一Bootloader分区域,即擦除第二Bootloader区,并烧写进从上位机下载的最新Bootloader程序代码,引导区交换标记设为有效;0055 404:ECU系统再次复位,由中断向量表跳转到复位向量重映射表,读取引导区交换标记为有效,则跳转切换后的Bootloader分区域,即在第二Bootloader区运行最新Bootloader程序代码,引导区交换标记设为无效。0056 下一次Bootloader自更新则由第二Bootloader区中版本擦除第一Bootloader。
26、区并烧写新版本,如此循环在两个Bootloader分区域中切换新老版本。0057 步骤S5:更新版本信息区中的Bootloader版本信息或应用程序版本信息,ECU系统复位。说 明 书CN 104360877 A5/5页80058 以上通过Bootloader与复位中断向量做隔离,防止丢失复位向量,并利用复位向量重映射,完成第一Bootloader区和第二Bootloader区的切换,在更新过程的任意时刻发生异常,都能保证其重映射到功能完备的Bootloader分区域中,避免整个系统进入“孤立”状态。说 明 书CN 104360877 A1/3页9图1说 明 书 附 图CN 104360877 A2/3页10图2图3说 明 书 附 图CN 104360877 A10。