第5章chapter5

第5章存储器控制器及Nand Flash控制器接正文接标题1.1微型计算机简介本章主要内容如下: 
(1) S3C2410A与存储器相关的特性,与存储器芯片连接的S3C2410A引脚信号,存储器总线周期,特殊功能寄存器含义,存储器组成举例;
(2) Nand Flash芯片工作原理,Nand Flash控制器组成、引脚信号含义、特殊功能寄存器含义及Nand Flash控制器与芯片连接的举例。
5.1存储器控制器
本书中,存储器的概念与过去习惯称为内存的概念相同。嵌入式系统中存储器的控制器,通常集成在嵌入式微处理器内部。同样,S3C2410A中也集成了存储器控制器。
5.1.1S3C2410A与存储器相关的特性
S3C2410A存储器控制器提供了访问存储器的控制信号,另外S3C2410A还提供了与存储器相关的地址总线、数据总线等总线控制器信号。
S3C2410A与存储器相关的特性如下: 
 通过软件选择,系统支持大/小端数据存储格式;
 全部可寻址空间为1GB,分为8个bank(体),每个bank为128MB;
 使用nGCS0~nGCS7作为对应的各bank选择信号;
 系统支持存储器与I/O端口统一寻址,SFR Area(特殊功能寄存器区)为I/O端口寻址空间;
 bank0~bank7中每个bank的数据总线宽度单独可编程,bank0通过编程可以设置为16/32位数据总线,bank1~bank7通过编程可以设置成8/16/32位数据总线;
 每个bank的存储器访问周期可编程;
 bank1~bank7支持各bank产生等待信号(nWAIT),用来扩展总线周期;
 bank0~bank5可以使用ROM(含EEPROM、Nor Flash等)和SRAM,bank6和bank7可以使用ROM/SRAM/SDRAM;◆嵌入式系统原理及接口技术(第2版)第◆5章存储器控制器及Nand Flash控制器 bank0~bank6开始地址固定,bank6的bank大小可编程;
 bank7开始地址和bank大小可编程;
 对SDRAM,在powerdown模式,支持自己刷新(selfrefresh)模式;
 支持使用Nor/Nand Flash、EEPROM等作为引导ROM。
S3C2410A Reset后存储空间图见图51。
图51S3C2410A Reset后存储空间图
参见图51,图中表示bank6和bank7实际安装的存储器容量可以各为2MB,4MB,…,128MB。因此bank6的终了地址不同,bank7的起始地址也不同,但是要求bank6和bank7实际安装的容量相同,详见表51。表51bank6/bank7起址和终址
地址2MB4MB8MB16MB32MB64MB128MBbank6起址0x3000_00000x3000_00000x3000_00000x3000_00000x3000_00000x3000_00000x3000_0000终址0x301f_ffff0x303f_ffff0x307f_ffff0x30ff_ffff0x31ff_ffff0x33ff_ffff0x37ff_ffffbank7起址0x3020_00000x3040_00000x3080_00000x3100_00000x3200_00000x3400_00000x3800_0000终址0x303f_ffff0x307f_ffff0x30ff_ffff0x31ff_ffff0x33ff_ffff0x37ff_ffff0x3fff_ffff另外,图51中最上方OM[1:0]的含义,表示在Reset期间,由于连接到S3C2410A的操作模式输入引脚OM[1:0]逻辑电平的不同,分别表示使用Nand Flash作为引导ROM模式与否,以及在不使用Nand Flash作为引导ROM时,bank0数据总线的宽度或测试模式,详见表52。表52OM[1:0]含义
OM1(操作模式1)OM0(操作模式0)含义00使用Nand Flash作为引导ROM模式01bank0数据总线宽度为16位10bank0数据总线宽度为32位11测试模式对应于图51左半部,在不使用Nand Flash作为引导ROM时,需要使用bank0(nGCS0)中安装的芯片作为引导ROM。由于在第一次访问引导ROM前必须先确定bank0数据总线的宽度,所以bank0的数据总线宽度要求由Reset时的OM[1:0]引脚输入逻辑电平确定,而bank1~bank7各个bank的数据总线宽度,可以通过对特殊功能寄存器编程确定。
5.1.2与存储器芯片连接的S3C2410A引脚信号及使用〖*2〗1. 与存储器芯片连接的S3C2410A引脚信号对于存储器,S3C2410A一般可以与ROM(如Nor Flash)、SRAM和SDRAM芯片连接。S3C2410A与存储器相关的引脚信号一般可以分为两组,一组是S3C2410A总线控制器引脚信号,另一组是S3C2410A存储器控制器引脚信号,分别见表53和表54。表53S3C2410A总线控制器引脚信号
信号I/O含义OM[1:0]I在S3C2410A的OM[1:0]引脚上连接上拉电阻或下拉电阻,Reset期间逻辑电平分别表示: 
00: 使用Nand Flash引导01: bank0数据总线16位
10: bank0数据总线32位    11: 测试模式ADDR[26:0]O地址总线ADDR[26:0]作为各bank的存储器地址线DATA[31:0]I/O数据总线DATA[31:0]是双向总线,存储器读期间输入数据,存储器写期间输出数据。实际使用的总线宽度可在8/16/32位中选择nGCS[7:0]OnGCS[7:0](General Chip Select)作为8个banks的选择信号,某一时刻选择其中的一个有效。访问周期数和bank大小可编程nWEOnWE(写允许)信号有效,指示当前总线周期是写周期nOEOnOE(输出允许)信号有效,指示当前总线周期是读周期续表
信号I/O含义nXBREQInXBREQ(Bus Hold Request,总线保持请求)信号有效,表示允许另外的总线主设备请求控制局部总线,响应信号为nXBACKnXBACKOnXBACK(Bus Hold Acknowledge,总线保持响应)信号有效,指示S3C2410A已经出让了局部总线控制权给另外的总线主设备nWAITInWAIT信号有效,表示请求扩展当前总线。只要nWAIT为低电平,继续扩展当前总线周期。如果系统中不使用nWAIT信号,该引脚接上拉电阻注: 表53中OM[1:0]、nXBREQ、nXBACK并未与存储器芯片连接,仅是总线控制器引脚信号。表54S3C2410A存储器控制器引脚信号
信号I/O含义nSRASOSDRAM行地址(row address)选通nSCASOSDRAM列地址(column address)选通nSCS[1:0]OSDRAM片选(chip select)DQM[3:0]OSDRAM数据屏蔽(data mask)SCLK[1:0]OSDRAM时钟SCKEOSDRAM时钟允许nBE[3:0]O高字节/低字节允许nWBE[3:0]O写字节允许表53中地址总线为ADDR[26:0],而图51中地址总线为ADDR[29:0],其中ADDR[29:27]经译码产生nGCS[7:0]或nSCS[1:0]信号。
表54中第3行nSCS1与表53中nGCS7是同一个引脚F17发出的信号,nSCS0与nGCS6是同一个引脚F16发出的信号。在bank7或bank6使用SDRAM时,从这两个引脚出来的信号为nSCS1和nSCS0,当bank7或bank6使用ROM/SRAM时,从这两个引脚出来的信号是nGCS7和nGCS6。
S3C2410A的A16引脚对应的信号为表54中的nBE3:nWBE3:DQM3,C15引脚对应nBE2:nWBE2:DQM2,B16引脚对应nBE1:nWBE1:DQM1,A17引脚对应nBE0:nWBE0:DQM0。同一个引脚连接不同的ROM/SRAM/SDRAM时,S3C2410A发出的信号含义不同,在随后的内容中说明。
2. 地址总线与存储器芯片地址引脚的连接
对ROM/SRAM/SDRAM,地址总线中的ADDR[29:27]经译码器产生nGCS[7:0]或nSCS[1:0]信号,某一时刻只有一个信号有效。而地址总线中的ADDR[26:0]应该与各bank的存储器芯片对应引脚连接,但ADDR1和ADDR0在某个bank实际使用的数据总线宽度不同的情况下,可能不连接存储器芯片;并且地址总线中的ADDR[26:0]与存储器芯片地址引脚的连接也可能不是一一对应关系,详见表55。在本章,地址总线中的ADDR[26:0]有时也简单写作A[26:0]。表55地址总线与存储器芯片引脚连接方法
存储器芯片
地址引脚某bank数据总线宽度为
8位时连接的地址总线某bank数据总线宽度为
16位时连接的地址总线某bank数据总线宽度为
32位时连接的地址总线A0ADDR0ADDR1ADDR2A1ADDR1ADDR2ADDR3A2ADDR2ADDR3ADDR4A3ADDR3ADDR4ADDR5︙︙︙︙表55中,当某bank数据总线宽度为8位时,地址总线中的ADDR0与芯片地址引脚A0连接,ADDR1与A1连接,以此类推,一一对应连接。表55中当某bank数据总线宽度为16位时,地址总线中的ADDR0不与存储器芯片连接,而用ADDR1与芯片地址引脚A0连接。表55中当某bank数据总线宽度为32位时,地址总线中的ADDR[1:0]不与存储器芯片连接,而用ADDR2与芯片地址引脚A0连接。
S3C2410A存储器是按字节编址的,也就是说存储器的一个存储单元,保存的内容为1B;每个存储单元有一个唯一、确定的地址。为了与8/16/32位数据总线相适应,地址总线中的ADDR1、ADDR0才有表55中连接或不连接的几种情况,其含义与80x86中存储器数据总线宽度不同时,存储器分体、地址总线低位使用或不使用的含义是一样的。
3. 存储器数据总线宽度的确定
对不同的应用场合或设备,使用的嵌入式系统数据总线的宽度,或许有不同的要求。S3C2410A支持8/16/32位数据总线宽度。同一个bank的数据总线宽度必须相同,不同bank的数据总线宽度可以不同,并且有以下特征: 
 bank0在不使用Nand Flash时,数据总线宽度可以选择16位或32位,由OM[1:0]输入引脚在Reset时的逻辑电平决定;
 bank1~bank7中的每个bank的数据总线宽度可以分别设置,可选择8位、16位或32位中的一种,设置方法在特殊功能寄存器中讲述。
4.  bank0与ROM芯片的连接
在不使用Nand Flash作为引导ROM时,参考图51左半部分,使用bank0作为引导ROM区,可以连接Nor Flash或EEPROM等。由于Nor Flash片内带有SRAM接口,因此可以直接与存储器控制器连接。另外,Nor Flash芯片价格比EEPROM低,所以通常使用Nor Flash芯片较多。
加电之前,bank0数据总线宽度必须通过OM[1:0]提前设置好,只能设置为16位或32位。另外,信号nGCS0作为bank0的选择信号。
对于图52和图53,请注意地址总线、数据总线与芯片引脚连接方法的不同;区别什么情况下使用nWE或nWBE[3:0]信号。
1) bank0使用16位数据总线与ROM芯片的连接
图52表示bank0与一片ROM、数据总线为16位时的连接。
ROM指Nor Flash或EEPROM。
2) bank0使用32位数据总线与ROM芯片的连接
图53表示bank0与4片ROM、数据总线为32位时的连接。
图52bank0使用16位数据总线
时与ROM芯片的连接
图53bank0使用32位数据总线时与
ROM芯片的连接
5. bank1~bank7与SRAM芯片的连接
图54给出了使用2片SRAM、32位数据总线,连接bank1的一个例子。
图54bank1使用32位数据总线时与SRAM芯片的连接
虽然bank0~bank7都允许连接SRAM,但bank0实际很少连接SRAM,而bank6和bank7常常与SDRAM连接。
图54中nBE3、nBE2、nBE1和nBE0分别连接芯片的nUB和nLB引脚,表示选择高字节(nUB)或低字节(nLB)。这是由于在32位数据总线时,一次总线访问周期可以控制只传送1字节、半字(2字节)或字(4字节)数据的原因。
6.  bank6或bank7与SDRAM芯片的连接
在SDRAM芯片内部,通常分为2个体或4个体,也用bank表示,但与存储器的bank不同,它们一般称为片内bank。另外,SDRAM地址还分行地址和列地址,行地址的长度(位数)可以与列地址的长度(位数)相等(对称地址)或不等(非对称地址)。S3C2410A特殊功能寄存器中允许设置列地址长度,详见5.1.4节中BANKCON6和BANKCON7寄存器含义。
从S3C2410A送出的地址,高位部分连接SDRAM芯片的片内bank选择引脚BA,具体连接方法见表56。
1) SDRAM片内bank选择引脚与地址总线的连接
表56给出了当S3C2410A存储器实际bank大小不同、数据总线宽度不同、芯片容量不同、芯片内部构成和使用的芯片数量不同时,片内bank选择使用的芯片引脚与高位地址总线连接的例子。 表56芯片内bank选择使用的地址总线
存储器bank
实际大小存储器bank
数据总线宽度芯片容量芯片内部构成/使用的片数芯片内bank选择
使用的地址总线8MB16位64Mb(1M×16位×4bank)×1片ADDR[22:21]16MB32位64Mb(1M×16位×4bank)×2片ADDR[23:22]32MB32位16位32位8位16位64Mb128Mb256Mb(4M×8位×2bank)×4片(4M×8位×4bank)×2片(2M×16位×4bank)×2片(8M×8位×4bank)×1片(4M×16位×4bank)×1片ADDR[24]ADDR[24:23]续表
存储器bank
实际大小存储器bank
数据总线宽度芯片容量芯片内部构成/使用的片数芯片内bank选择
使用的地址总线64MB32位16位32位8位128Mb256Mb512Mb(4M×8位×4bank)×4片(8M×8位×4bank)×2片(4M×16位×4bank)×2片(16M×8位×4bank)×1片ADDR[25:24]128MB32位16位32位256Mb512Mb(8M×8位×4bank)×4片(16M×8位×4bank)×2片(8M×16位×4bank)×2片ADDR[26:25]表56中第一行的含义为S3C2410A的bank6或bank7使用SDRAM时,当bank实际大小为图55bank6使用16位数据总线
时与SDRAM芯片的连接
8MB时,该bank总线宽度为16位,使用的芯片容量为64Mb,芯片内部为1M×16位×4bank,只用一片,那么地址总线ADDR[22:21]与芯片的片内bank选择引脚BA1、BA0连接。具体连接见图55。
表56中第2行的含义,解释方法同上,具体连接见图56。
图56bank6使用32位数据总线时与SDRAM芯片的连接
另外,也可以通过计算,直接算出哪几条高位地址总线应该和芯片的bank选择引脚连接。
例如,存储器bank实际大小为32MB,32MB寻址空间使用的地址总线为ADDR[24:0],如果存储器芯片片内有2个bank,则bank选择只使用一位地址总线,即最高位ADDR[24];如果存储器芯片片内有4个bank,则bank选择使用最高2位地址总线ADDR[24:23],与芯片的bank选择引脚连接。读者使用这种方法可以对表56中各行进行验证。
2)  bank6使用16位数据总线与SDRAM芯片的连接
图55中存储器bank实际大小为8MB,使用1片,片内为1M×16位×4bank芯片。8MB需要23条地址总线,即ADDR[22:0],其中ADDR[22:21]与芯片BA1、BA0连接;由于数据总线为16位,所以地址总线ADDR[0]不与芯片连接;地址总线ADDR[12:1]分2次分别传送行地址信号和列地址信号。
3) bank6使用32位数据总线与SDRAM芯片的连接
图56中存储器bank实际大小为16MB,由2片组成,每片为1M×16位×4bank。由于数据总线为32位,所以地址总线ADDR[1:0]不与芯片连接。
图55和图56中DQM3、DQM2、DQM1和DQM0,表示对数据总线的高8位和低8位屏蔽与否,在存储器访问周期读写1字节、半字(2字节)或字(4字节)数据时,这些信号的状态不同。
5.1.3存储器总线周期举例
存储器控制器有13个特殊功能寄存器,它们中的一些寄存器,通过设置不同的值,可以允许/禁止nWAIT;也可以改变ROM/SRAM/SDRAM的总线读写周期的时间长度等。
另外,虽然特殊功能寄存器不能控制nXBREQ/nXBACK的定时关系,但是也在这一节一并介绍。
1. nXBREQ/nXBACK与其他信号之间的定时关系
nXBREQ称为总线保持请求信号,低电平表示有其他总线主设备请求控制局部总线,响应信号为nXBACK。nXBACK称为总线保持响应信号,低电平表示S3C2410A允许其他总线主设备控制和占用局部总线,这时S3C2410A不对数据总线、地址总线和存储器控制器输出信号(SCKE、nGCS、nOE、nWE和nWBE)进行控制。S3C2410A与这些总线和信号之间处于高阻状态,与SCLK也处于高阻状态。
当nXBREQ信号由低电平变为高电平,经过一个CLK周期,响应信号nXBACK也变为高电平,S3C2410A恢复对总线和存储器控制器输出信号的控制。
图57给出了nXBREQ/nXBACK与其他信号之间的定时关系。

图57nXBREQ/nXBACK与其他信号之间的定时关系
2. nWAIT引脚信号对总线读写周期的影响
在5.1.4节中,通过对 BWSCON寄存器中的WS7,WS6,…,WS1设置不同的值,表示允许bank7,bank6,…,bank1使用WAIT(等待)功能与否。换句话说,除了bank0以外,其他各bank,如果存储器芯片工作速度比总线读写周期规定的时间所要求的速度慢时,存储器bank应该发出nWAIT信号到S3C2410A,S3C2410A在规定的存取周期(Tacc)前一个周期结束处,检测nWAIT信号,如果为低电平,则将相应信号扩展一个HCLK时长,然后继续检测nWAIT,直到这个信号变为高电平,则不再扩展相应信号。
如图58所示,存取周期Tacc=6,在第5个存取周期结束处,S3C2410A采样nWAIT引脚信号,如果为低电平,则扩展相应信号。
图58S3C2410A外部nWAIT信号对总线读周期的影响(Tacc=6)
图58为总线读周期。nWAIT对总线写周期的影响与图58相似,不再画出。
3. ROM/SRAM总线读写周期定时举例
可以对存储器特殊功能寄存器设置不同的值,改变总线读写周期的定时关系。
1) ROM/SRAM单个读周期
单个读周期指S3C2410A发出一次读存储器数据操作后,间隔一段时间再访问存储器。
在特殊功能寄存器中设定了具体数值以后,S3C2410A发出的单个总线读周期信号定时关系如图59所示。
图59ROM/SRAM单个读周期定时图
图59中Tacs、Tcos、Tacc、Tcoh、Tcah、PMC和ST的含义见表57,它们的时间长度都是HCLK的整倍数,均可在随后讲述的特殊功能寄存器中设定它们的值。