本发明涉及stm32芯片技术,特别涉及一种优化stm32芯片dfu升级的方法。
背景技术:
stm32芯片基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的arm
stm32芯片在有内外部flash的情况下,dfu(devicefirmwareupgrade)升级一般是将内部flash生成一个媒介,外部flash生成另一个媒介。这种方式造成在用dfu工具升级时,需要分两次升级两个媒介,这样会给用户造成操作的复杂度和难度。
技术实现要素:
针对现有技术存在的问题,本发明提供一种优化stm32芯片dfu升级的方法。
为实现上述目的,本发明的具体技术方案如下:
一种优化stm32芯片dfu升级的方法,该方法为:将内部和外部flash当成一个整体的flash,只生成一个媒介,在dfu升级时只需一次媒介操作。
作为本发明一优选技术方案,该方法为:将内部和外部flash在逻辑分区表上当成一个整体的flash,内部和外部flash分别是顺序的不同地址范围,在升级操作时通过地址区分内部和外部flash操作。
作为本发明一优选技术方案,该方法具体包括如下步骤:
s1:将内部flash和外部flash按照寻址大小,整合到一张逻辑分区表;
s2:在升级操作时,根据升级包数据地址,找到相应的flash,对其进行存取操作。
作为本发明一优选技术方案,步骤s1中:内部flash和外部flash寻址范围不连续,整合在一起将会多出一部分空间,我们将多出来的这部分空间设置为无效区,设置为不可写入属性,并且读操作后的数据都是0xff数值,即格式化数据。
作为本发明一优选技术方案,步骤s2中:所述数据存取操作包括擦写、写入和读出。
采用本发明的技术方案,具有以下有益效果:
本发明可以方便用户在固件升级时的操作,可以实现一次升级,避免复杂的操作要求。
附图说明
图1为本发明方法的流程图;
图2为本发明中内外flash整合到一张逻辑表后的效果图;
图3为本发明中flash的操作流程图。
具体实施方式
以下结合附图和具体实施例,对本发明进一步说明。
本发明提供一种优化stm32芯片dfu升级的方法,该方法为:将内部和外部flash当成一个整体的flash,只生成一个媒介,在dfu升级时只需一次媒介操作。
其中,以逻辑分区表将内部和外部flash当成一个整体的flash,内部和外部flash分别是顺序的不同地址范围,在升级操作时通过地址区分内部和外部flash操作。
图1与图2为以寻址大小为具体实施例,具体方法包括步骤:
s1:将内部flash和外部flash按照寻址大小,整合到一张逻辑分区表;
其中,内部flash和外部flash寻址范围不连续,整合在一起将会多出一部分空间,我们将多出来的这部分空间设置为无效区,设置为不可写入属性,并且读操作后的数据都是0xff数值,即格式化数据。
具体的区域划分含义如下:
101--bootloader是存储引导程序去,属于内部flash的一部分;
102--属于内部flash的一部分,用于存储firmware;
103--无效区,属于虚拟的空间;
104--属于外部flash,用于存储firmware。
s2:在升级操作时,根据升级包数据地址,找到相应的flash,对其进行存取操作。其中,所述数据存取操作包括擦写、写入和读出。
图3为采用本发明方法的具体flash操作流程图。也是上述步骤s2的更具体化步骤。
步骤s201:读写flash数据,从flash读数据或者将数据写入flash;
步骤202:操作地址范围,对要操作的地址进行判断,确认是属于内部、外部还是无效区;
步骤203:拒绝操作,无效区的写属性已设置为不可写,如果读操作的地址是在无效区,则将所有的数据都返回0xff;
步骤204:对内部flash操作,如果读写操作的地址是在内部flash,则对内部flash进行相应操作;
步骤205:对外部flash操作,如果读写操作的地址是在外部flash,则对外部flash进行相应操作。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。