本发明专利技术公开了一种基于CAN总线的远程在线升级方法,基于CAN总线系统,该系统包括多个独立工作的嵌入式功能模块和用于对系统升级的控制模块,每个功能模块上设有固化的引导程序,该引导程序支持CAN总线协议,所述的控制模块向需要升级的功能模块发出升级指令,该功能模块收到升级指令后跳转至引导程序,等待所述的控制模块发送升级数据包,该功能模块通过串口文件传输协议Xmodem接收升级数据包,然后将收到的升级数据包编程至Flash,实现在线升级,升级结束后该功能模块进行软件复位操作,开始运行更新后的应用程序。
【技术实现步骤摘要】
本专利技术属于嵌入式设备
,特别涉及一种基于CAN总线的远程在线升级方法。
技术介绍
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间.目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,日用范围也将日益广阔。对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。但是对于嵌入式系统程序来说,在编写完成后不出一点问题是不可能的,一个好的软件程序总是在不断的调试和修改过程中产生的。传统的程序升级一般需要对产品进行重新拆装,以及工作人员到产品现场进行操作才能实现。此种方式即费时又耗力,不利于现代化的生产方式,增加了无谓的工作量。因此,嵌入式系统程序更新问题一直以来都在困扰着人们。其主要体现为以下两点1.这些系统分处于大系统的各个位置,单独对每个系统进行升级比较困难;2.某些系统为了满足保密和可靠性的要求,对系统进行了永久密封,只预留了通信和电源端口,这就更不可能单独对它进行升级。随着嵌入式技术的不断发展,有人提出用UART解决在线升级的方案。该方案一般只适用于一对一的更新程序,对于大批量更新程序有其自身的局限性。主要表现为以下几方面1.对于UART来说,一般是通过RS232、RS485或RS422进行数据通信的。由于其总线形式的性质,其具有带负载能力有限,容易出现网络瘫痪,而且数据安全性不高容易出现误码等缺点;2.当更新程序时,一般都需要重新上电复位;3. 一般需要专业技术人员到现场操作更新程序,不易操作;4.保护机制不够完善,在更新过程中当出现断电或其它原因容易造成数据的丢失。以上几个问题都大大增加了更新程序的工作量和升级程序时的不安全性。
技术实现思路
本专利技术提供一种基于CAN总线的远程在线升级解决方案,能克服传统的在线升级解决方案所带来的缺点。本专利技术的技术方案是,一种基于CAN总线的远程在线升级方法,基于CAN总线系统,该系统包括多个独立工作的嵌入式功能模块和用于对系统升级的控制模块,每个功能模块上设有固化的引导程序,该引导程序支持CAN总线协议,所述的控制模块向需要升级的功能模块发出升级指令,该功能模块收到升级指令后跳转至引导程序,等待所述的控制模块发送升级数据包,该功能模块通过串口文件传输协议Xmodem接收升级数据包,然后将收到的升级数据包编程至Flash,实现在线升级,升级结束后该功能模块进行软件复位操作,开始运行更新后的应用程序,对所述功能模块的片内Flash重新分区,包括Boot区,存放引导程序,该Boot区的首地址位于0x00000000,其代码空间位于0x00000000 至 0x00002000 之间,LOW区和HIGH区,用于存放用户代码,LOW区的首地址为0x00002000,代码空间位于0x00002000至0x00007000之间,HIGH区的首地址为0x00007000,代码空间位于0x00007000至0x0000C000之间,每个用户代码区的容量为20KB,所述的LOW区和HIGH区,用于对升级应用程序的备份,即在应用程序升级时,将新版本的应用程序写入到两者中空的程序区,当升级成功时,就将有效的旧版本应用程序所在的程序区擦除;而当升级失败时,就保留有效的旧版本应用程序;设置以下标志,包括程序升级标志,标志当前完成更新的是哪个区,程序升级标志区的地址为功能模块的片内SRAM中0x20000000, 如果程序升级标志=0x55AA55AA,则当前更新完成的是LOW区,运行LOW区程序,并将程序升级标志清空;如果程序升级标志=0xAA55AA55,则当前更新完成的是HIGH区,运行HIGH区程序,并将程序升级标志清空;如果程序升级标志为其他值时,则当前运行用户Boot区,当所述的功能模块收到升级指令后,功能模块系统复位后,首先运行引导程序,根据片内SRAM中0x20000000的程序升级标志判断并运行相应的程序代码,若程序升级标志=0xAA55AA55,则执行步骤为Al,清除程序标志区的值;A2,切换到HIGH区的异常向量表;A3,获取HIGH区复位处理函数的入口地址;A4,程序跳转到复位处理函数执行;若程序升级标志=0x55AA55AA,则执行步骤为 BI,清除程序标志区的值;B2,切换到LOW区的异常向量表;B3,获取LOW区复位处理函数的入口地址;B4,程序跳转到复位处理函数执行;否则,Cl,执行Boot区的复位处理函数;C2,发送提示用户信息,清空缓冲区,启动超时机制,自动跳转到用户程序区;C3,利用Xmodem串口文件传输协议接收用户代码BIN文件;C4,对空的程序区进行FLASH编程,若成功,则擦除现有版本的程序,若失败,则保留现有版本的程序;C5,更新程序升级标志区片内SRAM中0x20000000的程序升级标志,并对功能模块的CPU进行软复位。本专利技术经实验证明使用方便可靠,操作简单,可以广泛应用到嵌入式软件开发的项目当中。此方案解决了以往嵌入式软件更新程序的弊端,大大方便了日后大批量程序的升级,有利于工程类项目的开发和维护工作。此外,该解决方案还具有相对完善的保护机制,对于更新程序时的突发意外状况具有保护作用。因为其程序在flash中分为两个区域存储,只有当某一区的程序更新完成后,才擦出另一区的程序,这样当发生断电、突发意外或在CAN烧写软件中选择“取消更新”时,原程序依然存在,避免了程序丢失。附图说明图1本专利技术的CAN总线系统结构框2本专利技术中功能模块片内Flash分布3本专利技术的功能模块的引导程序Bootloader流程4本专利技术实施例中的Xmodem协议传输协议流程图具体实施例方式CAN总线采用多主竞争工作方式和非破坏性总线仲裁技术,总线上任意节点可在任意时刻主动地向网络上其他节点发送信息而不分主次,各节点之间实现自由通信。当多个节点同时向总线发信息时,优先级较低的节点会主动退出发送,而优先级较高的节点不受影响,从而大大节省了总线冲突仲裁时间,使在网络负载很重的情况下,也不会出现网络瘫痪的情况。如图1所示,整个系统由多个独立的完成一定功能的嵌入式模块、CAN总线和一个用于对整个系统进行升级的控制模块组成。其中,控制模块也可以是其中一个功能模块。在每个功能模块上安装有独立的引导程序,为该模块的Bootloader,该引导程序永久固化在模块内,不随程序升级而升级。在该引导程序中嵌入CAN总线通信程序。正常工作情况下每个功能模块单独或通过CAN总线与其他模块协同工作。当需要对某个模块进行软件升级时,通过系统升级控制模块向该模块发送升级命令,该模块接收到命令后无需重新上电即跳转至引导程序,并等待系统升级模块发送升级数据,升级结束后再跳回至应用程序。此外,相关程序的更新通过烧写BIN文件完成。该方式大大减少了工作的复杂性,技术人员可以不用亲自到现场的情况下,本文档来自技高网...
【技术保护点】
一种基于CAN总线的远程在线升级方法,基于CAN总线系统,该系统包括多个独立工作的嵌入式功能模块和用于对系统升级的控制模块,每个功能模块上设有固化的引导程序,该引导程序支持CAN总线协议,所述的控制模块向需要升级的功能模块发出升级指令,该功能模块收到升级指令后跳转至引导程序,等待所述的控制模块发送升级数据包,该功能模块通过串口文件传输协议Xmodem接收升级数据包,然后将收到的升级数据包编程至Flash,实现在线升级,升级结束后该功能模块进行软件复位操作,开始运行更新后的应用程序,其特征在于,对所述功能模块的片内Flash重新分区,包括:Boot区,存放引导程序,该Boot区的首地址位于0x00000000,其代码空间位于0x00000000至0x00002000之间,LOW区和HIGH区,用于存放用户代码,LOW区的首地址为0x00002000,代码空间位于0x00002000至0x00007000之间,HIGH区的首地址为0x00007000,代码空间位于0x00007000至0x0000C000之间,每个用户代码区的容量为20KB,所述的LOW区和HIGH区,用于对升级应用程序的备份,即在应用程序升级时,将新版本的应用程序写入到两者中空的程序区,当升级成功时,就将有效的旧版本应用程序所在的程序区擦除;而当升级失败时,就保留有效的旧版本应用程序;设置以下标志,包括:程序升级标志,标志当前完成更新的是哪个区,程序升级标志区的地址为功能模块的片内SRAM中0x20000000,如果程序升级标志=0x55AA55AA,则当前更新完成的是LOW区,运行LOW区程序,并将程序升级标志清空;如果程序升级标志=0xAA55AA55,则当前更新完成的是HIGH区,运行HIGH区程序,并将程序升级标志清空;如果程序升级标志为其他值时,则当前运行用户Boot区,当所述的功能模块收到升级指令后,功能模块系统复位后,首先运行引导程序,根据片内SRAM中0x20000000的程序升级标志判断并运行相应的程序代码,若程序升级标志=0xAA55AA55,则执行步骤为:A1,清除程序标志区的值;A2,切换到HIGH区的异常向量表;A3,获取HIGH区复位处理函数的入口地址;A4,程序跳转到复位处理函数执行;若程序升级标志=0x55AA55AA,则执行步骤为:B1,清除程序标志区的值;B2,切换到LOW区的异常向量表;B3,获取LOW区复位处理函数的入口地址;B4,程序跳转到复位处理函数执行;否则,C1,执行Boot区的复位处理函数;C2,发送提示用户信息,清空缓冲区,启动超时机制,自动跳转到用户程序区;C3,利用Xmodem串口文件传输协议接收用户代码BIN文件;C4,对空的程序区进行FLASH编程,若成功,则擦除现有版本的程序,若失败,则保留现有版本的程序;C5,更新程序升级标志区片内SRAM中0x20000000的程序升级标志,并对功能模块的CPU进行软复位。...
【技术特征摘要】
1.一种基于CAN总线的远程在线升级方法,基于CAN总线系统,该系统包括多个独立工作的嵌入式功能模块和用于对系统升级的控制模块,每个功能模块上设有固化的引导程序,该引导程序支持CAN总线协议,所述的控制模块向需要升级的功能模块发出升级指令, 该功能模块收到升级指令后跳转至引导程序,等待所述的控制模块发送升级数据包,该功能模块通过串口文件传输协议Xmodem接收升级数据包,然后将收到的升级数据包编程至 Flash,实现在线升级,升级结束后该功能模块进行软件复位操作,开始运行更新后的应用程序,其特征在于,对所述功能模块的片内Flash重新分区,包括Boot区,存放引导程序,该Boot区的首地址位于0x00000000,其代码空间位于 0x00000000 至 0x00002000 之间,LOW区和HIGH区,用于存放用户代码,LOff区的首地址为0x00002000,代码空间位于0x00002000至0x00007000之间,HIGH区的首地址为0x00007000,代码空间位于 0x00007000至0x0000C000之间,每个用户代码区的容量为20KB,所述的LOW区和HIGH区,用于对升级应用程序的备份,即在应用程序升级时,将新版本的应用程序写入到两者中空的程序区,当升级成功时,就将有效的旧版本应用程序所在的程序区擦除;而当升级失败时,就保留有效的旧版本应用程序;设置以下标志,包括程序升级标志,标志当前完成更新的是哪个区,程序...
【专利技术属性】
技术研发人员:詹克旭,闫海俊,戴奕,
申请(专利权)人:上海邮政科学研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。