andrewpei 发表于 2005-3-10 17:09 Philips ARM ←回来版面 开场白 最近在学习ARM的进程中,遇到了一些曾经在8位机、16位机运用中所没有见过的专业术语。其间,比较困扰和费事的两个名词术语便是“Boot”与 “Remap”。一起,在网上也常常见到有网友就这两个技能名词提出疑问。好在当今网络是如此兴旺,使得咱们能够很快就得到许多教师和老鸟的回答。通过这一段时刻的阅览与实践,算是将这个概念根本给理出了个条理,借此机会,以自己的了解总结一下,贴到BBS上来,与广阔网友们共享,如有不当之处,板砖且慢,因为我贴此文的意图是抛“砖”引“玉”,不是引“砖”!Bow! 两个专业名词—非易失性存储器和易失性存储器非易失性存储器:指掉电后在适当长时刻内仍然能有用保存数据的存储器。如EEPROM, EPROM,FLASH等。易失性存储器: 指掉电后敏捷损失存储才能的存储器。如SRAM,SDRAM等。 参阅读物:3G年代存储器众生相(电子规划技能2005年第2期) OK,悉数安排妥当,Lets GO! 导言 跟着半导体工艺技能与处理器规划技能的不断进步,嵌入式处理器的速度愈来愈快;而非易失性存储器的读取速度却远远跟不上CPU的开展。传统的单片机运转形式——机器代码存储在非易失性存储器(如ROM,FLASH),在运转时由CPU直接从其间取出指令履行——逐步显得无能为力。假如持续沿袭传统的程序运转形式,那么在绝大多数时刻内高速CPU将处于闲暇等候情况,这既浪费了CPU的核算才能,也无法完结高密度数据流的实时处理与传输。而在短期之内,半导体工业界尚无法完结低成本的非易失性高速存储器技能。为了处理上述处理器和非易失性存储器之间速度不匹配的对立,工程师们在嵌入式体系领域内引用了 Boot技能和Remap技能。而要正确了解Boot技能和Remap技能,有必要先树立Memory Map(存储器映射)的概念。 技能概念描绘 Memory Map 核算机最重要的功用单元之一是Memory。Memory是很多存储单元的调集,为了使CPU精确地找到存储有某个信息的存储单元,有必要为这些单元分配一个彼此差异的“身份证号”,这个“身份证号”便是地址编码。在嵌入式处理器内,集成了多种类型的Memory,一般,咱们称同一类型的Memory为一个 Memory Block。一般情况下,处理器规划者会为每一个Memory Block分配一个数值接连、数目与其存储单元数持平、以16进制标明的自然数调集作为该Memory Block的地址编码。这种自然数调集与Memory Block的对应联系,便是Memory Map(存储器映射),有时也叫Address Map(地址映射)。实践上,Address Map在字面含义上愈加恰当。 需求着重的是,Memory Map是一个逻辑概念,是核算机体系在(上电)复位后才树立起来的。Memory Map适当于这样一个数学函数:函数的输入量是地址编码,输出量被寻址单元中的数据。当核算机体系掉电后或复位时,这个数学函数不复存在,只剩下核算机体系中完结这个数学函数的物理根底——电路衔接。也能够这样以为:Memory Map是核算机体系(上电)复位时的准备动作,是一个将CPU所具有的地址编码资源向体系内各个物理存储器块分配的主动进程。 Boot/Bootload Boot在核算机专业英文中的意思是“引导”,它是核算机体系(上电)复位后CPU的第一个机器动作。那么,Boot引导的是什么呢?简要地说,Boot 便是引导CPU怎么装入机器指令。最简略的Boot动作便是8位单片机体系复位后从复位向量中取出跳转指令,转移到用户程序代码段履行的这个进程。 一般,在核算机体系中,(上电)复位后除了履行Boot动作,还跟跟着一个Load进程。一般情况下,该Load从低速非易失性存储器中“转移”一些数据到高速易失性存储器中。Boot和Load接连履行,趁热打铁,咱们称之为Bootload。最典型的比如之一便是DSP实时信号处理体系,体系上电后,将存储在EEPROM中的实时信号处理程序复制到体系的RAM中,然后CPU直接从RAM中读取机器指令运转。 Remap Remap与核算机的反常处理机制是严密相关的。 完好的核算机体系有必要具有反常处理才能。当反常发生时,CPU在硬件驱动机制下跳转到预先设定的存储器单元中,取出相应的反常处理程序的进口地址, 并依据该进口地址进入反常处理程序。这个保存有反常处理程序进口地址的存储器单元便是一般所说的“反常进口”,单片机体系中也叫“中止进口”。实践的核算机体系有多种类型的反常,CPU规划人员为了简化芯片规划,一般将一切的反常进口会集起来置于非易失性存储器中,并在体系上电时映射到一个固定的接连地址空间上。坐落这个地址空间上的反常进口调集便是“反常向量表”。 体系上电后的反常向量表是从低速非易失性存储器映射得到的。跟着处理器速度的不断进步,很自然地,人们期望核算机体系在反常处理时也充沛发挥出CPU的处理才能,而非易失性存储器的读取速度使得CPU只能以多个闲暇等候同期来获取反常向量,这样就约束了CPU核算才能的充沛发挥。尤其是非易失性存储器位宽小于CPU位宽时,这种负面的影响愈加显着。所以,Remap技能被引进,以进步体系对反常的实时呼应才能。 从Remap这个英文单词的构成不难看出,它是对此前已树立的存储器映射的再次修正。从本质上讲,Map和Remap是相同的,都是将地址编码资源分配给存储器块,只不过二者发生的时刻不同:前者在体系上电的时刻发生,是任何核算机体系都必需的;而后者在体系上电后安稳运转的时刻发生,对核算机体系规划人员来说是可选的。典型的8位单片机体系中,就没有运用Remap技能。 完好的Remap进程实践上一般始于体系的Bootload进程。详细履行动作为:Bootload将非易失性存储器中的反常向量复制到高速易失性存储器块的一端,然后履行Remap指令,将坐落高速易失性存储器中的反常向量块映射到反常向量表地址空间上。尔后,体系若发生反常,CPU将从已映射到反常微量表地址空间的高速非易失性存储器中读取反常向量。详细到典型的ARM7嵌入式体系中,便是由Bootload程序将片内或片外的Flash/ROM中的反常向量复制到片内的SRAM中指定的存在器单元中,然后再履行Remap指令。因为片内的SRAM数据位宽一般与CPU数据位宽持平,因而CPU能够无等候地全速跳入反常处理程序,取得最佳的实时反常呼应。 LPC2000的Boot和Remap解析 从上面的技能描绘中可知,典型的Boot、Memory Map和Remap的时刻次序应该是:Memory Map-〉Boot-〉Remap。可是,LPC2000处理器中这三个动作的次序却有一点不同,依次为Memory Map-〉Remap-〉Boot-〉Remap,最终一个Remap进程是用户可选的,可履行也可不履行。每逢体系复位今后,LPC2000处理器就依次履行上述四个进程,下面剖析这几个阶段。为简化起见,以总线不敞开的LPC2104处理器为例。 LPC2106的片上存储器分类 LPC2104片内的存储器类型只要两种:Flash块和SRAM块。其间,部分Flash存储器块在芯片出厂前由Philips写入了Bootload 程序和64字节的反常向量表。为便利评论,咱们称这部分Flash块为Bootload子块,其巨细为8KB。如前所述,在处理器未上电之前或复位时,Flash块和SRAM块仅仅是两个没有地址编码的物理存储器,与地址编码没有树立起实践的映射联系。 Memory Map LPC2104处理器(上电)复位今后,Flash块和SRAM块的地址映射成果为:SRAM占有0x40000000—0x40003FFF规模的地址编码空间;Flash占有0x00000000—0x0001FFFF规模的地址编码空间。该映射成果是个中心态,只存在极短的时刻,运用体系开发人员无法看到这个中心态。处理器内核外围模块的地址映射成果为0xE0000000—0xFFFFFFFF.

Remap(可选) 最终这一步可选的Remap动作彻底处于用户的操控之下,Remap的对象是片内SRAM存储器块的反常向量部分,合计64字节巨细。用户能够编程决议何时Remap、Remap之后是否再修正反常向量表以及怎么修正反常向量表等等。需求着重的是,引发Remap动作的指令与树立SRAM块中反常向量的一切功用代码悉数驻留在Flash块的用户编程区中,是用户运用软件的一部分。 曾经有网友对Philips在LPC2000系列处理器中引进这个可选的Remap功用提出质疑:LPC2000系列处理器片内的Flash块被切割成了两组,每组都装备了彼此独立的128位宽度的读取缓冲,在绝大多数情况下,CPU从Flash块的拜访是全速进行的,不存在有等候的情况;另一方面,一般运用LPC2000的嵌入式体系并不需求动态地改动反常向量表。因而,对片内SRAM进行Remap后,并不能进步处理器对反常的呼应才能,实践含义不大。 事实上,LPC2000系列处理器引进SRAM的Remap功用关于IAP操作具有重要的含义。相关于其它根据ARM7DMI内核的处理器而言,LPC2000系列处理器有一个独具特色的功用—IAP。在IAP擦除/写入操作时,片上Flash块,包含该块上的反常向量部分,是无法被拜访读取的,为了在IAP擦除/写入操作时有用地呼应反常,有必要在调用IAP擦除/写入操作之前,将SRAM中的反常向量部分提早映射到体系的反常向量表地址空间上。(待续)