一种芯片固件的升级方法和系统的制作方法

文档序号:6527258阅读:442来源:国知局
一种芯片固件的升级方法和系统的制作方法
【专利摘要】本发明公开了一种芯片固件的升级方法和升级系统,通过在进入固件升级过程中将升级失败标志位置位以及根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。据此,当发生断电、数据传输错误等状况导致固件升级失败后,基于所述升级失败标志位的作用,芯片重启后不运行应用程序,进而充分避免了固件程序跑飞的问题。
【专利说明】一种芯片固件的升级方法和系统
【技术领域】
[0001]本发明属于芯片领域,具体涉及一种芯片固件的升级方法和系统。
【背景技术】
[0002]消费类电子产品中,芯片作为控制芯片被广泛利用。在实际使用过程中,运行在芯片中的程序需要最终用户可以方便地升级,升级的方法大都通过固件升级方法(也即DFU,其英文全名为Device Firmware Upgrade)来实现。随着消费类电子产品的功能越来越强大,传统的8位/16位芯片日益无法满足应用的需求,因此,32位的ARM-Cortex-MO芯片也越来越广泛地被使用。各大芯片制造商也纷纷推出自己的MO芯片。且,USB接口是当前应用非常广泛的接口,其具有速度快、稳定性高、通用性好等诸多优点。
[0003]但是,对于基于USB通信的ARM-Cortex-MO芯片,如果采用上述的传统固件升级方法,在固件升级过程中,不可避免的发生断电、数据传输错误等状况,进而导致估计固件升级失败,并进一步导致了,ARM-Cortex-MO芯片重启后直接启动读取不完整或者错误数据而发生固件程序跑飞。
[0004]基于此,本发明提供了一种芯片固件的升级方法以系统。

【发明内容】

[0005]本发明的目的在于提供一种芯片固件的升级方法,用于解决上述的固件升级失败所导致的固件程序跑飞的问题。
[0006]本发明的目的还在于提供一种基于芯片固件的升级系统,用于防止芯片固件的升级失败而导致重启后固件程序跑飞。
[0007]基于上述的第一目的,本发明提供了一种芯片固件的升级方法,该方法包括:
[0008]步骤1,判断是否要进行一芯片固件的升级,是则执行步骤2,否则正常运行所述固件;
[0009]步骤2,获取固件升级数据,并将升级失败标志位置位;
[0010]步骤3,根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。
[0011]可选的,所述的方法还包括:设置升级组合按键,用于在按照步骤I至3正确执行所述固件的升级后出现异常情况而导致所述固件的升级失败后,触发升级组合按键,重新进行固件升级。
[0012]可选的,步骤I中,通过运行中的所述芯片固件实时监控其升级标志位是否被置位来判断是否要进行升级,若所述升级标志位被置位,则开始升级过程;和/或,
[0013]步骤2中,从与芯片通信的上位机或者因特网上获取固件升级数据,获取的固件升级数据以及升级失败标志位均保存在非易失性存储器的程序管理区;所述固件运行在所述非易失性存储器的用户程序存储区;[0014]其中,所述升级标志位通过所述与芯片通信的上位机或者因特网或者所述升级组合按键进行置位。
[0015]可选的,步骤3中,根据所述固件升级数据进行所述固件升级,包括:
[0016]按顺序从所述程序管理区中读取所述固件升级数据的数据包并写入所述用户程序存储区中,读取的每个数据包携带相应的单校验码,所述固件升级数据携带一总校验码;
[0017]每完成一个数据包的读取和写入,读取所述用户程序存储区并生成一个单数据包校验码;比对所生成的单数据包校验码与所述数据包所携带的单校验码,如果不相等则重新进行该数据包的读取和写入,如果相等则进行下一个数据包的读取和写入;
[0018]完成全部所述数据包的读取和写入后,读取所述用户程序存储区并生成一个总数据包校验码;比对所生成的总数据包校验码与所述固件升级数据所携带的总校验码,如果不相等则重新根据所述固件升级数据进行所述固件升级。
[0019]可选的,所述的方法还包括:
[0020]保留所述升级失败标志位的置位状态并结束本次升级之后,更新所述固件的固件升级数据,以重新发起所述固件的升级,循环步骤I至3进入所述固件的下次升级。
[0021]本发明还提供一种芯片固件升级系统,包括:
[0022]判断单元,用于判断是否要进行一芯片固件的升级,并在确定要进行所述芯片固件的升级时启动所述芯片固件的升级过程;
[0023]固件升级数据加载单元,用于获取固件升级数据,并将升级失败标志位置位;以及
[0024]固件升级单元,用于根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。
[0025]可选的,所述的系统还包括:升级组合按键,用于在判断单元、固件升级数据加载单元以及固件升级单元正确执行所述固件的升级后出现异常情况而导致所述固件的升级失败后,触发而使得判断单元、固件升级数据加载单元以及固件升级单元重新对所述芯片固件进行固件升级。
[0026]可选的,所述系统还包括:非易失性存储器;
[0027]所述固件运行在所述非易失性存储器的用户程序存储区,所述判断单元通过运行中的所述芯片固件实时监控其升级标志位是否被置位来判断是否要进行升级,若所述升级标志位被置位,则开始升级过程;和/或,
[0028]获取的固件升级数据以及升级失败标志位均保存在非易失性存储器的程序管理区,所述固件升级数据加载单元从与芯片通信的上位机或者因特网上获取固件升级数据;
[0029]其中,所述升级标志位通过所述与芯片通信的上位机或者因特网或者所述升级组合按键进行置位。
[0030]可选的,所述固件升级单元还用于:
[0031]按顺序从所述程序管理区中读取所述固件升级数据的数据包并写入所述用户程序存储区中,读取的每个数据包携带相应的单校验码,所述固件升级数据携带一总校验码;
[0032]每完成一个数据包的读取和写入,读取所述用户程序存储区并生成一个单数据包校验码;比对所生成的单数据包校验码与所述数据包所携带的单校验码,如果不相等则重新进行该数据包的读取和写入,如果相等则进行下一个数据包的读取和写入;
[0033]完成全部所述数据包的读取和写入后,读取所述用户程序存储区并生成一个总数据包校验码;比对所生成的总数据包校验码与所述固件升级数据所携带的总校验码,如果不相等则重新根据所述固件升级数据进行所述固件升级。
[0034]可选的,所述系统还包括位于固件升级数据发布端的刷机单元,用于在所述固件升级单元保留所述升级失败标志位的置位状态并结束本次升级之后,更新所述固件的固件升级数据,以重新发起所述固件的升级,进入所述固件的下次升级。
[0035]本发明所提供的芯片固件的升级方法和升级系统,通过在进入固件升级过程中将升级失败标志位置位以及根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。据此,当发生断电、数据传输错误等状况导致固件升级失败后,基于所述升级失败标志位的作用,芯片重启后不运行应用程序,进而充分避免了固件程序跑飞的问题。
【专利附图】

【附图说明】
[0036]图1为本发明的芯片固件的升级方法的实施例的流程图;
[0037]图2是本发明的芯片固件的升级系统的架构图;
[0038]图3为本发明的芯片固件的升级系统的应用实施例图。
【具体实施方式】
[0039]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0040]方法的实施例
[0041]图1为本发明芯片的固件升级方法的实施例的流程图,图1中的芯片的固件升级方法,其能够充分避免因固件升级失败而导致固件程序跑飞的问题,因此,能够有效的适用于基于USB通信的芯片,尤其是基于USB通信的ARM-Cortex-MO芯片。
[0042]该方法包括如下步骤:
[0043]步骤1,判断是否要进行一芯片固件的升级,是则执行步骤2,否则正常运行所述固件;
[0044]步骤2,获取固件升级数据,并将升级失败标志位(Dirty Flag)置位;
[0045]步骤3,根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。
[0046]所述的方法还包括:步骤4,设置升级组合按键,用于在按照步骤I至3正确执行所述固件的升级后出现异常情况而导致所述固件的升级失败后,触发升级组合按键,重新进行固件升级。设置升级组合按键为了防止出现因其他各种异常原因而导致固件程序被篡改等而无法正常进入DFU的情况(即所述固件的升级失败),升级组合按键启动升级的机制保证了只要能够获取正确的固件升级数据以及正确的将升级失败标志位置位就可以对固件进行正常升级操作,可实现强制开启固件升级模式进行升级。
[0047]本实施例的步骤I中,通过运行中的所述芯片固件实时监控其升级标志位(DFUFlag)是否被置位来判断是否要进行升级,若所述升级标志位被置位(即被有效置位,例如预设的有效置位为I,则所述升级标志位被置位为I),则开始升级过程。即在芯片正常运行程序时,接收到固件更新指令,将所述升级标志位DFU Flag置位,未接收到固件更新指令时,所述升级标志位DFUFlag为清空状态。
[0048]本实施例的芯片(MCU)具有通过Uart/USB等与上位机通信的功能,例如USB通信接口。因此在步骤2中,从与芯片通信的上位机或者因特网上获取固件升级数据,获取的固件升级数据以及升级失败标志位均保存在非易失性存储器(例如是FLASH)的程序管理区LDROM ;所述固件运行在所述非易失性存储器的用户程序存储区APROM ;APROM和LDROM是两个逻辑独立的用来存储程序的ROM区;本发明的升级方法可以设置从上述两个区域的任何一个启动,并方便的通过软件进行配置和切换,包括:从LDROM启动并可以擦写/烧写APROM区域(ISP功能)来实现DFU功能;以及从APROM启动来实现Application (固件程序运行)的功能。
[0049]本实施例中,所述升级标志位(DFU FLAG)通过所述与芯片通信的上位机或者因特网或者所述升级组合按键进行置位。所述非易失性存储器具有断电保护功能,升级标志位(DFU Flag)和升级失败标志位(Dirty Flag)的信息都保存在非易失性存储器的独立的DataFlash区域,实现掉电不丢失数据。
[0050]步骤2中获取的固件升级数据分成至少一个数据包,升级时依次被读取和写入。由此,本实施例的步骤3中,根据所述固件升级数据进行所述固件升级,包括:
[0051]按顺序从所述程序管理区中读取所述固件升级数据的数据包并写入所述用户程序存储区中,读取的每个数据包携带相应的单校验码(所述校验码即为checksuml,所述固件升级数据携带一总校验码(所述校验码即为checksum2 ;
[0052]每完成一个数据包的读取和写入,读取所述用户程序存储区并生成一个单数据包校验码;比对所生成的单数据包校验码与所述数据包所携带的单校验码,如果不相等则重新进行该数据包的读取和写入,如果相等则进行下一个数据包的读取和写入,该步骤对每一个数据包的读取和写入的准确性进行监测,用于确保所读取和写入的每一个数据包的准确性;
[0053]完成全部所述数据包的读取和写入后,读取所述用户程序存储区并生成一个总数据包校验码;比对所生成的总数据包校验码与所述固件升级数据所携带的总校验码,如果不相等则重新根据所述固件升级数据进行所述固件升级,该步骤用于进一步确定,全包固件升级数据的整体校核,以确保固件升级的准确性。
[0054]在本发明的一个实施例中,根据所述固件升级数据进行所述固件升级包括:为每一个数据包的读取和写入设置一个限定时间;如果超过所述限定时间,则重新进行该数据包的读取和写入。该步骤主要用于防止因某个数据包的读取或者写入发生意外而导致固件升级中断,一旦某个数据包的读取或者写入发生意外并超过所述限定时间,则该数据包被重新读取和写入。
[0055]在本发明的另一个实施例中,所根据所述固件升级数据进行所述固件升级还进一步包括:每完成一个数据包的读取和写入,将该数据包中的次序码加I;获取对应于加I后的所述次序码的数据包,并写入到用户程序存储区中。所述次序码例如可以是数据包中的Package-No。该步骤主要用于确保所述至少一个数据包按照次序逐个被读取和写入,以及用于确保断电重启后,能够直接读取固件升级数据的读取和写入的进度,实现断点续传。
[0056]该步骤在具体实施时,例如可以是:当完成一个数据包的读取和写入后,将该数据包中的次序码加1,即次序码由I变为2 ;上位机如果没有接收到次序码为2的反馈信息,则重新发送次序码为I的数据包,直至上位机接收到次序码为2的反馈信息后,选择对应于次序码2的数据包进行发送。该实施方式中,各数据包的次序码编排为I开始的连续自然数。
[0057]该步骤在具体实施时,例如还可以是:当完成一个数据包的读取和写入后,将该数据包中的次序码加1,即次序码由2变为3 ;上位机如果没有接收到次序码为3的反馈信息,则重新发送次序码为2的数据包,直至上位机接收到次序码为3的反馈信息后,选择对应于次序码4的数据包进行发送。该实施方式中,各数据包的次序码编排为2开始的连续偶数。
[0058]本实施例中,在步骤3的保留所述升级失败标志位的置位状态并结束本次升级之后,上位机更新所述固件的固件升级数据,以重新发出所述固件的升级的指令,循环步骤I至3进入所述固件的下次升级。
[0059]本发明所述的芯片(MCU)可以是8位/16位的传统芯片,也可以是32位的ARM-Cortex-MO芯片,该实施例以32位的ARM-Cortex-MO芯片进行描述。为实现通过本发明的固件升级方法对所述芯片固件进行升级,所以适用于本发明的芯片至少具有如下特点:
[0060]1、至少具有APROM和LDROM两个逻辑独立的ROM区,分别用于存储程序。
[0061]2、能够设置从APROM和LDROM的任何一个启动,并能够通过软件进行配置和切换。例如,从LDROM启动实现DFU功能;从APROM启动来实现Application (运行程序)的功能。
[0062]5、具有至少一个独立的DataFlash区域,所述DataFlash区域具有断电保护功能,掉电不丢失数据,用于存储升级失败标志位(Dirty Flag)。
[0063]6、具有ISP功能,也即程序烧录功能,用于实现通过LDROM擦写/烧写APROM区域。
[0064]7、具有Uart/USB等与上位机通信的功能,通过USB通信方式实现更快速、更稳定传输固件升级数据。
[0065]芯片固件升级系统的实施例
[0066]图2是本发明芯片固件升级系统的实施例的架构图。该实施例所公开的芯片固件升级系统是基于实施例一所描述的固件升级方法的系统,实施例一所描述的技术方案也属于该实施例,实施例一已经公开的技术方案不再重复描述。
[0067]本实施例中,升级标志的置位通过上位机I和升级组合按键205。本实施例的芯片固件升级系统2包括:
[0068]判断单元201,用于判断是否要进行一芯片固件的升级,并在确定要进行所述芯片固件的升级时启动所述芯片固件的升级过程;
[0069]固件升级数据加载单元202,用于获取固件升级数据,并将升级失败标志位置位;以及
[0070]固件升级单元203,用于根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。
[0071]本实施例中,所述的系统还包括:升级组合按键204,用于在判断单元201、固件升级数据加载单元202以及固件升级单元203正确执行所述固件的升级后出现异常情况而导致所述固件的升级失败后,触发而使得判断单元201、固件升级数据加载单元202以及固件升级单元203重新对所述芯片固件进行固件升级。
[0072]本实施例中,所述系统还包括:非易失性存储器205,所述固件运行在所述非易失性存储器的用户程序存储区,获取的固件升级数据以及升级失败标志位均保存在非易失性存储器的程序管理区;所述判断单元201通过运行中的所述芯片固件实时监控其升级标志位是否被置位来判断是否要进行升级,若所述升级标志位被置位,则开始升级过程;所述固件升级数据加载单元202从与芯片通信的上位机或者因特网上获取固件升级数据;其中,所述升级标志位通过所述与芯片通信的上位机或者因特网或者所述升级组合按键进行置位。
[0073]因此,本实施例中,所述固件升级单元还用于:
[0074]按顺序从所述程序管理区中读取所述固件升级数据的数据包并写入所述用户程序存储区中,读取的每个数据包携带相应的单校验码,所述固件升级数据携带一总校验码;
[0075]每完成一个数据包的读取和写入,读取所述用户程序存储区并生成一个单数据包校验码;比对所生成的单数据包校验码与所述数据包所携带的单校验码,如果不相等则重新进行该数据包的读取和写入,如果相等则进行下一个数据包的读取和写入;
[0076]完成全部所述数据包的读取和写入后,读取所述用户程序存储区并生成一个总数据包校验码;比对所生成的总数据包校验码与所述固件升级数据所携带的总校验码,如果不相等则重新根据所述固件升级数据进行所述固件升级。
[0077]本实施例中,所述系统还包括位于固件升级数据发布端的刷机单元206,用于在所述固件升级单元203保留所述升级失败标志位的置位状态并结束本次升级之后,更新所述固件的固件升级数据,以重新发起所述固件的升级,进入所述固件的下次升级。
[0078]芯片固件的升级系统的应用实施例
[0079]图3是本发明芯片的固件升级方法的应用实施例的流程图,该实施例是实施例一所描述的方法的一个具体应用,实施例一所描述的技术方案也属于该实施例,实施例一已经公开的技术方案不再重复描述。该实施例中,升级标志位是通过与芯片通信的上位机实现的。
[0080]为使图中的流程更清晰,图中未标示各步骤的序号。
[0081 ] 该应用实施例的方法包括:
[0082]步骤S301,系统上电:启动芯片的非易失性存储器205,即LDR0M。
[0083]步骤S302,判断单元201确定是否要进行升级:是则执行步骤S310,否则执行步骤S303。与实施例一描述的技术方案相同,该判断依据包括查看升级标志位是否被置位,以及判断升级组合按键是否被触发。
[0084]步骤S303,正常运行固件:即发出运行固件的指令至APR0M。
[0085]步骤S304,运行固件:非易失性存储器205即APROM收到指令后,运行固件。
[0086]步骤S305,清空DFU Flag:即清空所述升级标志位,确保在未接收到固件更新指令时,所述升级标志位DFU Flag为清空状态。
[0087]步骤S306,固件3正常工作:即循环运行固件。[0088]步骤S307,是否有升级命令:即监测接收到固件更新指令,是则执行步骤S308,否则执行步骤S306。
[0089]步骤S308,DFU Flag置位:即被有效置位,例如预设的有效置位为1,则所述升级标志位被置位为I。
[0090]步骤S309,进入升级过程:即开始进行固件升级。
[0091]步骤S310,与上位机通信:即通过USB通信的HID协议,与上位机I进行对话。
[0092]步骤S311,固件升级数据加载单元202对Dirty Flag置位:所述Dirty Flag存储在非易失性存储器205中,即存储在LDROM中,防止断电丢失数据。
[0093]步骤S312,固件升级数据加载单元202获取固件升级数据:即,通过HID协议与上位机I进行升级数据的传输,获取升级数据。
[0094]步骤S313,固件升级单元202将固件升级数据写入APROM:通过芯片的ISP功能将固件升级数据写入到APROM中,进行固件升级。
[0095]步骤S314,固件升级单元203校验写入是否正确:与实施例一所描述的技术方案相同,通过单校验码和总校验码分别比对来确定写入的固件是否正确,是则执行步骤S315,否则执行步骤S316。
[0096]步骤S315,固件升级单元203清空Dirty Flag:即固件升级成功,执行步骤S303。
[0097]步骤S316,固件升级失败:退出本次升级,不执行步骤S303,等待重新升级。
[0098]上述应用实施例`中有以下几个特点
[0099]UDFU Flag:
[0100]该标志位位于DataFlash中;该标志位由APROM程序置位/清空,LDROM程序读,并判断状态;
[0101]2、如何进入DFU:
[0102]APROM程序启动时,将DFU Flag清空,并正常运行Application ;上位机通过发送USB命令来控制MO芯片是否进入DFU ;M0芯片收到该命令后,将DFU Flag置位,并重启进入DFU状态;
[0103]3、DFU 判断:
[0104]MO芯片总是从LDROM启动,通过读取DFU Flag以及其他判断条件,确定是否进入DFU ;如果不满足DFU的条件,直接重启进入APR0M,MO芯片正常启动Application ;
[0105]4、DFU 过程:
[0106]同步:在发送APROM数据之前,上位机会发若干次同步命令给芯片;得到芯片的回复之后。进入数据传输阶段;
[0107]数据传输:通过HID协议,上位机将APROM的数据发送给芯片;芯片收到数据后,更新相应的APROM区域;并完成校验等操作。
[0108]5、DFU 结束:
[0109]上位机计算DFU文件的checksum并发送给芯片;芯片收到后,计算APROM有效区域的checksum ;如果两者相等,芯片重启进入APR0M, MO芯片正常启动,运行Application ;否则,通过Led等外围设备指示DFU失败;这里的checksum包括每个数据包的单校验码(所述校验码即为checksuml和总数据的总校验码checksum〗。
[0110]6、异常处理:[0111]I) HID数据包错误以及APROM写错误:
[0112]芯片收到每一个数据包之后,烧写相应位置的APROM ;写操作结束后,会读相应的区域并计算checksum,将checksum返回给上位机;由上位机判断该checksum是否正确。如果不正确,该数据包会被重发;直到上位机收到正确的checksum ;
[0113]2) HID数据包丢失:
[0114]上位机设计了超时机制,在规定时间内没有收到芯片的checksum返回值,上位机
将自动重发;
[0115]3) HID 数据包的 Package No:
[0116]上位机发送的数据中,有一个字节用来标识包的Package No;芯片回复时,会将这个 Package No 加 I。
[0117]4) Dirty Flag:
[0118]为了防止DFU失败之后,APROM写入错误数据后,重启芯片而导致程序跑飞,设计Dirty Flag标志位。DFU数据传输开始时,将Dirty Flag置位,DFU正常退出时,将DirtyFlag清空;
[0119]Dirty Flag存储在DataFlash中,不会因掉电而丢失;
[0120]5 )按升级组合按键上电进入DFU:
[0121]为了防止因其他各种异常原因而导致APROM程序被篡改等,从而无法正常进入DFU的情况,设计了此机制。该机制保证只要LDROM程序可以正常启动/运行,就可以对APROM实施DFU操作。
[0122]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
【权利要求】
1.一种芯片固件升级方法,其特征在于,该方法包括: 步骤1,判断是否要进行一芯片固件的升级,是则执行步骤2,否则正常运行所述固件; 步骤2,获取固件升级数据,并将升级失败标志位置位; 步骤3,根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。
2.根据权利要求1所述的方法,其特征在于,还包括:设置升级组合按键,用于在按照步骤I至3正确执行所述固件的升级后出现异常情况而导致所述固件的升级失败后,触发升级组合按键,重新进行固件升级。
3.根据权利要求2所述的方法,其特征在于,步骤I中,通过运行中的所述芯片固件实时监控其升级标志位是否被置位来判断是否要进行升级,若所述升级标志位被置位,则开始升级过程;和/或, 步骤2中,从与芯片通信的上位机或者因特网上获取固件升级数据,获取的固件升级数据以及升级失败标志位 均保存在非易失性存储器的程序管理区;所述固件运行在所述非易失性存储器的用户程序存储区; 其中,所述升级标志位通过所述与芯片通信的上位机或者因特网或者所述升级组合按键进行置位。
4.根据权利要求3所述的方法,其特征在于,步骤3中,根据所述固件升级数据进行所述固件升级,包括: 按顺序从所述程序管理区中读取所述固件升级数据的数据包并写入所述用户程序存储区中,读取的每个数据包携带相应的单校验码,所述固件升级数据携带一总校验码; 每完成一个数据包的读取和写入,读取所述用户程序存储区并生成一个单数据包校验码;比对所生成的单数据包校验码与所述数据包所携带的单校验码,如果不相等则重新进行该数据包的读取和写入,如果相等则进行下一个数据包的读取和写入; 完成全部所述数据包的读取和写入后,读取所述用户程序存储区并生成一个总数据包校验码;比对所生成的总数据包校验码与所述固件升级数据所携带的总校验码,如果不相等则重新根据所述固件升级数据进行所述固件升级。
5.根据权利要求1至4中任一项所述的方法,其特征在于,还包括: 保留所述升级失败标志位的置位状态并结束本次升级之后,更新所述固件的固件升级数据,以重新发起所述固件的升级,循环步骤I至3进入所述固件的下次升级。
6.一种芯片固件升级系统,其特征在于,包括: 判断单元,用于判断是否要进行一芯片固件的升级,并在确定要进行所述芯片固件的升级时启动所述芯片固件的升级过程; 固件升级数据加载单元,用于获取固件升级数据,并将升级失败标志位置位;以及 固件升级单元,用于根据所述固件升级数据进行所述固件升级,若升级成功,则清空所述升级失败标志位,开始运行升级后的固件;如果升级失败,则保留所述升级失败标志位的置位状态并结束本次升级。
7.根据权利要求6所述的系统,其特征在于,还包括:升级组合按键,用于在判断单元、固件升级数据加载单元以及固件升级单元正确执行所述固件的升级后出现异常情况而导致所述固件的升级失败后,触发而使得判断单元、固件升级数据加载单元以及固件升级单元重新对所述芯片固件进行固件升级。
8.根据权利要求7所述的系统,其特征在于,所述系统还包括非易失性存储器; 所述固件运行在所述非易失性存储器的用户程序存储区,所述判断单元通过运行中的所述芯片固件实时监控其升级标志位是否被置位来判断是否要进行升级,若所述升级标志位被置位,则开始升级过程;和/或, 获取的固件升级数据以及升级失败标志位均保存在非易失性存储器的程序管理区,所述固件升级数据加载单元从与芯片通信的上位机或者因特网上获取固件升级数据; 其中,所述升级标志位通过所述与芯片通信的上位机或者因特网或者所述升级组合按键进行置位。
9.根据权利要求8所述的系统,其特征在于,所述固件升级单元还用于: 按顺序从所述程序管理区中读取所述固件升级数据的数据包并写入所述用户程序存储区中,读取的每个数据包携带相应的单校验码,所述固件升级数据携带一总校验码; 每完成一个数据包的读取和写入,读取所述用户程序存储区并生成一个单数据包校验码;比对所生成的单数据包校验码与所述数据包所携带的单校验码,如果不相等则重新进行该数据包的读取和写入,如果相等则进行下一个数据包的读取和写入; 完成全部所述数据包的读取和写入后,读取所述用户程序存储区并生成一个总数据包校验码;比对所生成的总数据包校验码与所述固件升级数据所携带的总校验码,如果不相等则重新根据所述固件 升级数据进行所述固件升级。
10.根据权利要求6至9中任一项所述的系统,其特征在于,所述系统还包括位于固件升级数据发布端的刷机单元,用于在所述固件升级单元保留所述升级失败标志位的置位状态并结束本次升级之后,更新所述固件的固件升级数据,以重新发起所述固件的升级,进入所述固件的下次升级。
【文档编号】G06F9/445GK103761122SQ201310754001
【公开日】2014年4月30日 申请日期:2013年12月31日 优先权日:2013年12月31日
【发明者】徐建军, 孔庆磊, 牛锡亮 申请人:青岛歌尔声学科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1