一种片外Flash存储器IAP的方案

时间:2012-11-01来源:网络

系统结构示意图

2.软件实现

2.1 IAP实现要点分析

在嵌入式应用系统中,通常要求记录一些现场的传感、交互输入数据,通常把数据记录在Flash存储器中,以 便下次上电能获得以前的数据。如果系统程序和数据分开存储。那么只要对存放数据的Flash器件进行编程即可。然而大多数嵌入式系统,程序和需保存的数据都共存于同一Flash存储器中,那么是否也如前所述,可对Flash存储器直接编程呢?理论和实践都表明不可以。

先从理论上计算:LPC2210允许的芯片核工作频率(CCLK)范围是10-60MHz,存储器读访问长度由存储器组配置寄存器BCFG中读访问的长度域控制WST1控制,其最大可用长度为35个CCLK,而SST39VF160的扇区擦除典型时间为18ms。下面是计算算式:

TRDmax=RDLenmax/CCLKmin=35/10×10-6=3.5μs
Tp=18ms>>3.5μs其中:TRDmax--最大读访问的时间;
RDLenmax--最大读访问可用长度;
CCLKmin--最小核工作时钟频率;
Tp--扇区擦除典型时间。
算式得出扇区擦除典型时间远大于最大读访问时间。这样一来,如果再给某FLASH写数据,同时于其中预取指,那么因Flash执行命令期间,对其他操作不响应,预取出的必定是其数据引脚上的不确定数据,预取指失败。实践也表现,如果在程序执行过程中,对同一Flash进行扇区擦除,必定引起预取指中断。

为了解决在同一Flash芯片存放程序并IAP这一问题,引进代码重映射的思想。所谓重映射就是代码先自复制到制定存储区,然后跳转到制定区的起点开始执行。这里,IAP程序先自复制到LPC2210片内SRAM中,然后跳转到SRAM执行IAP代码。前面过说,ARM7为冯·诺依曼结构,这就为IAP程序重映射提供了可能。

编写可重映射代码的关键是要解决程序中相对偏移的问题,ARM7指令系列中涉及相对偏移的指令主要有LDR/STR以跳转指令。这里的解决方案是:凡涉及偏移值的指令通通采用基址变址寻址方式,以PC寄存器作基址寄存器,以立即数为变址,这样当程序块整块移动时,要加载的数据或跳转的地址与当前PC值的偏移值固定,解决了相对偏移问题。

2.2 扇区擦除

移值固定,解决了相对偏移问题。事先编程在Flash中的程序前自复制到SRAM制定的位置,然后,赋PC为SRAM中扇区编程代码段的起点ERASEPART。程序于SRAM中的ERASEPART起点开始执行,按照SST39VF160扇区擦除的时序要求开始擦除。按照ARM公司提出的ATPCS规定,C语言程序调用汇编程序时,寄存器R0-R3传递参数,返回值由寄存器R0传递原则,扇区擦除程序的一个参数,要擦除的扇区号,由R0传递;返回参数置于R0,扇区擦除成功返回"1",否则返回"0"。

2.3 字编程

程序于SRAM中的PROGRAMPART起点开始执行,按照SST39VF160字编程的时序要求开始编程。入口参数有三个,一次为编程地址、数据起始地址、编程数据长度。字编程成功返回"1",否则返回"0"。

3.结论

在嵌入式应用系统中,IAP是极为有效的一种技术。根据本文提出的方案,在实际应用中只需针对选用的Flash,更改特定的擦、写操作代码就可实现系统片外存储器的在应用编程。本文提出的IAP代码重入到SRAM执行的方法,有效地解决了应用无片内程序存储器的32位ARM处理器的嵌入式系统IAP难题,有很大的应用价值。

1 2

关键词: 片外Flash 存储器 IAP

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版