处理器和存储器的错位相连
来源:互联网 发布:cs1.6弹道优化本地 编辑:程序博客网 时间:2024/05/17 03:05
对于具体存储器而言,它的位宽是一定的,所谓位宽,指的是“读/写操作时,最小的数据单元”──别说最小单元是“位”,一般存储器上没有单独的“位操作”,修改位时通过把整个字节、字或双字读出来、修改,再回写。对于处理器来说,一个地址对应的是一个字节(8位),也就是说处理器的地址线对应的最小数据单元是字节。
ARM与不同位宽存储器的地址线错位接口 , 外部总线接口深入
ARM是32位,地址空间是2的32次幂,4G地址空间。所有的外设(FLASH,RAM,SD卡等等)都映射到这4G的空间上。比如大部分ARM7都把RAM映射到0x40000000,所以对RAM的操作就在0X40000000开始的地址上。FLASH从0X0开始。使用FLASH还要考虑地址重映射,就是选择片内FLASH或片外FLASH。
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开始才变化。
BLS[1]、BLS[0]分别接到了存储器芯片的UB、LB脚。作为16位的存储器芯片,要取得16位宽度的字,无论是读访问还是写访问,UB和LB位都必须为低电平0。作为16位的ram,程序中不可避免的存在对它的写操作。程序能正常运行就说明对它的写操作是成功的。可以进一步推断在写访问期间,BLS[1] 、BLS[0]是低电平的。当存储器组为含有字节选择选择输入的16位或32位存储器组成的时候,RBLE位应该为1,在读访问期间EMC将BLS[3:0]拉低。在写访问周期EMC同样是将BLS[3:0]拉低。
这种操作也符合使用8位单片机时候的习惯,WR扮演了“写”的角色。
网友wag提出这样的问题,能否用ARM的WE引脚直接连接到存储器芯片的WE引脚。有这样的问题可能是源于以前的习惯,也可能是不清楚RBLE位为0时,写访问期间BLS[3:0]引脚的状态。
LPC2210/2220 User Manual 上面介绍了RBLE=0的时候的读写情况。EMC的WE信号没有被使用。在写周期,BLS[3:0]拉低,将数据送到要写入的地址。对于读周期,BLS[3:0]拉高。
网友sky421提到“我用的是2214,接一片8位的RAM,写的时候WE脚不会有变化,BLS0在变化”
我个人理解,如果RBLE=0,BLS引脚就取代了WR的功能,WR脚就不可以使用了。
有心的朋友可以用逻辑分析仪测一下,实际情况如何,验证一把。
总结,当RBLE=1,WR 有效,BLS充当字节选择,其随WR,OE的变化而变化,读、写操作时 BLS都是低电平,此时用于有字节选择的外部设备。
不是ARM9 S3C2440的,但是有相似之处!
存储器映射:
0-1G(0x0000,0000 - 0x3fff,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系列只提供A0~A23总共16M的地址。片选信号CS0 - CS3是A24和A25的译码输出,将片外存储区0x8000,0000 - 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将BLS0~BLS3拉高。
当Memory由“含有字节选择输入的16位或32位器件”组成时,应将RBLE设置为"1"。此时,读访问时EMC将BLS0~BLS3拉低。
所以,当Memory由62256组成时,由于不需要“片内字节选择输入”,故令RBLE = '0',则BLS0~BLS3只会与nWR同步,可以代替nWR使用。
但是,当Memory由IS61LV25616AL组成时,由于该芯片有"nLB"和"nUB"控制低/高8位的输入,故令RBLE = '1',则BLS0~BLS3与nRD和nWR都会同步,此时,不可以使用BLS0~BLS3代替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块中,运行时被映射到0x7FFF,E000 - 0x7FFFF,FFFF的区域。而LPC2210没有片内Flash,但它有8K片内ROM存储了BootBlock,也被映射到0x7FFF,E000处。
- 处理器和存储器的错位相连
- 处理器和存储器的错位相连
- 处理器和存储器的错位相连
- 处理器和存储器的错位相连
- 处理器和存储器的错位相连
- TQ2440 学习笔记—— 17、处理器和存储器的错位相连
- 处理器与NOR flash/pcRAM存储器的错位连接
- 关于ARM和存储器地址线错位连接详解
- 存储器与处理器
- FLASH存储器和EEPROM存储器的区别
- FLASH存储器和EEPROM存储器的区别
- 查找和节点相连接的节点
- AhaH控制器:实现处理器与存储器的真正融合
- arm处理器bank与存储器的bank详解
- ARM与不同位宽存储器的地址线错位接口
- 寄存器和存储器的区别
- 存储器的概念和意义
- C的存储器和指针
- javassist:增强型的java反射工具,获取方法参数名
- 集成IPP的pjsip在Linux下的static linking编译
- 避险情绪较为浓厚,非美货币继续承压
- spring获取webapplicationcontext,applicationcontext几种方法详解
- Android如何在java代码中设置margin
- 处理器和存储器的错位相连
- 不要在工作中过多地展现自己的才华
- three.js使用二:修复three.js的纹理路径多一个\的问题
- WebBrowser:在Windows7下编辑模式失效
- 【最长公共子序列】杭电 HDU 1423 Greatest Common Increasing Subsequence
- Ogre 引擎四元数与三维向量相乘算法推导
- OK6410 嵌入式开发板无线网卡USB RT3070移植笔记
- UISwitch
- 【Android】状态栏通知Notification、NotificationManager详解