ARM片外FIash存储器IAP解决方案
lash写数据,同时于其中预取指,那么因F1ash在执行命令期间,对其他操作不响应,预取出的必定是其数据引脚上的不确定数据,预取指失败。实践也表明,如果在程序执行过程中,对同一Flash进行扇区擦除,必定引起预取指中断。
为了解决在同一Flash芯片存放程序并IAP这一问题,引进代码重映射的思想。所谓重映射就是代码先自复制到指定存储区,然后跳转到指定区的起点开始执行。这里,lAP程序先自复制到LPC2210片内SRAM中,然后跳转到SRAM执行lAP代码。前面说过,ARM7为冯·诺依曼结构,这就为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难题,有很大的应用价值。
IAP 解决方案 存储器 FIash 片外 ARM 相关文章:
- MSP43F149系列单片机的IAP功能设计(09-08)
- 基于IAP的STM32程序更新技术(01-23)
- 基于IAP和Keil MDK的远程升级设计(12-19)
- STM32 IAP 无法运行用户程序的解决方法(12-03)
- STC单片机 EEPROM/IAP 功能测试程序演示(12-01)
- 9G-STM32 简易BOOT及XMODEM串口IAP移植过程简介(11-29)