存储器接口电路分析
- 格式:pdf
- 大小:620.73 KB
- 文档页数:10
/999/18686.aspx
存储器接口电路分析
寻址原理
以S3C2410为例,内核提供了32位的地址总线,理论上可以寻址的空间为4GB,但实际留给外部可寻址的空间只有1GB,也就是0X00000000~0X3fffffff,总共应该有30根地址线(230)引出来。
在这1GB的空间,2410处理器又根据所支持的设备的特点将它分为了8份,每份空间有128MB,这每一份的空间又称为一个BANK(图1)。
其中6个用于ROM、SRAM 等存储器,2个用于ROM、SRAM、SDRAM等存储器。
当2410对外寻址时,采用了部分译码的方式,即低位地址线用于外围存储器的片内寻址,而高位地址线用于外围存储器的片外寻址。
对于系统要访问的任意外部地址,2410可以方便地利用内部地址总线的高3位ADDR[29:27]来选择该地址属于哪一个存储器组(Bank),从而激活相应的Bank选择信号(nGCSx)。
这8个片选信号可以看作是2410处理器内部30根地址线的最高三位所做的地址译码的结果。
正因为这3根地址线所代表的地址信息已经由8个片选信号(nGCS7~nGCS0)来传递了,因此2410处理器最后输出的实际地址线就只有A26~A0。
Bank的内部寻址由外部地址总线A[26:0]来实现,寻址范围为128M(227),从而使得其外围地址访问空间为1GB(128MB×8)。
S3C2410正是通过这种机制来完成外部地址空间的寻址全过程。
图1 处理器存储空间
每个Bank的特性细节请参考数据手册。
外接的存储芯片一般包括Nor Flash,,NAND FLASH和SDRAM,下面分别介绍。
Nor Flash
它的接口与RAM完全相同,可以像其他存储器那样连接(与传统的8051外扩ROM 类似),可在上面直接运行代码。
它的特点是存取动作简单,缺点是它受地址线的限制,即n条地址线,所能寻址的空间就是2的n次方个单元,所以通常容量较小。
其典型连接图如下(摘至2410数据手册):
还是拿个实际电路图实战一下,某开发板的Nor Flash部分原理图如下:
下面对电路进行简要分析:
l该Nor flash芯片的内部存储结构是1M x 16bit ,即容量是1M个半字(16bit),寻址1M的地址单元需要20根地址线(220),对应Nor flash芯片的A0—A19。
l Nor Flash芯片的A0接到CPU的地址线A1上,而不是A0接A0,这和存储芯片的数据的长度有关。
因为处理器寻址的最小单位是字节。
当存储芯片的数据长度为16/32位时,处理器则要以双字节/4字节寻址。
即存储芯片是8位时,寻址就要0x00000000 ,0x00000001,0x00000002 ,0x00000003 ……,当存储芯片是16位长度时,只能以:0x00000000 ,0x00000002 ,0x00000004…….地址寻址。
32位时,就要:0x00000000,0x00000004,0x00000008....。
它们都对应Nor flash芯片的第1,2,3单元(即Nor Flash 芯片要接收到的地址为0x01,0x02,0x03),要实现这样的匹配,可以通过调整低地址是否参与译码来实现。
所以8/16/32bit的存储器地址线A0接处理器的地址总线的A0/A1/A2。
l Nor Flash芯片的数据总线是16位,数据线为D0—D15。
l CE(Chip Enable)接处理器的nGCS0,当访问nGCS0对应的Bank0(地址0x00000000~0x07FFFFFF)时,nGCS0输出有效电平,选中该Nor flash芯片进行操作。
l Nor Flash芯片的OE和WE分别接到CPU的读写控制端nOE和nWE。
l通过硬件设置S3C2410/S3C2440的OM1和OM0脚设置相应的数据宽度(16/32bit)。
这里有个疑问,像上面电路组成的系统,如果我要进行地址不对齐的16位操作要怎么办。
譬如程序中如下操作:
unsigned short * addr = (unsigned short *)0x01;
unsigned short val;
val = * addr;
由于地址为0x01,不是2的对齐,Bank0的位宽被设为16,这将导致取址异常。
可以设置异常处理函数处理这种情况,在异常处理函数中,使用0x0,0x02发起两次读操作,然后再将0x0的高八位和0x2的低八位组合起来。
如果没有设置地址不对其异常处理函数,那么上述代码将出错。
某开发板的Nand Flash部分原理图如下:
由于2410内部集成了NAND FLASH控制器,Nand Flash芯片的电路连接比较简单,在这里就不分析了。
大家可以把重点放在它的软件操作上。
这里还有个硬件知识要提下,S3C2410/2440中有被称为Steppingstone的4K内部RAM,当选择从Nand Flash启动时(通过硬件设置S3C2410/S3C2440的OM1和OM0脚),CPU 会通过内部的硬件将Nand Flash开始的4KB字节数据直接复制到这4KB的内部RAM中(此时内部RAM的地址被映射为0),然后跳到地址0开始执行。
下图表示了这个过程:
时就要先确定是哪个L-Bank,然后再在这个选定的L-Bank中选择相应的行与列进行寻址。
可见对内存的访问,一次只能是一个L-Bank工作。
L-Bank存储阵列示意图SDRAM内部结构图
与Nor Flash的n条地址线,寻址2的n次方个单元的方式不同,SDRAM采用非对称式设计,通过共享行列地址线,以减少地址线的数目,这种结构在存储器越大时越能显示出其优势。
所以SDRAM通常能以较少的地址线获得较大的寻址空间。
其典型连接图如下(摘至2410数据手册):
实际中,某开发板的SDRAM部分原理图如下:
下面对电路进行简要分析:
l该存储系统结构是(4Banks×4M×16Bit)×2ea,即由两片SDRAM组成,每片内部有4个Bank,每个Bank中有4M个半字(16Bit)。
Bank地址可以通过BA[1:0]与地址总线的高位相连来确定,具体BA[1:0]与哪个地址位相连,不同的SDRAM存储系统有不同的方案。
见下表。
上电路中用ADDR25,ADDR24作为L-Bank的选择信号。
l行地址,列地址共用地址线ADDR2—ADDR14(Bank6的位宽为32位,ADDR0/1没有使用),使用nSRAS,nSCAS两个信号来区分它们。
地址线ADDR24,ADDR25作为L-Bank的选择信号。
电路中SDRAM芯片的行地址数为13,列地址数为9,所以当nSRAS(行有效信号)信号有效时,ADDR2—ADDR14上发出的是行地址信号,它对应32位地址空间的bit[23:11];当nSCAS(列有效信号)信号有效时,ADDR2—ADDR10上发出的是列地址信号,它对应32位地址空间的bit[10:2]。
ADDR0,ADDR1恒为0,不参与译码。
l SDRAM芯片的片选信号nSCS接CPU的nGCS6,当访问nGCS6对应的Bank6(地址0x30000000~0x33FFFFFF)时,nGCS60输出有效信号,选中SDRAM芯片进行操作。
l电路使用两片16位SDRAM芯片并联组成32位的位宽,与CPU的32根数据线相连。
再看一个用存储控制器扩展串口的例子:
l扩展串口16C2550 使用Bank5,起始地址为0x28000000。
l nCSA = ADDR24 || nGCS5,nCSB =!ADDR24 || nGCS5。
当ADDR24 和nGCS5均为低电平时选中扩展串口A,当ADDR24 为高电平,nGCS5为低电平时选中扩展串口B。
l CPU的ADDR0—ADDR2连接到扩展串口的A0—A2,所以访问空间为8字节。
综上所述,扩展串口A的访问空间为:0x28000000--0x28000007;扩展串口B的访问空间为:0x29000000--0x29000007(bit24为1,见下图)。
程序中可以通过上一例子类似的方法对扩展串口进行访问。
参考资料:
《ARM原理与嵌入式系统实战》
《嵌入式Linux应用开发完全手册》
《2410数据手册》
高手进阶,终极内存技术指南——完整/进阶版
By lisuwei
lisuweizhai@
/999/18686.aspx。