深度探索嵌入式操作系统:从零开始设计、架构和开发
上QQ阅读APP看书,第一时间看更新

2.2.6 SDRAM

SDRAM是同步动态随机存储器,同步是指它工作需要同步时钟,内部命令的发送与数据的传输都是以这个时钟为基准的。动态是指它内部的存储阵列需要不断地刷新来保证数据不丢失。它是可以随机访问的,就是说可以自由地在指定的地址上进行数据读写。当然也不是绝对自由的,这个访问地址是由存储控制器和总线决定的。我们通常说的内存就是用这种芯片和技术实现的。

mini2440开发板有64MB的SDRAM,它是用两片32MB的SDRAM芯片组成的,这两片32MB的SDRAM芯片存在于开发板上,而它的存储控制功能单元则存在于S3C2440A芯片内部。通过S3C2440A芯片的引脚和外部的SDRAM芯片通信的。

我们先介绍S3C2440A芯片内部的存储控制功能单元,再来介绍mini2440开发板上的两片SDRAM芯片。

S3C2440A芯片内的存储器控制器为访问外部存储器提供了存储器控制的信号。

S3C2440A芯片内的存储器控制器包含以下特性:

1)可通过软件选择大端、小端。

2)总共8个存储器Bank,每个Bank有128MB,总共1GB地址空间。

3)除了Bank0(16/32位),其他全部Bank都可编程访问宽度(8/16/32位)。

4)6个存储器Bank为ROM、SRAM等。其余2个存储器Bank为ROM、SRAM、SDRAM等。

5)7个固定的存储器Bank起始地址,1个可变的存储器Bank起始地址,并且Bank大小可编程。

6)所有存储器Bank的访问周期可编程。

7)支持外部等待扩展总线周期。

8)支持SDRAM自刷新和掉电模式。

S3C2440A的存储地址空间如图2-8所示。

图2-8 S3C2440A的存储地址空间

图2-8中的SROM表示的是这个Bank只能连接SRAM或者ROM类型的芯片。Bank6和Bank7上所连接的芯片大小必须相等。比如,Bank6上连接是32MB的SDRAM,那么如果Bank7上要连接存储芯片,也必须是32MB的SDRAM。图2-8也是mini2440开发板上的实际情况。除Norflash和两片32MB的SDRAM芯片外,其余的都在S3C2440A芯片内部,Norflash和两片32MB的SDRAM芯片是在开发板上的。

上面简单说明了S3C2440A的存储控制器和存储系统的物理地址空间,接下来看看SDRAM芯片。数据和程序都是放在它里面运行的,当然操作系统内核也毫不例外,也是放在它里面的。

mini2440开发板使用了两片外接的32MB的SDRAM芯片,型号为HY57V561620或者MT48LC16M16A2,它们并接在一起形成32位的总线数据宽度,这样可以增加访问的速度,并且它们的物理起始地址为0x30000000。可能不同时期出厂的开发板用SDRAM芯片型号不一样,但是功能是一样的。

SDRAM内部是一个存储阵列。可以把它想象成一个表格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格称为逻辑Bank。目前的SDRAM基本都是4个Bank。寻址的流程就是先指定Bank地址,再指定行地址,最后指定列地址。这就是SDRAM的寻址原理。笔者的开发板是用的SDRAM芯片是32M的HY57V561620,这是一个4Banks×4MB×16bit的SDRAM,也就是由4个逻辑块(即Logical Bank,简称L-Bank)组成的,每个L-Bank有4MB存储单元。2片总共空间为64MB,连接到S3C2440A的Bank6上,所以访问的物理地址空间为0x30000000~0x33FFFFFF。SDRAM芯片结构如图2-9所示。图有点专业,暂时看不懂也没什么问题,有个印象即可。

图2-9 SDRAM芯片结构

对于程序员来说,只要认为它就是内存并且是这样的:由8个可以存储1位二进制数据的空间组成的小格子,每个小格子有个地址,通过这个地址可以向小格子里读写8位二进制的数据,2个小格子就可以存放16位二进制数据、4个小格子就可以存放32位二进制数据。最后许多这样的小格子组成一个很大的存储空间,如图2-10所示。

图2-10 内存逻辑视图

注意,内存芯片(即SDRAM)并不决定内存的物理地址从哪里开始,它只是一个存放数据的空间,如果32MB大小的内存,每个字节一个地址,那么它就有32M个地址编码。内存开始的物理地址是存储控制器和内存芯片地址信号线决定的,比如,存储控制器地址译码信号是从0x30000000地址开始的,那么这个内存可以访问的有效地址空间就是从0x30000000开始到0x31FFFFFF结束。

我们了解了S3C2440A芯片的地址空间,又粗略地看了SDRAM芯片的内部结构,最后只要知道mini2440开发板上有两片32MB的SDRAM芯片,并且它们并接到S3C2440A芯片的Bank6上。因此地址空间是0x30000000~0x33FFFFFF。操作系统内核、应用软件、数据,都是放在这个里面的,CPU就能通过内存地址运行其中的程序和操作其中的数据。后面章节中还有更多关于内存的内容,到时会详细介绍的。