前言:以下的内容似乎有点俗,有点像讲解如何设计开发板。不过很多时候,目标板就是开发板的子集。
2.1 SRAM
最简单的外存储器,地址线和数据线(如不是分配在特殊地址)依次跟CPU连接即可,片选信号根据第一章讨论的译码法给出,片子的输出使能信号OE一般跟CPU的RD脚连接,片子的写使能信号WE则跟CPU的WR脚连接。
对于好些没有像51或8086这样的并行总线、但却有很多IO脚的CPU,如MSP430F149、449,可以使用IO脚来跟SRAM器件连接,CE、RD、WR等信号的时序用3根IO口线编程实现,何时拉高何时拉低,参考SRAM datasheet的时序图即可,非常简单。
题外话提一下,由于历史原因曾经存在支持所谓intel时序和motorola时序的芯片,譬如用于老式PC主板上的实时时钟芯片DS12887,就是同时支持intel时序和motorola时序。一般这类芯片的datasheet会着重说明的,目前应该基本看不到motorola时序的芯片了。
对于一些地址和数据总线复用(Multiplexed)的CPU,如51或8086,需要使用传统的74系列IC进行地址锁存(74LS373)和数据总线缓冲(74HC245)。有时候假如同时挂在地址和数据总线上的芯片太多,则需要考虑在总线上先加一级缓冲以获得较大的扇出系数,以前常用244,现在则常用245因为布线方便(3.3V电压的系统就使用LV4245)。当然如果对成本不敏感,推荐使用GAL或者CPLD来代替373、245、138这些东西。
SRAM优点是总线扩展简单直观,存取速度快,缺点是造价成本高,而且SRAM的容量都很小,通常只有几十k,不会超过1MB。
提到SRAM,不得不提到PSRAM,即伪静态RAM。站在CPU程序员的角度,可以认为它跟SRAM是一样的。其实PSRAM的存储单元结构类似于DRAM(如下所说),因此它具有了DRAM的高密度、价格低的特点,并且速度也不算太慢。适合于对成本敏感而又需要较大容量RAM的系统。
时至今日,虽然串行方式的接口总线成为微机接口的趋势,看USB、以太网、SATA硬盘等等皆是串行,但是几乎所有的CPU都仍然保留如SRAM这种并行总线式的接口。因为实在太多外设器件仍旧是采用这种接口的。关于这个接口,第三章继续拓展讨论。请关注。
2.2 双端口RAM
顾名思义,提供两套端口的RAM,基本上是为了实现多CPU通信而存在的。总线用法跟SRAM一样,不过是有两套总线端口,连到每套总线上的CPU都可能取得共享RAM区的访问权。为了避免多个CPU同时从两侧读写RAM阵列的同一个单元,双端口RAM芯片自身会提供多种冲突检测机制,以Cypress的CY7C026为例,提供了BUSY引脚、邮箱(mailbox)以及信号量(semaphore)等多种手段。
2.3 动态SDRAM
SDRAM是目前中等复杂度以上的嵌入式系统普遍采用的RAM。DRAM与SRAM的最大区别是DRAM只采用1个晶体管加一个电容的结构来保存1位数据,而SRAM则需要4-6个晶体管才能保存一位数据。但是DRAM由于靠电容的充放电来实现0和1的状态变化,因此经常需要对电容状态进行刷新,不仅要周期性地刷新(约几十毫秒一次),在每次读取操作后也一样要刷新。
SDRAM的存储单元按行、列来组织,寻址时也就根据行地址和列地址综合来找到存储单元的。行地址和列地址的具体范围需依赖datasheet具体分析。
SDRAM芯片的引脚主要有:行地址锁存控制脚RAS,列地址锁存控制脚CAS,时钟输入脚CLK,其他的地址总线、数据总线、CE、WE等与SRAM是一致的。
CLK是SDRAM芯片的主时钟输入,所有控制信号都必须与该脚的上升沿同步(Synchronous),这也是SDRAM名字中S的意思。对于SDRAM片子,CLK的频率有个极限,要看datasheet的说明,100MHz,133MHz,或者是166MHz。我们PC电脑用的SDRAM内存条不也有PC100,PC133的说法吗,正是此意。
SDRAM读取的过程一般如下: 1. CPU把行地址传送到DRAM的地址引脚上。 2. 激活RAS引脚,地址引脚上的行地址就打入DRAM芯片的锁存器了 3. WE脚不使能,确定目前是处于读操作 4. 同第1、2步把列地址打入到列地址锁存器 5. 使能OE脚(一般就是CAS脚),此时数据就从数据总线上出现 6. 人为置RAS和CAS同时失效,表示当前读取周期结束。
写过程类似,具体的时序,很多资料会有,一般如果CPU有SDRAM控制器,那就无须管上述过程。但如果用FPGA来实现该时序,就还是需要了解。
以三星256Mbit SDRAM K4S561632为例,其引脚如附图1所示: DQM脚还分为LDQM脚和UDQM脚,也即前面第一章提到的,方便那些字节寻址的CPU(如2410,2440)控制读写存储器的高字节和低字节(MASK),关于这个内容,第三章有个详细的例子。
CLK、CS、CKE(Clock Enable)、A0-A12、RAS/CAS、WE、D0-Dn等引脚无需再解释。BA0 和 BA1 是bank选择地址,这两根地址线可以译码出4种情况,也即这片SDRAM 芯片内部的存储单元划分为4个BANK。
对于带有SDRAM控制器的CPU如2440,它的数据手册会详细介绍如何跟不同BANK组织方式的SDRAM连线的了,以2440为例,截下其datasheet对应的说明如附图2: 可见把2440的24和25号地址线连接到BA1和BA0即可。
2.4 DDR 即将要用,到时用完后有经验了再补充吧。
2.5 NAND FLASH 一般应用在中等复杂度以上的系统,CPU一般会有NAND的接口以及从NAND启动的机制,参照datasheet的指引连线即可,如三星ARM 2410,2440等。低级MCU一般不会用到NAND FLASH,如果需要大容量存储器,个人认为还不如扩个USB口外接U盘好过。
------------------------------------------ 本章题外废话: 我反复提到:datasheet里就有详细说明。是的,datasheet能教会我们一切,用一个器件前,请认真地看它的datasheet,没有任何一本中文书比datasheet更权威。高中英语水平加上一个金山词霸,足够看懂任何datasheet。
![]() |