ARM片外FIash存储器IAP解决方案

ARM片外FIash存储器IAP解决方案,第1张

  引 言

  以ARM芯片为处理器核的嵌入式应用系统,以其小体积、低功耗、低成本、高性能、丰富的片内资源以及对 *** 作系统的广泛支持,得到了人们越来越多的青睐。在应用编程IAP(InApplicatAion Program)就是这样的自修改程序。它先在RAM存储器中写人数据值,然后使PC指向该存储段,把该段作为程序段来执行。很多ARM7芯片自带IAP处理器,应用其自带的IAP处理器可以方便地对其片内集成的Flash存储器进行在应用编程,但几乎所有的ARM核芯片均不支持片外IAP处理,因为片外Flash存储器是用户选型的,芯片生产厂家无法先知先觉,而不同Flash存储器其编程时序也不尽相同,导致芯片生产厂家无法提供通用的IAP代码。那么,如何对嵌入式系统的片外Flash存储器进行在应用编程呢?这里分两种情况:一是普通代码存放在片外单独1片Flash中,IAP代码在另一片Flash中完成,此时只要依据Flash的 *** 作时序执行IAP代码,完成擦除或写入 *** 作即可。这种情况虽然简单,但应用了2片Flash;而IAP代码很小,一般完全可以集成到1片中,所以这里对这种情况不予考虑。另一种情况是1片Flash中既要存储普通代码,又要实现IAP。

  针对嵌入式应用系统片外Flash存储器IAP无现成方案的问题,介绍一种基于代码重入思想的片外存储器IAP解决方案。结合LPC2210及SST39VFl60芯片,简介两款芯片特点,给出应用连接框图;分析IAP实现要点,并给出IAP的实现代码。下面以Phnips公司的LPC2210 和 Silicon storage Technology 公司的SST39VFl60为例,详细讨论这种情况IAP的解决方案。

  1 硬件结构

  1.1 LPC2210介绍

  1.2 SST39VFl60介绍

  Silicon StoraLge Technology公司的SST39VFl60是一个lM×16b的CMOS多功能Flash器件,单电压的读和写 *** 作,电压范围3.O~3.6 V,提供48脚TSOP和48脚TFBGA两种封装形式。

  该器件主要 *** 作包括读、字编程、扇区/块擦除和芯片擦除 *** 作。擦除和字编程必须遵循一定的时序,表l列出了扇区擦除和字编程过程及时序。擦除或编程 *** 作过程中读取触发位DQ6将得到“1”和“O”的循环跳变;而 *** 作结束后读DQ6,得到的是不变的固定值。这是器件提供的写 *** 作状态检测软件方法。

  1.3 硬件连接

  SST39VF160作为系统的程序存储器,以LPC2210的CSO作为Flash的片选信号,处理器配置Boot引脚为16位数据总线宽度后,上电可直接执行SST39VFl60中代码。此Flash芯片为16位数据宽度,无字节控制总线,所以应用中不使用LPC2210的BLS引脚。系统结构示意图如图l所示。

  

ARM片外FIash存储器IAP解决方案,第2张

 

  2 软件实现

  2.1 IAP实现要点分析

  在嵌入式应用系统中,通常要求记录一些现场的传感、交互输入数据,通常把数据记录在Flash存储器中,以便下次上电能获取以前的数据。如果系统程序和数据分开存储,那么只要对存放数据的Flash器件进行编程即可。然而大多数嵌入式系统,程序和需保存的数据都共存于同一Flash存储器中,那么是否也如前所述,可对Flash存储器直接编程呢?理论和实践都表明不可以。先从理论上计算:LPC22lO允许的芯片核工作频率(CCLK)范围是10~60 MHz,存储器读访问长度由存储器组配置寄存器BCFG中读访问的长度域控制WSTl控制,其最大可用长度为35个CCLK,而SST39VFl60的扇区擦除典型时间为18 ms。下面是计算算式:

  TRDmax=RDLenmax/CCLKmin=35/10×10一6=3.5 μs

  .TD=18 ms》3.5μs

  其中:TRDmax—最大读访问时间;

  RDLenmix——最大读访问可用长度;

  CCLKmin——最小核工作时钟频率;

  Tp——扇区擦除典型时间。

  算式得出扇区擦除典型时间远大于最大读访问时间。这样一来,如果再给某Flash写数据,同时于其中预取指,那么因F1ash在执行命令期间,对其他 *** 作不响应,预取出的必定是其数据引脚上的不确定数据,预取指失败。实践也表明,如果在程序执行过程中,对同一Flash进行扇区擦除,必定引起预取指中断。

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

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

  

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2713822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存