[攻克存储] SRAM地址线的连接

简介:

     在嵌入式系统设计过程中,由于主控芯片(如ARM、PPC、MIPS等)片上的存储空间不够大,经常需要外接存储器芯片(如ROM、SRAM、SDRAM、DDR2、Nand Flash等),因此,弄清楚主控芯片与外界存储芯片的引脚连接原理至关重要,由于Nand Flash的引脚连接比较简单,不涉及地址线的连接,而SDRAM和DDR2访问原理与ROM和SRAM有一些不同,故以后再专门讲述,这里我将主要介绍ARM与ROM、SRAM这两种存储芯片的连接。

     首先,我们看一个电路图。

    这个电路图为三星公司的ARM芯片s3c2440与1片128KB的SRAM芯片的连接原理图。其中,SRAM芯片的引脚与图中芯片方框图中所标示,而ARM芯片的引脚则为导线上的标号。
 
     初学者可能会有几个疑问,为什么SRAM芯片的A0地址引脚连接的是ARM芯片的A1引脚呢?那什么情况下SRAM芯片的A0连接ARM芯片的A0引脚呢?
 
    首先,我们分析一下图中的 SRAM芯片,该芯片有A0~A15一共16根地址线,有D0~D15一共16根数据线,故其存储空间为 2^16 * 16 bit = 2^17 * 8 bit = 2^17 byte = 128KB
 
    我们知道,要寻址 128KB 需要 17 根地址线(128 = 2^17 ),然而SRAM芯片的地址引脚却只有16根,ARM端该如何给地址线呢?
 
    由图可以看出,SRAM芯片的数据总线是16位宽,即一次传输2个字节的数据。因此,我们可以这样理解,即 一个地址空间其实对应着2个字节的数据,实际上真正的寻址空间只有64KB而已,16根地址线足够。这样ARM端并不需要将17根地址线全部连接到SRAM芯片上,只需要给出高16位地址(A1~A16),然后,SRAM芯片即根据这16根地址找到对应的地址空间,将该地址空间的2个字节发送到数据总线上,然后ARM端根据未连接到SRAM芯片的A0的电平,来决定具体是取高字节,还是低字节。
 
     由这些分析可以推出一个规律,即 ARM端的地址线到底是 A0 、A1 还是 A2 连接 存储芯片的 A0,取决于存储系统的数据总线位宽,如果是 8位则A0->A0,如果是16位则A1->A0,如果是32位则A2->A0。
 
     大致搞清楚了上面的原理后,ARM与存储芯片的连接方法也就很清晰了,下面给几张分别描述了各种情况下的ARM与存储芯片的连接示意图(截取自s3c2440的datasheet)。

   

【说明】:上图的ROM为 2^16 x 8 bit = 64KB ,由于数据总线为8位宽,故一个地址空间对应着1个字节,故ARM端的A0连接ROM的A0

【说明】:上图中,由两片8位宽64KB的ROM构成了一个16位宽的存储系统。

【说明】:上图中,由四片8位宽的ROM构成了一个32位宽的存储系统。

   那么,留一个小问题供大家思考,如果将ARM的A0~A15引脚连接一个16位宽的SRAM的A0~A15引脚,会发生什么现象?
 
   注,本文讨论的ARM芯片是没有类似SDRAM Controller这样的存储器控制器的ARM芯片,对于有类似SDRAM Controller模块的ARM芯片,它会根据寄存器配置的外接DDR芯片数据位宽,在硬件上将ARM的地址线引脚进行的左移操作,例如当数据位宽为16位时,硬件上将ARM的A1脚的电平移至A0,依次类推。所以,这样的ARM芯片不需要根据本文的方法连接,而直接将ARM端的A0~Ax 连接到存储器的 A0~Ax 即可。


本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/686049,如需转载请自行联系原作者
相关文章
|
3月前
|
Java API 开发者
告别“线程泄露”:《聊聊如何优雅地关闭线程池》
本文深入讲解Java线程池优雅关闭的核心方法与最佳实践,通过shutdown()、awaitTermination()和shutdownNow()的组合使用,确保任务不丢失、线程不泄露,助力构建高可靠并发应用。
|
7月前
|
数据安全/隐私保护 C语言 计算机视觉
& 和 && 的区别解析及应用场景对比
本文深入解析了编程中`&`和`&&`运算符的区别,从基本概念到实际应用全面展开。`&`支持按位与和非短路逻辑与,适用于位操作及需完整表达式计算的场景;`&&`仅用于短路逻辑与,提升多条件判断效率。通过技术方案与实例对比,帮助读者准确理解二者功能与适用场景,优化代码逻辑。文末还提供了相关面试资料供学习参考。
560 27
|
小程序 Linux 区块链
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
1086 0
|
存储 Linux 网络安全
在CentOS 7上安装Git的方法
在CentOS 7上安装Git的方法
1119 0
【verilog】同步复位,异步复位以及异步复位同步释放
该文讨论了数字电路设计中触发器复位机制的三种类型:同步复位、异步复位和异步复位同步释放。同步复位在时钟边沿确保稳定性,但对复位脉冲宽度有要求;异步复位响应快速,但可能受干扰且时序不确定;异步复位同步释放则结合两者的优点。设计时需根据需求权衡选择。文中还给出了Verilog代码示例。
|
监控 Linux
Linux系统中du命令与df命令的区别与用法
总的来说,`du` 和 `df` 在磁盘管理中互补使用,能够提供全面的磁盘空间使用信息,帮助用户和管理员有效地监控和管理系统资源。
663 3
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
504 3
|
Linux 编译器 API
eBPF技术学习
eBPF技术学习
|
存储 Shell
Bash 脚本中的 `hash` 命令
【8月更文挑战第19天】
232 0
|
存储 Java
Java线程池参数详解及其示例
Java线程池参数详解及其示例
326 0

热门文章

最新文章