《2022年ARM与不同位宽存储器的地址线错位接口,外部总线接口深入[参 .pdf》由会员分享,可在线阅读,更多相关《2022年ARM与不同位宽存储器的地址线错位接口,外部总线接口深入[参 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ARM 是 32 位, 地址空间是 2 的 32 次幂,4G地址空间。所有的外设(FLASH,RAM,SD卡等等) 都映射到这 4G的空间上。比如大部分 ARM7都把 RAM 映射到 0 x40000000,所以对 RAM 的操作就在 0X40000000开始的地址上。FLASH 从 0X0开始。 使用 FLASH还要 考虑地址重映射,就是选择片内FLASH 或片外 FLASH 。 FLASH 一般是 8 位或 16 位,当它接到 32 位的 ARM 上时,地址位就会错位。对于 16 位 FLASH ,FLASH 的 A0要接 ARM 的 A1。对于 8 位 FLASH ,FLASH 的 A0
2、要接 ARM 的 A0。ARM 的 A0对应 8 位,ARM 的 A1对应 16 位,ARM 的 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要
3、接 ARM 的 A0,因为 8 位地址表示 1 个字节,每次要跳 1 个字节的话 ,那么就是从 A0开始才变化。对于 16 位的 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 :字节选择信号重点看 WE BLS 的关系在 LPC2200系列 ARM 中,为了适应外部存储器组的宽度和类型,EMC 提供了一组字节选择信号,要实现这些功能,需要对相应存储器配置寄存器中的RBLE位进行设定。对外部存储器组进行写访问时,RBLE 位决定 WE 信
5、号是否有效;对外部存储器组进行读访问时,RBLE 位决定 BLSn信号是否有效。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 外部存储器的接口取决于存储器组的宽度(32位、16 位、8 位,由 BCFG 的MW 位决定)。而且,存储器芯片的选择也需要对BCFG 寄存器的 RBLE位进 行适当的设置。 选择 8 位或者不按字节区分的的存储器的时候,RBLE 位应该为 0,在读访问期间 EMC 将 BLS3:0 拉高。当存储器组为
6、含有字节选择选择输入的 16位或 32 位存储器组成的时候, RBLE位应该为 1,在读访问期间 EMC 将 BLS3:0拉低。注意这里没有对RBLE为 0 或 1 的时候,写访问期间 BLS3:0 引脚的电平作出交代。以 16 位宽的存储器组连接16 位的存储器芯片为例 (这种情况比较常见, 周立功的 easyarm2200就是这样的)。很显然这里RBLE位应该为 1。BLS1 、 BLS0 分别接到了存储器芯片的UB 、LB脚。作为 16 位的存储器芯片,要取得 16 位宽度的字,无论是读访问还是写访问, UB和 LB位都必须为低电平 0 。作为 16 位的 ram,程序中不可避免的存在对
7、它的写操作。程序能正常运行就说明对它的写操作是成功的。可以进一步推断在写访问期间,BLS1 、BLS0 是低电平的。当存储器组为含有字节选择选择输入的16 位或 32 位存储器组成的时候,RBLE 位应该为 1,在读访问期间 EMC 将 BLS3:0 拉低。在写访问周期EMC同样是将 BLS3:0 拉低。这种操作也符合使用8 位单片机时候的习惯, WR 扮演了“写”的角色。下面是 32 位宽的存储器组连接8 位的存储器芯片,很显然这里RBLE位应该为 0。网友 wag提出这样的问题,能否用ARM 的 WE 引脚直接连接到存储器芯片的WE引脚。有这样的问题可能是源于以前的习惯,也可能是不清楚RB
8、LE位为 0 时,写访问期间 BLS3:0 引脚的状态。LPC2210/2220 User Manual 上面介绍了 RBLE 0 的时候的读写情况。 EMC 的 WE信号没有被使用。在写周期, BLS3:0 拉低,将数据送到要写入的地址。对于读周期, BLS3:0 拉高。网友 sky421 提到“我用的是 2214,接一片 8 位的 RAM ,写的时候 WE 脚不会有变化,BLS0在变化”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - -
9、 - - 我个人理解,如果RBLE 0,BLS引脚就取代了 WR 的功能, WR 脚就不可以使用了。有心的朋友可以用逻辑分析仪测一下,实际情况如何,验证一把。总结,当 RBLE 1,WR 有效,BLS充当字节选择,其随WR ,OE的变化而变化,读、写操作时 BLS 都是低电平 ,此时用于有字节选择的外部设备。当 RBLE=0 ,WR 无效,此时用于 无字节选择的外部设备 ,BLS可以充当 WR信号,而 WR 无效。不是 ARM9 S3C2440的,但是有相似之处!存储器映射 :0-1G(0 x0000,0000 - 0 x3fff,ffff): 片内 Flash. 1-2G(0 x4000,0
10、000 - 0 x7fff,ffff): 片内 RAM. 2-3.5G(0 x8000,0000 - 0 xbfff,ffff - 0 xdfff,ffff): 片外存储器。3.5G - 3.75G(0 xe000,0000 - 0 xefff,ffff): VPB外设。3.75G - 4G(0 xf000,0000 - 0 xffff,ffff): AHB外设。虽然 ARM7 的寻址空间为4G, 但是 LPC2200系列只提供A0A23总共 16M 的地址。片选信号CS0 - CS3是 A24 和 A25 的译码输出,将片外存储区0 x8000,0000 - 0 x83ff,ffff划分为
11、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 位名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - 的输入,故令RBLE = 1,则 BLS0BLS
13、3与 nRD 和 nWR 都会同步,此时,不可以使用BLS0BLS3代替 nWR信号。地址数据总线:D0 - D31, A0 - A23, OE, WE, CS0 - CS3, BLS0 - BLS3 启动后由P2.7/P2.6控制引导方式,然后由程序设置MEMMAP决定中断向量的映射。BCFG0 - BCFG3控制读写延时和总线宽度。注意复位后的默认值。PINSEL2控制引脚功能。Boot Block LPC2114/2214的 BootBlock被固化在最高的Flash块中, 运行时被映射到0 x7FFF,E000 - 0 x7FFFF,FFFF的区域。而LPC2210没有片内Flash,但它有 8K 片内 ROM存储了BootBlock,也被映射到0 x7FFF,E000处。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -