嵌入式闪存高速编程的实现方法、嵌入式闪存的编程系统转让专利

申请号 : CN202110397302.7

文献号 : CN112802527B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 汤臻章锡翔刘强吴忠洁

申请人 : 上海灵动微电子股份有限公司

摘要 :

本申请涉及一种嵌入式闪存高速编程的实现方法及编程系统,该系统包括:上位机、调试接口和微控制器,微控制器包括静态存储器和闪存,静态存储器包括程序代码区、控制交换区和数据缓冲区。上位机获取静态存储器和闪存的参数,将闪存编程代码写入程序代码区;微控制器运行程序代码区中的闪存编程代码并将正常运行标志写入控制交换区;上位机读取正常运行标志,配置数据在闪存中的写入地址,将待写入数据传输至数据缓冲区,将操作命令写入控制交换区;微控制器读取操作命令和写入地址,将数据缓冲区中的待写入数据写入闪存后在控制交换区写入操作结果和编程结果应答;上位机获取编程结果应答,根据已写入闪存的数据的大小修改写入地址。微控制器在编程系统的运行过程中不中断。

权利要求 :

1.一种嵌入式闪存高速编程的实现方法,其特征在于,用于实现编程系统中闪存的编程,所述编程系统包括:上位机、调试接口和微控制器,所述微控制器包括静态存储器和闪存,所述静态存储器包括程序代码区、控制交换区和数据缓冲区,所述上位机通过所述调试接口与所述微控制器在所述静态存储器中进行命令和数据的传输,其中,所述方法包括如下步骤:

所述上位机通过所述调试接口获取所述静态存储器和所述闪存的参数,并将闪存编程代码写入所述程序代码区;

所述微控制器运行所述程序代码区中的闪存编程代码并将正常运行标志写入所述控制交换区;

所述上位机读取所述正常运行标志,配置数据在所述闪存中的写入地址,并且,将待写入数据传输至所述数据缓冲区,将操作命令写入所述控制交换区;

所述微控制器读取所述操作命令和所述写入地址,将所述数据缓冲区中的待写入数据写入所述闪存后在所述控制交换区写入操作结果和编程结果应答;

所述上位机获取所述编程结果应答,并根据已写入所述闪存的数据的大小修改所述写入地址用于对所述闪存进行下一轮编程;

其中,所述微控制器在所述编程系统的运行过程中不产生中断。

2.根据权利要求1所述的嵌入式闪存高速编程的实现方法,其特征在于,所述控制交换区包括参数区和指令区,所述参数区用于存储所述写入地址和所述操作结果,所述指令区用于存储所述操作命令、所述正常运行标志和所述编程结果应答。

3.根据权利要求1所述的嵌入式闪存高速编程的实现方法,其特征在于,根据所述已写入所述闪存的数据的大小修改所述写入地址的步骤,还包括:将所述写入地址加上已写入所述闪存的数据的大小生成新的写入地址。

4.根据权利要求1所述的嵌入式闪存高速编程的实现方法,其特征在于,获取所述静态存储器和所述闪存参数的步骤,还包括:所述上位机判断所述写入地址是否大于所述闪存的最大存储地址,如大于,则编程结束。

5.根据权利要求1所述的嵌入式闪存高速编程的实现方法,其特征在于,还包括:所述上位机判断待写入的数据是否全部传输到所述数据缓冲区,如全部传输完成,则编程结束。

6.根据权利要求1所述的嵌入式闪存高速编程的实现方法,其特征在于,还包括:所述微控制器若在一定时间内未读取到控制交换区的指令,则全部传输完成,编程结束。

7.一种嵌入式闪存的编程系统,其特征在于,包括:上位机、调试接口和微控制器,所述微控制器包括静态存储器和闪存,所述静态存储器包括程序代码区、控制交换区和数据缓冲区,所述上位机通过所述调试接口与所述微控制器在所述静态存储器中进行命令和数据的传输,其中,所述微控制器被配置为执行如下步骤:提供所述静态存储器和所述闪存的参数供所述上位机获取;

运行所述上位机通过所述调试接口写入所述程序代码区中的闪存编程代码;

将正常运行标志写入所述控制交换区供所述上位机读取;

读取所述上位机写入所述控制交换区中的操作命令和所述上位机配置的数据在所述闪存中的写入地址;

将所述上位机传输至所述数据缓冲区中的待写入数据写入所述闪存后在所述控制交换区写入操作结果和编程结果应答供所述上位机获取;

其中,所述微控制器在所述编程系统的运行过程中不产生中断。

8.根据权利要求7所述的嵌入式闪存的编程系统,其特征在于,所述控制交换区包括参数区和指令区,所述参数区用于存储所述写入地址和所述操作结果,所述指令区用于存储所述操作命令、所述正常运行标志和所述和编程结果应答。

9.根据权利要求7所述的嵌入式闪存的编程系统,其特征在于,所述上位机将所述写入地址加上已写入所述闪存的数据的大小生成新的写入地址,并且,所述上位机判断所述写入地址是否大于所述闪存的最大存储地址,如大于,则编程结束。

10.根据权利要求7所述的嵌入式闪存的编程系统,其特征在于,所述微控制器若在一定时间内未读取到控制交换区的指令,则全部传输完成,编程结束。

说明书 :

嵌入式闪存高速编程的实现方法、嵌入式闪存的编程系统

技术领域

[0001] 本申请涉及嵌入式闪存编程领域,更涉及一种嵌入式闪存高速编程的实现方法及嵌入式闪存的编程系统。

背景技术

[0002] FLASH编程是MCU调试的重要环节。在程序映像创建完成后,需要将程序下载到MCU的FLASH存储器中。调试适配器通过USB/以太网与PC端相连,遵从调试协议JTAG/串行线调
试协议,通过MCU的调试访问端口(DAP),经存储器访问端口模块(AHB‑AP)将调试适配器发
来的命令最终转换为基于高级高性能总线(AHB)的协议,AHB‑AP模块与MCU内部总线系统相
连,使得调试适配器可以访问所有存储器、外设、调试部件以及处理器内的调试寄存器,从
而完成编程源(上位机)到编程目标(MCU)的数据传输任务。
[0003] 在现有的FLASH编程方法中,大部分使用FlashLoader将代码下载到目标MCU的FLASH存储器中。这种方法将目标MCU的内核寄存器作为上位机与MCU之间的参数和指令的
交换区。MCU运行过程中,上位机无法访问目标MCU的内核寄存器,所以MCU每完成一轮数据
块的编程并返回应答至内核寄存器后,都会产生中断,直到上位机在内核寄存器中读取分
析应答并写入下一轮操作的参数和指令后,MCU才重新运行并开启下一轮数据编程。内核寄
存器的访问速度很慢,同时MCU从停止状态到运行状态需要时间开销,如此经过多轮的编程
操作后,造成了耗时多效率低的问题,不能很好地应对复杂的编程情况。
[0004] 因而,现有的FLASH编程实现方法还有待改进和提高。

发明内容

[0005] 本申请的目的在于提供一种嵌入式闪存高速编程的实现方法,使得MCU在FLASH编程过程中不产生中断。
[0006] 本申请公开了一种嵌入式闪存高速编程的实现方法,用于实现编程系统中闪存的编程,所述编程系统包括:上位机、调试接口和微控制器,所述微控制器包括静态存储器和
闪存,所述静态存储器包括程序代码区、控制交换区和数据缓冲区,所述上位机通过所述调
试接口与所述微控制器在所述静态存储器中进行命令和数据的传输,其中,所述方法包括
如下步骤:
[0007] 所述上位机通过所述调试接口获取所述静态存储器和所述闪存的参数,并将闪存编程代码写入所述程序代码区;
[0008] 所述微控制器运行所述程序代码区中的闪存编程代码并将正常运行标志写入所述控制交换区;
[0009] 所述上位机读取所述正常运行标志,配置数据在所述闪存中的写入地址,并且,将待写入数据传输至所述数据缓冲区,将操作命令写入所述控制交换区;
[0010] 所述微控制器读取所述操作命令和所述写入地址,将所述数据缓冲区中的待写入数据写入所述闪存后在所述控制交换区写入操作结果和编程结果应答;
[0011] 所述上位机获取所述编程结果应答,并根据已写入所述闪存的数据的大小修改所述写入地址用于对所述闪存进行下一轮编程;
[0012] 其中,所述微控制器在所述编程系统的运行过程中不产生中断。
[0013] 在一个优选例中,所述控制交换区包括参数区和指令区,所述参数区用于存储所述写入地址和所述操作结果,所述指令区用于存储所述操作命令、所述正常运行标志和所
述编程结果应答。
[0014] 在一个优选例中,根据所述已写入所述闪存的数据的大小修改所述写入地址的步骤,还包括:将所述写入地址加上已写入所述闪存的数据的大小生成新的写入地址。
[0015] 在一个优选例中,获取所述静态存储器和所述闪存参数的步骤,还包括:所述上位机判断所述写入地址是否大于所述闪存的最大存储地址,如大于,则编程结束。
[0016] 在一个优选例中,还包括:所述上位机判断待写入的数据是否全部传输到所述数据缓冲区,如全部传输完成,则编程结束。
[0017] 在一个优选例中,还包括:所述微控制器若在一定时间内未读取到控制交换区的指令,则全部传输完成,编程结束。
[0018] 本申请还公开了一种嵌入式闪存的编程系统,包括:上位机、调试接口和微控制器,所述微控制器包括静态存储器和闪存,所述静态存储器包括程序代码区、控制交换区和
数据缓冲区,所述上位机通过所述调试接口与所述微控制器在所述静态存储器中进行命令
和数据的传输,其中,所述微控制器被配置为执行如下步骤:
[0019] 提供所述静态存储器和所述闪存的参数供所述上位机获取;
[0020] 运行所述上位机通过所述调试接口写入所述程序代码区中的闪存编程代码;
[0021] 将正常运行标志写入所述控制交换区供所述上位机读取;
[0022] 读取所述上位机写入所述控制交换区中的操作命令和所述上位机配置的数据在所述闪存中的写入地址;
[0023] 将所述上位机传输至所述数据缓冲区中的待写入数据写入所述闪存后在所述控制交换区写入操作结果和编程结果应答供所述上位机获取。
[0024] 在一个优选例中,所述控制交换区包括参数区和指令区,所述参数区用于存储所述写入地址和所述操作结果,所述指令区用于存储所述操作命令、所述正常运行标志和所
述和编程结果应答。
[0025] 在一个优选例中,所述上位机将所述写入地址加上已写入所述闪存的数据的大小生成新的写入地址,并且,所述上位机判断所述写入地址是否大于所述闪存的最大存储地
址,如大于,则编程结束。
[0026] 在一个优选例中,所述微控制器若在一定时间内未读取到控制交换区的指令,则全部传输完成,编程结束。
[0027] 相对于现有技术,本申请至少具有以下有益效果:
[0028] 本申请中,在SRAM控制交换区进行上位机和MCU参数和应答的交互,操作控制交换区比传统操作寄存器的方法速度更快。同时,MCU的持续运行可以避免MCU从停止状态到运
行状态所需的时间开销。由于SRAM数据缓冲区内存有限,在FLASH编程过程中,上位机往往
需要分多次将目标数据传入SRAM数据缓冲区,每轮数据传输所节省的时间依次叠加,因此
本发明极大地提高了嵌入式FLASH编程效率。
[0029] 本说明书中记载了大量的技术特征,分布在各个技术方案中,如果要罗列出本申请所有可能的技术特征的组合(即技术方案)的话,会使得说明书过于冗长。为了避免这个
问题,本说明书上述发明内容中公开的各个技术特征、在下文各个实施方式和例子中公开
的各技术特征、以及附图中公开的各个技术特征,都可以自由地互相组合,从而构成各种新
的技术方案(这些技术方案均应该视为在本说明书中已经记载),除非这种技术特征的组合
在技术上是不可行的。例如,在一个例子中公开了特征A+B+C,在另一个例子中公开了特征A
+B+D+E,而特征C和D是起到相同作用的等同技术手段,技术上只要择一使用即可,不可能同
时采用,特征E技术上可以与特征C相组合,则,A+B+C+D的方案因技术不可行而应当不被视
为已经记载,而A+B+C+E的方案应当视为已经被记载。

附图说明

[0030] 图1为本申请一实施例的编程系统的结构示意图。
[0031] 图2为本申请一实施例的嵌入式闪存高速编程的实现方法的流程图。
[0032] 图3为本申请一实施例的编程过程中上位机与MCU的状态示意图。
[0033] 图4为本申请一实施例的编程过程中上位机与MCU的时序示意图。

具体实施方式

[0034] 在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化
和修改,也可以实现本申请所要求保护的技术方案。
[0035] 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请的实施方式作进一步地详细描述。
[0036] 本申请第一实施方式公开了一种嵌入式闪存高速编程的实现方法,用于实现编程系统中闪存的编程。图1示出了编程系统的结构示意图,编程系统包括上位机10、调试接口
20和微控制器(MCU)30。微控制器30包括静态存储器(SRAM)31和闪存(FLASH)32,静态存储
器31包括程序代码区311、控制交换区312和数据缓冲区313,上位机10通过调试接口20与微
控制器30在静态存储器中进行命令和数据的传输。在一个实施例中,控制交换区312包括参
数区和指令区,参数区用于存储写入地址和操作结果,指令区用于存储操作命令、正常运行
标志和编程结果应答。
[0037] 参考图2所示,嵌入式闪存高速编程的实现方法包括如下步骤:
[0038] 步骤101,上位机10通过调试接口20获取静态存储器31和闪存32的参数,并将闪存编程代码写入程序代码区311。
[0039] 本实施中的上位机10指PC机与所需要的调试器/编程器。PC编译应用程序,形成可执行映像文件,再由上位机通过调试访问端口DAP对目标MCU进行FLASH高速编程。
[0040] 步骤102,微控制器20运行程序代码区311中的闪存编程代码并将正常运行标志写入控制交换区312。
[0041] 步骤103,上位机10取正常运行标志,配置数据在闪存32中的写入地址,并且,将待写入数据传输至数据缓冲区313,将操作命令写入控制交换区312。
[0042] 步骤104,微控制器30读取操作命令和写入地址,将数据缓冲区313中的待写入数据写入闪存32并在控制交换区312写入操作结果和编程结果应答。
[0043] 步骤105,上位机10获取编程结果应答,根据已写入闪存的数据的大小修改写入地址用于对闪存进行下一轮编程,并判断写入地址是否大于闪存32的最大存储地址,如大于,
则编程结束。
[0044] 在一个实施例中,根据已写入闪存的数据的大小修改下一轮写入地址的步骤,还包括:将写入地址加上已写入闪存的数据的大小生成新的写入地址。
[0045] 在一个实施例中,上位机10判断待写入的数据是否全部传输到数据缓冲区,如全部传输完成,则编程结束。
[0046] 在一个实施例中,微控制器30若在一定时间内未读取到控制交换区的指令,则全部传输完成,编程结束。
[0047] 本申请中,微控制器30在编程系统的运行过程中不产生中断。
[0048] 为了能够更好地理解本说明书的技术方案,下面结合一个具体的例子来进行说明,该例子中罗列的细节主要是为了便于理解,不作为对本申请保护范围的限制。
[0049] (一)方法概论
[0050] FLASH高速编程的实现方法包括如下:
[0051] 步骤1、上位机写入FLASH编程代码至SRAM程序代码区,等待编程目标MCU初始化的完成。
[0052] 步骤2、保持上位机代码运行,操作控制交换区与目标数据的传输。
[0053] 步骤3、保持MCU编程代码运行,操作控制交换区与目标数据的传输。
[0054] (二)上位机与MCU的状态
[0055] FLASH高速编程的过程中,始终保持编程源与编程目标的运行,在控制交换区进行指令交互。随着上位机和MCU状态的改变,配置控制交换区中相应的命令、状态以及参数,从
而决定目标数据的流动方向和流动时间节点。上位机与MCU两者的状态参考附图3。
[0056] 上位机状态:
[0057] 状态S11:写入编程代码
[0058] 上位机将编程代码写入SRAM的程序代码区,并从MCU地址0x0004处取出PC程序指针的初始值,修改PC指针使其指向SRAM中程序首地址0x20000000,完成后上位机进入状态
S12,MCU进入状态S21。
[0059] 状态S12:读取目标程序正常运行标志
[0060] 上位机持续读取控制交换区的目标程序正常运行标志,该标志由MCU配置。当MCU正常运行编程代码后(MCU状态S21),该标志被置位(MCU状态S22)。
[0061] 上位机若读到标志,则进入状态S13;否则持续读取该标志,维持状态S12。
[0062] 状态S13:读取当前数据写入地址
[0063] 首次进入状态S13时,根据上位机获取的外设FLASH与SRAM参数,配置控制交换区中的参数addr,用于表示数据写入FLASH时的首地址值。
[0064] 再次进入状态S13时,读取当前数据写入地址,若addr小于FLASH地址最大值max,进入状态S14;否则维持状态S13,此时上位机已完成所有数据传输,高速编程结束。
[0065] 状态S14:传输数据至SRAM
[0066] 上位机将目标数据传输至SRAM数据缓冲区。数据缓冲区中形成相应大小的数据块(data block)后,上位机进入状态S15。
[0067] 状态S15:配置参数、写入操作命令和运行标志
[0068] 上位机操作控制交换区:在参数区配置MCU执行FLASH操作命令的首地址;在指令区写入命令并置起运行标志。完成后上位机进入状态S16。
[0069] 状态S16:读取编程应答
[0070] 上位机等待MCU返回的编程应答,该应答由MCU配置。当MCU完成相应操作命令后(MCU状态S24),返回结果和应答(MCU状态S25和状态S26)。
[0071] 若上位机读到编程应答,将addr增加data block大小,回到状态S13,进行下一轮数据传输;若未读到编程应答,维持状态S16。
[0072] 编程目标MCU状态:
[0073] 状态S21:运行目标程序
[0074] MCU状态S21由上位机状态S11触发。上位机在SRAM的程序代码区写入编程代码后(上位机状态S11),MCU运行该程序。
[0075] 若程序完成初始化开始正常运行,则MCU进入状态S22;否则维持状态S21。
[0076] 状态S22:写入目标程序正常运行标志
[0077] MCU操作控制交换区:在指令区写入目标程序正常运行标志。完成后MCU进入状态S23,上位机进入状态S13。
[0078] 状态S23:读取操作命令
[0079] MCU持续读取控制交换区的操作命令和运行标志,该命令、标志和相关参数由上位机配置(上位机状态S15)。
[0080] 若MCU读取到操作命令和运行标志,则进入状态S24,根据命令执行操作;否则持续读取命令和标志,维持状态S23。
[0081] 状态S24:MCU执行命令,编程目标数据至FLASH。
[0082] 状态S25:MCU操作控制交换区,在参数区写入编程校验结果。
[0083] 状态S26:MCU操作控制交换区,在指令区写入编程应答。完成后返回状态S23,进行下一轮数据传输。
[0084] (三)上位机与MCU的软件时序
[0085] 针对FLASH写操作命令,附图4详细说明了上位机和MCU的软件执行时序,具体如下:
[0086] 上位机编程时序:上位机将编程代码写入SRAM的程序代码区,等待控制交换区中MCU返回的目标程序正常运行的标志。接收到此信号后,上位机开始进行首轮数据传输,将
数据写入SRAM数据缓冲区,之后向MCU控制交换区写入操作命令和启动操作运行标志,随即
等待MCU编程结果应答。上位机接收到应答后,进行全局编程进度判定,若未完成全局编程,
则进入次轮目标数据传输;反之结束编程。
[0087] 编程目标MCU编程时序:编程代码写入SRAM的程序代码区后,MCU持续读取控制交换区中的操作命令和运行标志。接收到命令和标志后,开始执行数据传输命令,将数据缓冲
区的数据写入FLASH主储存块,返回操作结果和编程应答至控制交换区。之后进行全局编程
进度判定,若未完成,则再次等待上位机向发出的操作命令和运行标志;反之结束编程。
[0088] 综上所述,通过上位机与MCU通过多轮数据块传输,完成编程任务。可以达到每128K仅需2.2秒,本发明显著加快了编程速度,提高了编程效率。
[0089] 本申请的第二实施方式中公开了一种嵌入式闪存的编程系统,其结构参考图1所示,包括:上位机、调试接口和微控制器,微控制器包括静态存储器和闪存,静态存储器包括
程序代码区、控制交换区和数据缓冲区,上位机通过调试接口与微控制器在静态存储器中
进行命令和数据的传输,其中,微控制器被配置为执行如下步骤:
[0090] 提供静态存储器和闪存的参数供上位机获取;
[0091] 运行上位机通过调试接口写入程序代码区中的闪存编程代码;
[0092] 将正常运行标志写入控制交换区供上位机读取;
[0093] 读取上位机写入控制交换区中的操作命令和上位机配置的数据在闪存中的写入地址;
[0094] 将上位机传输至数据缓冲区中的待写入数据写入闪存并在控制交换区写入操作结果和编程结果应答供上位机获取。
[0095] 在一个实施例中,控制交换区包括参数区和指令区,参数区用于存储写入地址和操作结果,指令区用于存储操作命令、正常运行标志和和编程结果应答。
[0096] 在一个实施例中,上位机将写入地址加上已写入闪存的数据的大小生成新的写入地址,并且,上位机判断写入地址是否大于闪存的最大存储地址,如大于,则编程结束。
[0097] 在一个实施例中,所述微控制器若在一定时间内未读取到控制交换区的指令,则全部传输完成,编程结束。
[0098] 第一实施方式是与本实施方式相对应的电路结构的实施方式,第一实施方式中的技术细节可以应用于本实施方式,本实施方式中的技术细节也可以应用于第一实施方式。
[0099] 需要说明的是,在本专利的申请文件中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体
或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他
变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅
包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物
品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不
排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本专利的申请
文件中,如果提到根据某要素执行某行为,则是指至少根据该要素执行该行为的意思,其中
包括了两种情况:仅根据该要素执行该行为、和根据该要素和其它要素执行该行为。多个、
多次、多种等表达包括2个、2次、2种以及2个以上、2次以上、2种以上。
[0100] 在本说明书提及的所有文献都被认为是整体性地包括在本说明书的公开内容中,以便在必要时可以作为修改的依据。此外应理解,以上所述仅为本说明书的较佳实施例而
已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之
内,所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范
围之内。
[0101] 在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描述的过程不一定要求示出的特定顺序或
者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的
或者可能是有利的。