ARM片外Flash存储器IAP解决办法
的必定是其数据引脚上的不确定数据,预取指失败。实践也表明,如果在程序执行过程中,对同一Flash进行扇区擦除,必定引起预取指中断。
为了解决在同一Flash芯片存放程序并IAP这一问题,引进代码重映射的思想。所谓重映射就是代码先自复制到指定存储区,然后跳转到指定区的起点开始执行。这里,lAP程序先自复制到LPC2210片内SRAM中,然后跳转到SRAM执行lAP代码。前面说过,ARM7为冯middot;诺依曼结构,这就为IAP程序重映射提供了可能。
编写可重映射代码的关键是要解决程序中相对偏移的问题,ARM7指令系列中涉及相对偏移的指令主要有LDR/STR以及跳转指令。这里的解决方案是:凡涉及偏移值的指令通通采用基址变址寻址方式,以PC寄存器作基址寄存器,以立即数为变址,这样当程序块整块移动时,要加载的数据或跳转的地址与当前Pc值的偏移值固定,解决了相对偏移问题。
2.2 扇区擦除
事先编程在Flash中的程序先自复制到SRAM指定的位置,然后,赋PC为SRAM中扇区编程代码段的起点ERASEPART。程序于SRAM中的ERASEPART起点开始执行,按照SST39VF160扇区擦除的时序要求开始擦除。按照ARM公司提出的ATPCS规定,C语言程序调用汇编程序时,寄存器R0一R3传递参数,返回值由寄存器RO传递原则,扇区擦除程序的一个参数,要擦除的扇区号,由RO传递;返回参数置于R0,扇区擦除成功返回“1”,否则返回“0”。
2.3 字编程
程序于SRAM中的PROGRAMPART起点开始执行,按照SST39VFl60字编程的时序要求开始编程。入口参数有三个,依次为编程地址、数据起始地址、编程数据长度。字编程成功返回“1”,否则返回“0”。
3 结论
文中提出的IAP代码重入到SR—kM执行的方法,有效地解决了应用无片内程序存储器的32位ARM处理器的嵌入式系统IAP难题,有很大的应用价值。
- S3C2440A嵌入式手持终端电源管理系统设计(01-11)
- 用于低功耗SoC设计的自适应电压调节技术(07-28)
- 基于TPS6211X的FPGA高效电源设计(08-09)
- 满足多媒体处理器动态需求的电源管理技术(08-12)
- 嵌入式Linux的动态电源管理技术(09-03)
- 复杂SoC设计中的功率管理 (下)(09-17)