在上一篇文章《 [攻克存储] SRAM地址线的连接 》中,我们讲述了主控芯片(ARM)与 SRAM 的地址线如何连接的问题,关于存储芯片的写寻址过程以及存储芯片的扩展并没有涉及,本文着重描述这方面的知识点和需要注意的问题。

    首先,我们还是看一个电路图:

    

   由上一篇文章我们知道,这是ARM芯片与16位数据位宽的SRAM存储芯片的典型连接图,ARM芯片只需给出要访问的高16位地址,数据总线上则会出现两个字节的数据,供ARM读取,然后ARM根据A0的值来决定访问高字节还是低字节。
 
   这只是存储芯片的读数据时的访问过程,在读数据过程中,存储芯片不需要知道ARM在某个时刻访问的是高字节还是低字节,只需要把指定地址空间处的16位数据送到数据总线即可。但是,对于写过程,就不是这么简单了。
 
   显然,对于向存储芯片中写数据的情况,存储芯片是需要知道当前ARM芯片到底是写的是低字节,还是高字节,还是整个字。那么,这一项信息ARM靠什么方式通知存储芯片呢?
 
   纵观16位的存储芯片(无论是SRAM、SDRAM还是DDR),我们可以发现,芯片一般都提供两个表征着写屏蔽的引脚。例如 SRAM芯片一般是(nLB,nUB),DDR2芯片一般是(LDM,UDM),一般,nLB、LDM标识低字节,而 nUB 、UDM 一般标识高字节。例如,对于 SRAM芯片而言,在写时序中,只有 nLB 有效,才允许写低字节;只有 nUB 有效,才允许写高字节。
 
   另外,有的8位存储芯片也有这样的写屏蔽引脚,用于多片8位存储芯片的扩展,由于8位数据宽的芯片不存在高低字节,故写屏蔽引脚一般只有一个,例如有的8位DDR2芯片的写屏蔽引脚为DM。
 
   相应地,ARM端一般也会有一些引脚,用于标识当前写时序中,正在写的是低字节、高字节还是整个字。例如,s3c2440 的相关引脚如下:
 

    针对不同的存储芯片,使用的是不同的写屏蔽引脚,如 SDRAM/DDR2 则使用 DQM[3:0],SRAM则使用nBE[3:0],而 nWBE[3:0]则是用来连接多个8位存储器扩展系统的,由于一般8位存储器只有nWE引脚,对于选通那一片进行写,则由nWBE[3:0]来决定。
 
    将 ARM 端的写屏蔽引脚与对应的存储芯片的写屏蔽引脚相连即可,一般ARM端都会设计多组写屏蔽引脚,例如s3c2440的DQM引脚有4个,用于多片存储芯片扩展的情况。
 
    下面再讲讲存储芯片的扩展,一般都是进行数据位宽的扩展,即使用2片8位存储芯片扩展位16位存储系统,或者是2片16位存储芯片扩展位32位存储系统。
 
    一个典型的存储芯片扩展电路图如下:    

    由图可以看出,该电路将两片16位宽的SRAM芯片扩展位了一个32位宽的存储系统,两片SRAM芯片的引脚连接几乎相同,那么,究竟是什么决定着左边这一片SRAM作为低字节,而右边那一片作为高字节呢?由上面的写屏蔽的知识我们知道,就是写屏蔽位决定的,左边这片SRAM芯片连接的是nBE0~nBE1,决定了其为低2字节,而右边的nBE2~nBE3决定了其为高2字节。
 
    好了,存储芯片的写屏蔽知识以及扩展就说到这里了,在自己设计存储系统时,应该就很清晰了吧?本文有说的不清楚的或者错误的地方欢迎指正,留言或者发邮件到lujun.hust@gmail.com交流。