ARM与不同位宽存储器的地址线错位接口,外部总线接口深入_第1页
ARM与不同位宽存储器的地址线错位接口,外部总线接口深入_第2页
ARM与不同位宽存储器的地址线错位接口,外部总线接口深入_第3页
ARM与不同位宽存储器的地址线错位接口,外部总线接口深入_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARM是32位,地址空间是2的32次幂,4G地址空间。所有的外设(FLASH,RAM,SD卡等等)都映射到这4G的空间上。比如大部分 ARM7都把RAM映射到0x40000000,所以对RAM的操作就在0X40000000开始的地址上。FLASH从0X0开始。使用FLASH还要 考虑地址重映射,就是选择片内FLASH或片外FLASH。   FLASH一般是8位或16位,当它接到32位的ARM上时,地址位就会错位。对于16位FLASH,FLASH的A0要接ARM的A1。对于8位 FLASH,FLASH的A0要接ARM的A0。ARM的A0对应8位,ARM的A1对应16位,ARM

2、的A2对应32位,如果FLASH是32位,那么FLASH的A0接ARM的A2  32位的FLASH,FLASH的A0要接ARM的A2,因为32位地址表示4个字节,每次要跳4个字节的话,那么就是从A2开始才变化,A1 A0不变化  16位的FLASH,FLASH的A0要接ARM的A1,因为16位地址表示2个字节,每次要跳2个字节的话,那么就是从A1开始才变化,A0不变化  8位的FLASH,FLASH的A0要接ARM的A0,因为8位地址表示1个字节,每次要跳1个字节的话,那么就是从A0开始才变化。      对于 1

3、6位的FLASH ,我们可以这样认为:16位存储器的设计者将低位A0省掉了,我们只要读取一次就可以得到两个字节,读取的这个地址对应于ARM发出的地址的A21.1,即实际上是存储器需要的偶地址(偶地址是针对ARM发出的地址而言的)。          LPC2200,S3C2410A,S3C2440等都是上述这样的,当然也有不同的。     IMX27和BF537这两款CPU都是不管存储器是多少位的的,都是直接A0-B0,没有任何考虑错位的情况,是因为他们的存储控制器已经内部作

4、了处理 了,三星的如S3C2443S3C2450S3C6410等后续的也都是这样子了    再来看看外部总线配置EMC和外部总线功能引脚的关系:    OE:输出使能 OUT EABLE    WE:WRITE EABLE 写入使能     CE:chip EABLE 片选      ALE:地址锁存使能(ADRESS LOCK EABLE)    BLS:字节选择信号  &#

5、160; 重点看 WE  BLS 的关系        在LPC2200系列ARM中,为了适应外部存储器组的宽度和类型,EMC提供了一组字节选择信号,要实现这些功能,需要对相应存储器配置寄存器中的RBLE位进行设定。    对外部存储器组进行写访问时,RBLE位决定WE信号是否有效;    对外部存储器组进行读访问时,RBLE位决定BLSn信号是否有效。     外部存储器的接口取决于存储器组的宽度(32位、16位、8位,由B

6、CFG的MW位决定)。而且,存储器芯片的选择也需要对BCFG寄存器的RBLE位进 行适当的设置。选择8位或者不按字节区分的的存储器的时候,RBLE位应该为0,在读访问期间EMC将BLS3:0拉高。当存储器组为含有字节选择选 择输入的16位或32位存储器组成的时候,RBLE位应该为1,在读访问期间EMC将BLS3:0拉低。注意这里没有对RBLE为0或1的时候,写访 问期间BLS3:0引脚的电平作出交代。    以16位宽的存储器组连接16位的存储器芯片为例(这种情况比较常见,周立功的easyarm2200就是这样的)。很显然这里RBLE位应该为1。BLS1、 BLS

7、0分别接到了存储器芯片的UB、LB脚。作为16位的存储器芯片,要取得16位宽度的字,无论是读访问还是写访问,UB和LB位都必须为低电平 0。作为16位的ram,程序中不可避免的存在对它的写操作。程序能正常运行就说明对它的写操作是成功的。可以进一步推断在写访问期间,BLS1 、BLS0是低电平的。当存储器组为含有字节选择选择输入的16位或32位存储器组成的时候,RBLE位应该为1,在读访问期间EMC将 BLS3:0拉低。在写访问周期EMC同样是将BLS3:0拉低。这种操作也符合使用8位单片机时候的习惯,WR扮演了“写”的角色。      

8、0;  下面是32位宽的存储器组连接8位的存储器芯片,很显然这里RBLE位应该为0。网友wag提出这样的问题,能否用ARM的WE引脚直接连接到存储器芯片的WE引脚。有这样的问题可能是源于以前的习惯,也可能是不清楚RBLE位为0时,写访问期间BLS3:0引脚的状态。LPC2210/2220 User Manual 上面介绍了RBLE0的时候的读写情况。EMC的WE信号没有被使用。在写周期,BLS3:0拉低,将数据送到要写入的地址。对于读周期,BLS3:0拉高。网友sky421提到“我用的是2214,接一片8位的RAM,写的时候WE脚不会有变化,BLS0在变化”我个人理解,如果RBLE0

9、,BLS引脚就取代了WR的功能,WR脚就不可以使用了。有心的朋友可以用逻辑分析仪测一下,实际情况如何,验证一把。       总结,当RBLE1,WR 有效,BLS充当字节选择,其随WR,OE的变化而变化,读、写操作时 BLS都是低电平,此时用于有字节选择的外部设备。     当RBLE=0,WR无效,此时用于无字节选择的外部设备,BLS可以充当WR信号,而WR 无效。 不是ARM9 S3C2440的,但是有相似之处!存储器映射: 0-1G(0x0000,0000 - 0x3

10、fff,ffff): 片内Flash. 1-2G(0x4000,0000 - 0x7fff,ffff): 片内RAM. 2-3.5G(0x8000,0000 - 0xbfff,ffff - 0xdfff,ffff): 片外存储器。 3.5G - 3.75G(0xe000,0000 - 0xefff,ffff): VPB外设。 3.75G - 4G(0xf000,0000 - 0xffff,ffff): AHB外设。 虽然ARM7的寻址空间为4G,但是LPC2200系列只提供A0A23总共16M的地址。片选信号CS0 - CS3是A24和A25的译码输出,将片外存储区0x8000,0000 -

11、0x83ff,ffff划分为bank0 - bank3,共16M*4=64M. 这4个bank可以被分别配置为8/16/32位总线宽度。复位时,bank0的总线宽度由Boot1:0引脚决定, bank1为32位,bank2为16位,bank3为8位。 字节定位信号(BLS0 - BLS3)协调总线宽度和外存芯片数据线宽度。 当Memory由“字节宽度器件”(如62256)或者“未按照字节区分的多字节器件”组成时,应将RBLE设置为"0"。此时,读访问时EMC将BLS0BLS3拉高。 当Memory由“含有字节选择输入的16位或32位器件”组成时,应将RBLE设置为"

12、;1"。此时,读访问时EMC将BLS0BLS3拉低。 所以,当Memory由62256组成时,由于不需要“片内字节选择输入”,故令RBLE = '0',则BLS0BLS3只会与nWR同步,可以代替nWR使用。 但是,当Memory由IS61LV25616AL组成时,由于该芯片有"nLB"和"nUB"控制低/高8位的输入,故令RBLE = '1',则BLS0BLS3与nRD和nWR都会同步,此时,不可以使用BLS0BLS3代替nWR信号。 地址数据总线:D0 - D31, A0 - A23, OE, WE, CS0 - CS3, BLS0 - BLS3 启动后由P2.7/P2.6控制引导方式,然后由程序设置MEMMAP决定中断向量的映射。 BCF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论