Flash烧录固化
程序开发完成需要将程序固化到Flash中,或称为烧录到Flash,每一个芯片都有对应的Flash启动功能,但是在开发过程中,许多集成开发环境针对特定的微控制器芯片提供了烧录Flash的工具,如集成开发环境Keil,IAR,VIVADO,CCS都提供了烧录Flash的GUI工具。
由于每个芯片的差异性,不同的芯片需要从不同的Flash启动,集成开发环境一般提供的是最常用的Flash烧录功能,如ARM-CortexM系列多从芯片内置的Flash启动,Xilinx的FPGA和Zynq从外部SPI Flash启动,TI的C2000从内置Flash启动,C6000从外部SPI Flash、外部NORFlash、I2C EEPROM启动。当开发者使用某个芯片需要从某种Flash启动,比如eMMC启动,而集成开发环境未提供针对该Flash的烧录工具,开发者需要绕开使用微控制器厂商提供的下载工具的方式。也可以自行开发烧录工具,这时,开发者需要知道烧录器的工作原理。
CMSIS系列Flash烧录原理
Open-CMSIS-Pack包里提供了针对一些常见的CortexM3、CortexM4系列的微控制器内置Flash烧录算法,所谓的"算法",其实就是Keil开发环境下的烧录工具调用的程序,烧录工具在烧录Flash的时候需要选择特定芯片型号,才能下载,烧录工具只支持一些厂商的芯片,其支持的芯片会在开发环境下存在对应芯片型号的FLM文件,部分设计arm微控制器芯片的厂商可以使用该工具开发适配Keil开发环境未定义的芯片。
Flash是在芯片内部,Flash的擦除,编程等操作是需要微控制器针对Flash的控制器进行一系列的控制流程才能完成Flash的擦除和编程,因此,这一步骤是必须靠微控制器运行相应的程序才能完成。上述描述的FLM文件就是一个可以加载到微控制器运行的可执行程序。
烧录Flash时,必须是处于调试的工作环境,也就是通过仿真器将板卡与调试机相连,并在集成开发环境下使用烧录工具才能进行烧录。
当开发人员在调试程序时,仿真器正常连接,开发环境配置好的情况下,往往需要进行下列操作,S1启动调试,会将程序加载到芯片的Flash或RAM中,程序运行并暂停到main函数入口;S2,运行程序,知道遇到断点或者程序程序运行结束;S3,暂停程序运行;S4,在暂停时查看芯片的内存数据,或变量值;S5,程序暂停时还可以修改内存数据;S6,结束仿真操作。这些操作都是人为的操作,如果是编写了一套预定义程序来执行S1-S6中的操作,既能控制程序的行为,也可以控制程序中的数据。
Keil烧录工具的流程
在了解了程序调试的基本操作,在查看CMSIS文档,我们可以分析出烧录工具在烧录过程的基本原理和流程,Keil的烧录工具分为三个主流程,擦除,烧录,校验,整个过程需要工具烧录和烧录算法相互配合,烧录工具负责流程的控制,参数的配置,程序的加载,数据的加载等,烧录算法程序负责对Flash的初始化,接收烧录工具传递的控制流程参数,执行对Flash擦除和编程等操作。
擦除流程,负责擦除对应的扇区,CMSIS文档中的擦除流程图如图所示,
S11.烧录工具加载Flash算法程序(即对应芯片的FLM文件,如STM32F4xx_2048.FL