Flashloader简介

来源:互联网 发布:淘宝客服常用语 编辑:程序博客网 时间:2024/05/16 09:46

本文参考iar FlashLoaderGuider

一、简介

大多数开发板存储代码的存储器都是flash。通常应用程序不能直接通过C-SPY下载到flash存储器中的。而是通过一段专门的程序-FlashLoader将代码下载到Flash器件中。

flashloader实际上就是一段小程序,它能对Flash器件编程。flashloader其实就是一些函数集,主要用来擦除,写入FlashC-SPY下载flashloaderRAM中。C-SPYPC指针指向flash loader里的函数集来运行。当函数返回,会产生一个中断。C-SPY就会知道函数已经完成,进而继续调用flash loader。简单的说,C-SPYflash loader调用函数。

 

1、流程简介

   Flashloader的作用:你需要将程序下载到flashloader,但是C-SPY只能够将数据下载到RAM

 

步骤

① 将flash loader程序下载到RAM

 

 

② 将应用程序的映像下载到RAM缓冲区中

 

 

③ flash loader同过C-SPY启动。将RAM Buffer里读出的数据编程到Flash

 

 

④ 现在,应用程序的映像文件就存在与Flash中,并可以从flash中启动了。在RAM中的flash loader此时已不在需要,这时RAM可以完全为在flash中的应用程序所用了。

 

 

实际应用中,过程远比上述复杂。比如,RAM  Buffer空间小于Image时,对Flash的编程就要分多个步骤来进行。


2flash loader的元素

①  flash loader 装载程序

    flashloader 配置文件(flash存储器配置文件,flash存储器系统配置文件)

 

②  the flash memory device configuration files

    是XML文件,后缀名.flash;描述诸如flash的基地址,block 和 page大小还有用哪个flashloader装载程序

 

③  flash memory system configuration file

    是XML格式文件,后缀名为.board。主要是让C-SPY了解一下开发板的信 息。比如如果开发板有超过一个的flash需编程。那么.board文件也需指定属于不同flash器件的映射地址范围。

 

 

3、flash的一些概念

   页:最小写入单位

   快:最小擦除单位

   基地址:flash的起始地址,可以被重映射。


二、flash编程具体步骤

flash loader中最重要的两个函数就是 FlashWriteFlashEraseFlashWrite以页为单位将RAM中的镜像文件写入flashFlashEraseblock为单位擦除Flash

在将image文件中数据通过flashloader中的FlashWrite函数写入flash时,有以下限制:

①  写操作是顺序执行,且从最低地址开始。

②  buffer大小始终是page的整数倍

③  不管数据大小是不是一页大小,buffer都被填充为一页大小。

 

 

不考虑开发板上多个flash器件的flashloader的详细步骤。

 

① C-SPY读取A.board文件,指定a.flash文件选定所需的flashloader

 

② C-SPYflashloader下载到RAM中。

 

③ C-SPYPC值设定为FlashInit函数标号处,然后调用FlashInit()函数。

 

④ FlashInit()将后面用到的参数和数据写入RAM buffer中。

 

⑤ FlashInit执行完后会产生一个断点,C-SPY重新获得控制权。

 

⑥ C-SPYapplicationimage文件根据flash的页,块大小合理划分。

 

⑦ 当flash的块在写入数据之前必须将其擦除

 

⑧ C-SPYPC指向FlashErase函数处的标号并开始执行。函数一旦执行完便产生中断。

 

⑨ C-SPY将一些所需数据写入到RAM buffer

 

⑩ C-SPYPC指向FlashWrite函数的标号处并开始执行。但函数执行完,产生一个断点。

 

11 执行完跳到main

 

三、自己写Flashloader

flashloader包括两个部分

①  framework source code :由IAR提供

②  与特定器件有段的code:需自己写



例:下例提供一个简单的从Ram中拷贝数据到flash的编程算法


FlashWriteFlashErase用到的关于memory基地址是在FlashInit中提供的。



0 0
原创粉丝点击