您的位置 首页 嵌入式

arm(lpc22xx)存储器寻址

LPC2220/2230/2290没有内部FLASH片内FLASHLPC2000系列ARM的片内FLASH通过128位宽度的总线与ARM内核相连,具…

LPC2220/2230/2290没有内部FLASH

片内FLASH

LPC2000系列ARM的片内FLASH经过128位宽度的总线与ARM内核相连,具有很高的速度,加上后边要介绍的存储器加快功用,能够使程序直接在FLASH上运转,而不需求象其它公同的ARM微操控器相同把程序仿制到RAM中运转

对处内FLASH的编程有三种方法来完成

(1)运用JTAG仿真/调试,经过芯片的JTAG接口下载程序

(2)运用在体系编程技术(ISP),经过UART0接口下载程序

(3)运用在运用编程技术(IAP)运用这种方法,能够完成用户程序运转时对FLASH进行擦除/编程,这样就为数据存储和现场固件的晋级都带来极大的灵活性.

片内静态RAM

LPC2000系列ARM的片内RAM为静态的RAM,它能够用作代码和数据的存储.

片外存储器

CPU外部扩展衔接的存储器芯片称为片外存储器.它们都具有数据线、地址线和操控线。(LPC2100系列不存在这种总线接口:所以只能经过I/O口的模仿总线时序来操作片外存储器,或许运用I2C、SPI等串行接口来连片外存储器)

LPC2200系列ARM微操控器具有契合ARM公司的外部存储器接口,经过它能够衔接8位、16位或32位的片外存储器。最多能够扩展4个BAND 的存储器组,每存储器组寻址规模最大为16M。实践庆用中,运用16位总线宽度的存储器能够获得较好的性价比

片外存储器的读写

关于外扩的SRAM存储器只需求一条LDR(STR)指令就能够进行读写操作。

关于外扩的FLASH(NOR型),能够运用LDR指令读取数据,可是不能运用STR指令直接写数据,需求依据FLASH芯片写操作时序进行操控,完成FLASH的擦除编程。假如需求将程序代码烧写到FLASH芯片内,则需求在CPU内运转一个装载程序Loder程序.

存储器映射

给存储器分配地址的进程称为存储器映射。

存储器的重映射:有部分存储器单元能够出现在不同听地址上

留意:这个重映射不是将对映射单元内容的仿制,而仅仅将多个地址指向了同一个存储单元,这个作用是经过芯片内部的"存储器办理部件"完成的.

引导块(Boot Block)及其得映射

BOOT BLOCK是芯片规划厂家在LPC2000系列ARM内部固定的一段代码,用户无法对其修正或删去.代码在芯片复位后首要运转.其功用为 判别运转哪个存储器上的程序\查看用户代码是否有用\判别芯片是否加密\芯片的在运用编程以及在体系编程.

BOOT BLOCK占用了片内FLASH的空间(除LPC2138的BOOT BLOCK不占用FLASH空间),其巨细为8KB..但由于各个芯片内部FLASH的空间不同所以BOOT BLOCK的方位也有所不同.,而BOOT BLOCK中的有一些程序是能够被用户所调用的,为了添加用户代码的可移植性则将BOOT BLOCK 程序得映射在内部存储器的最高方位!即挨近2G(0x80000000)的当地

留意:部分器材内部尽管没有用户FLASH空间,可是它们依然存在BOOT BLOCK ,而且复位后首要运转.

***************************************************************************

LPC2000系列ARM芯片发动进程LPC2000处理器发动进程是:Memory Map–Remap–Boot–Remap四步。以LPC2292为例:片内Flash的最高8kB在芯片出厂前写入了Bootload程序和64字节的中断向量表,这是发动进程中重要的内容。

1.Memory Map(不受操控)LPC2292上电复位后,Flash和SRAM映射:SRAM占有0x40000000~0x40003FFF;Flash占有0x0~0x0003FFFF。此进程不受开发人员操控。 Memory Map是一个逻辑概念,是计算机体系在(上电)复位后才树立起来的。Memory Map相当于这样一个数学函数:函数的输入量是地址编码,输出量被寻址单元中的数据。当计算机体系掉电后或复位时,这个数学函数不复存在,只剩下计算机体系中完成这个数学函数的物理根底——电路衔接。也能够这样以为:Memory Map是计算机体系(上电)复位时的准备动作,是一个将CPU所具有的地址编码资源向体系内各个物理存储器块分配的主动进程。

2.Remap(不受操控)Boot Block被全体Remap到了0x7fffe000~0x7fffffff。一起,0x0~0x3f的64字节中断向量区被暂时刊出映射联系,由Boot Block中的中断向量替代。此进程不受开发人员操控。此刻地址空间分配: 除掉Remap暂时刊出映射联系的64字节,Flash全体占用0x40~0x3ffff。 Boot Block占用0x7fffe000~0x7fffffff,Boot Block中断向量表占用0x0~0x3f。 事实上,Boot Block中断向量表占用了三段地址编码空间:0x0~0x3f,0x3e000~0x3e03f,0x7fffe000~0x7fffe03f。

3.Boot(不受操控)复位后Boot运作便是从0x0处开端字中取出跳转指令,开端程序的履行。由于Boot Block中断向量映射到0x0,CPU实践履行的是Boot Block内的程序。然后,程序首要查看看门狗溢出标志,置位标明体系内部软复位。再查看BOOT1和BOOT0是不是都为1,假如不是,则CPU从片外BANK0(0x80000000)履行用户代码,假如BOOT1和BOOT0是都为1,则CPU将对内部Flash中的中断向量表进行加和校验,查看用户代码是否有用,假如成果为0,Bootload程序将吊销Boot Block中断向量表在0x0~0x3f地址空间的映射,康复Flash中断向量表在这64字节地址空间的映射,然后跳转到地址0x00处转入用户程序的履行。假如加和校验成果不为0,Bootload程序将进行UART0接口的波特率主动侦测,随时呼应ISP宿主机的编程恳求,履行ISP编程作业。若Bootload没有发现看门狗溢出标志置位,则标明当时体系是外部硬复位,CPU将采样P0.14引脚外部逻辑电平输入。如为0,Bootload履行UART0的主动波特率侦测,随时呼应ISP宿主机的编程恳求,履行ISP编程作业;如为1,Bootload的后续运作将与前面检测到看门狗溢出标志置位的程序履行完全相同。 这部分复位流程详细可拜见《ARM嵌入式根底教程(上)》

4.Remap(能够操控)Remap的对象是片内SRAM存储器的反常向量部分。用户可编程决议何时Remap,Remap后是否再修正中断向量表等等。引发Remap运作指令与树立SRAM块中反常向量的一切功用代码悉数驻留在Flash块的用户编程区中,是用户软件的一部分。另:此Remap对IAP操作有重要意义。 整个进程存储器改变如下:1.Memory Map(不受操控)芯片上电复位后,CPU给各个物理存储器块分配地址编码资源。这时不存在多个地址对应同一个物理内存的现象。2.Remap(不受操控)在履行了Memory Map 后,Boot Block全体被Remap到了0x7fffe000~0x7fffffff,也便是将地址空间0x7fffe000~0x7fffffff用来表明Boot Block同一段物理内存。一起,0x0~0x3f的64字节中断向量区被暂时刊出映射联系(由于在判别用户代码存在于哪个存储空间之前,能寄存反常向量表的存储空间有两个,一个在片内flash的0x00-0x3f,另个在片内flash的顶端即bootblock区,所以在同一时间,二者只能有一个起作用。),由Boot Block中的中断向量替代。这时Boot Block中断向量表占用了三段地址编码空间:0x0~0x3f,0x3e000~0x3e03f,0x7fffe000~0x7fffe03f,即这三段地址编码空间都指向bootblock中的中断向量表。3与4同上所述。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/275702.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部