S3C2440 有27 根地址线ADDR[26:0],8 根片选信号ngcs0-ngcs7,对应bank0-bank7.
当访问BankN(N=0,1,2,...7) 的地址空间,ngcsN(N=0,1,2,...7) 引脚为低电平,选中外设。
每一个Bank容量:2^27=2^7 * 2^10 * 2^10 = 128Mbyte
总共有8个Bank,所以总寻址大小是:8*128Mbyte = 1Gbyte
所以S3C2440 总的寻址空间是1Gbyte。
市面上很少有32 位宽度的单片SDRAM,一般选择2 片16 位SDRAM 扩展得到32位SDRAM.
选择的SDARM 是HY57V561620F,4Mbit * 4bank *16,共32Mbyte。
首先了解下 SDRAM 的寻址原理。
SDRAM 内部是一个存储阵列。可以把它想象成一个表格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格称为逻辑BANK。目前的SDRAM 基本都是4 个BANK。寻址的流程就是先指定BANK 地址,再指定行地址,最后指定列地址。这就是SDRAM 的寻址原理。存储阵列示意图如下:
查看HY57V561620F 的规格书,这个SDRAM 有
13 根行地址线 RA0-RA12
9 根列地址线 CA0-CA8
2 根BANK 选择线 BA0-BA1
SDRAM 的地址引脚是复用的,在读写SDRAM 存储单元时,操作过程是将读写的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址。它们被锁存到芯片内部的行地址锁存器和列地址锁存器。
/RAS 是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;
/CAS 是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中。
SDRAM 的A0 接S3C2440 的ADDR2,很多初学者都对这里又疑问。A0 为什么不接ADDR0?
要理解这种接法,首先要清楚在CPU 的寻址空间中,字节(8 位)是表示存储容量的唯一单位。
用 2 片HY57V561620F 扩展成32 位SDRAM,可以认为每个存储单元是4 个字节。因此当它的地址线A1:A0=01 时,处理器上对应的地址线应为ADDR3:ADDR2=01(因为CPU 的寻址空间是以Byte 为单位的)。所以SDRAM 的A0 引脚接到了S3C2440 的ADDR2 地址线上。同理,如果用 1 片HY57V561620F,数据线是16 位,因为一个存储单元是2 个字节,这时SDRAM 的A0 要接到S3C2440 的ADDR1 上。
也就是说 SDRAM 的A0 接S3C2440 的哪一根地址线是根据整个SDRAM 的数据位宽来决定的。
上面的接线图上,BA0,BA1 接ADDR24,ADDR25,为什么用这两根地址线呢?BA0~BA1 代表了SDRAM 的最高地址位。因为CPU 的寻址空间是以字节(Byte)为单位的,本系统SDRAM 容量为64MByte,那就需要A25~A0(64M=2^26)地址线来寻址,所以BA1~BA0 地址线应该接到2440 的ADDR25~ADDR24 引脚上。13 根行地址线+9 根列地址线 = 22 根。另外HY57V561620F 一个存储单元是2 个字节,相当于有了23 根地址线。BA0,BA1 是最高地址位,所以应该接在ADDR24,ADDR25 上。
也就是说 SDRAM 的BA0,BA1 接S3C2440 的哪几根地址线是根据整个SDRAM 的容量来决定的。
S3C2440 与NOR FLASH(AM29LV160DB)的接线分析
NOR FLASH 的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM 中。NOR 的传输效率很高,在1~4MB 的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NOR FLASH 的地址线和数据线是分开的。
AM29LV160DB 是一个2Mbyte 的NOR FLASH,分区结构是:
1 个16Kbyte 扇区,2 个8Kbyte 扇区,1 个32Kbyte 扇区,31 个64Kbyte 扇区(字节模式)
1 个8Kbyte 扇区,2 个4Kbyte 扇区,1 个16Kbyte 扇区,31 个32Kbyte 扇区(半字模式)
共35 个扇区。
下图是TQ2440 开发板提供的NOR FLASH 部分接线图。
AM29LV160DB 第47 脚是BYTE#脚,BYTE#接高电平时,器件数据位是16 位,接低电平时,数据位是8 位。上图BYTE#接VCC,D0-D15 做为数据输入输出口。
A0-A19 是地址线,在半字模式下,D0-D15 做为数据输入输出口。因为数据位是16 位,A0-A19 可以选择2^20 = 1M *2BYTE = 2Mbyte。正好是AM29LV160DB 的容量。
S3C2440 的ADDR1 要接AM29LV160DB 的A0。上图中AM29LV160DB 的A20,A21 是空脚,分别接的是LADDR21,LADDR22。这应该是为了以后方便扩展NOR FLASH 的容量。LADDR21,LADDR22 对AM29LV160DB 是没用的。
当BYTE#接低电平时,D0-D7 做为8 位数据输入输出口,D15 做为地址线A-1。
相当于有了A-1,A0-A19 共21 根地址线。这个时候S3C2440 的ADDR0 应该接在D15(A-1)。。。。ADDR20 接A19。21 根地址线的寻址空间是2^21 = 2Mbyte。正好是AM29LV160DB 的容量。
S3C2440 与NAND FLASH(K9F1208)的接线分析
NAND FLASH 的接线方式和NOR FLASH,SDRAM 都不一样。以TQ2440 开发板用的K9F1208 为例,分析NAND FLASH 的接线方式。
K9F1208 结构如下图
K9F1208 位宽是8 位。
一页: 512byte + 16byte 最后16byte 是用于存储校验码和其他信息用的,不能
存放实际的数据。
一个块有32 page:(16k+512)byte
K9F1208 有4096 个块:(64M+2M)byte,总共有64Mbyte 可操作的芯片容量NAND FLASH 以页为单位读写数据,以块为单位擦除数据。
S3C24440 和K9F1208 的接线图如下:
下图是S3C2440 的NAND FLASH 引脚配置:
当选定一个NAND FLASH 的型号后,要根据选定的NAND FLASH 来确定S3C2440 的NCON,GPG13,GPG14,GPG15 的状态。
下图是S3C2440 中4 个脚位状态的定义:
K9F1208 的一页是512byte,所以NCON 接低电平,GPG13 接高电平。
K9F1208 需要4 个寻址命令,所以GPG14 接高电平
K9F1208 的位宽是8,所以GPG15 接低电平。
NAND FLASH 寻址
对K9F1208 来说,地址和命令只能在I/O[7:0]上传递,数据宽度是8 位。
地址传递分为4 步,如下图:
第1 步发送列地址,既选中一页512BYTE 中的一个字节。512byte 需要9bit 来选择,这里只用了A0-A7,原因是把一页分成了2 部分,每部分256 字节。通过发送的读命令字来确定是读的前256 字节还是后256 字节。
当要读取的起始地址(Column Address)在0~255 内时我们用00h 命令,当读取
的起始地址是在256~511 时,则使用01h 命令。
一个块有32 页,用A9-A13 共5 位来选择一个块中的某个页。
总共有4096 个块,用A14-A25 共12 位来选择一个块。
K9F1208 总共有64Mbyte,需要A0-A25 共26 个地址位。
例如要读NAND FLASH 的第5000 字节开始的内容。把5000 分解成列地址和行地址。
Column_address = 5000%512 = 392
Page_address = (5000>>9) = 9
因为column_address>255,所以用01h 命令读
发送命令和参数的顺序是:
NFCMMD = 0x01;从后256 字节开始读
NFADDR = column_address & 0xff;取column_address 的低8 位送到数据线
NFADDR = page_address & 0xff;发送A9-A16
NFADDR = (page_address >>8) & 0xff; 发送A17-A24
NFADDR = (page_address >> 16) & 0xff;发送A25
上面的NFCMMD,NFADDR.是S3C2440 的NAND FLASH 控制寄存器。读取的数据会放在NFDATA 中。
上一篇:S3C2440 GPIO例子在ISRAM内仿真分析
下一篇:S3C2440的时钟原理
推荐阅读最新更新时间:2024-03-16 16:23