打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
S3C2440与SDRAM NorFlash NandFlash连线分析

一、SDRAM(HY57V561620F)连线分析

1、  S3C2440 27根地址线ADDR[26:0]8根片选信号ngcs0-ngcs7,对应bank0-bank7,当访bankx 的地址空间,ngcsx引脚为低电平,选中外设。

2^27=128MByte, 8*128Mbyte = 1Gbyte,所以S3C2440 总的寻址空间是1Gbyte。但市面上很少有32位宽度的单片SDRAM,一般选择216SDRAM 扩展得到32SDRAM.

2、这里选择的SDARMHY57V561620F4Mbit * 4bank *16I/O,共32Mbyte

首先了解下SDRAM 的寻址原理。 SDRAM 内部是一个存储阵列,可以把它想象成一个表

格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格称为逻辑BANK。目前的SDRAM基本都是4BANK。寻址的流程就是先指定BANK地址,再

指定行地址,最后指定列地址。这就是SDRAM的寻址原理。存储阵列示意图如下:

查看HY57V561620F 的资料,可知这个SDRAM13根行地址线 RA0-RA12, 9根列地址线CA0-CA8,2BANK选择线 BA0-BA1

SDRAM 的地址引脚是复用的,在读写SDRAM存储单元时,操作过程是将读写的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址。它们被锁存到芯片内部的行地址锁存器和列地址锁存器。

/RAS是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;

/CAS 是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中。

  

地址连线如下图:

  

 

问题1:SDRAM:的A0接S3C2440的ADDR2,A0 为什么不接ADDR0?

要理解这种接法,首先要清楚在CPU的寻址空间中,字节(8位)是表示存储容量的唯一单位。用2HY57V561620F扩展成32SDRAM,可以认为每个存储单元是4个字节。因此当它的地址线A1:A0=01 时,处理器上对应的地址线应为ADDR3:ADDR2=01(因为CPU的寻址空间是以Byte 为单位的)。所以SDRAMA0引脚接到了S3C2440ADDR2 地址线上。同理,如果用1 HY57V561620F,数据线是16位,因为一个存储单元是2个字节,这时SDRAMA0要接到S3C2440ADDR1上。

就是说SDRAMA0S3C2440的哪一根地址线是根据整个SDRAM的数据位宽来决定的

问题2:上图接线中,BA0,BA1接ADDR24,ADDR25,为什么用这两根地址线呢?

    BA0BA1代表了SDRAM 的最高地址位。因为CPU的寻址空间是以字节(Byte)为单位的,本系统SDRAM容量为64MByte,那就需要A25A064M=2^26)地址线来寻址,所以BA1BA0地址线应该接到S3C2440ADDR25ADDR24 引脚上。

13根行地址线 + 9根列地址线 = 22根地址线。另外HY57V561620F一个存储单元是2个字节(16I/O),相当于有了23根地址线。BA0,BA1是最高地址位,所以应该接在ADDR24,ADDR25 上。

就是说SDRAMBA0,BA1S3C2440的哪几根地址线是根据整个SDRAM的容量来决定的。

二、NOR FLASH(AM29LV160DB)的接线分析

       NOR FLASH 的地址线和数据线是分开的。AM29LV160DB 是一个2Mbyte NOR FLASH,分区结构是:

116Kbyte扇区,28Kbyte扇区,132Kbyte扇区,3164Kbyte扇区(字节模式);

18Kbyte扇区,2 4Kbyte扇区,116Kbyte扇区,3132Kbyte扇区(半字模式);

35个扇区。引脚如下:

 

设计原理图如下:

说明:

AM29LV160DB 47 脚是BYTE#脚,BYTE#接高电平时,器件数据位是16 位,接低电平时,数据位是8 位。

上图BYTE#VCCD0-D15 做为数据输入输出口。A0-A19 是地址线,在半字模式下,D0-D15 做为数据输入输出口。因为数据位是16 位,A0-A19 可以选择2^20 = 1M *2BYTE = 2Mbyte。正好是AM29LV160DB 的容量。

S3C2440 ADDR1要接AM29LV160DB A0。上图中AM29LV160DB A20A21是空脚,分别接的是LADDR21,LADDR22。这应该是为了以后方便扩展NOR FLASH 的容量。LADDR21,LADDR22 AM29LV160DB是没用的。

BYTE#接低电平时,D0-D7 做为8 位数据输入输出口,D15做为地址线A-1。相当于有了A-1,A0-A19 21 根地址线。这个时候S3C2440 ADDR0 应该接在D15A-1………ADDR20 A1921根地址线的寻址空间是2^21 = 2Mbyte。正好是AM29LV160DB的容量。

三、与NAND FLASH(K9F1208)的接线分析

K9F1208 结构如下图


K9F1208 位宽是8位(I/O0I/O7)。

一页:1Page = 512byte + 16byte 最后16byte是用于存储校验码和其他信息用的,不能存放实际的数据。

一块有32 page1block = 32* (512byte + 16byte) =16k+512byte

K9F1208 4096 个块:

1 device = 4096 *32* (512byte + 16byte) = (64M+2M)byte,总共有64Mbyte可操作的芯片容量

NAND FLASH 以页为单位读写数据,以块为单位擦除数据。

其引脚如下:

 

S3C24440 K9F1208 的接线图如下:

当选定一个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

因为column_address>255,所以用01h 命令读

Page_address = (5000>>9) = 9

发送命令和参数的顺序是:

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 开发板中SDRAM \NOR \ NAND地址分配

1SDRAM地址分配

这是S3C2440 的存储器地址分配图,SDARM只能接在BANK6 BANK7

从分析SDRAM接线图可以看到,SDRAM接的是ngcs6,也就是接在BANK6,因为选择的SDRAM 232Mbyte,总容量是64Mbyte,所以SDRAM 的地址范围是0x3000 0000 --- 0x33ff ffff

2NORFLASH地址分配

S3C2440启动方式如下:

上文讲述的NORFLASH 16bit 数据位宽,选择从NOR FLASH 启动,所以

OM0 VDDOM1 VSS

从分析NOR FLASH 接线的接线图可看到,NOR FLASH接的ngcs0,也就是接在BANK0。因为选择NORFLASH2Mbyte,所以NOR FLASH 的地址范围是0x0000 0000 --- 0x001f ffff

上电时,程序会从Norflash中启动,ARM直接取Norflash 中的指令运行。

3NANDFLASH地址分配

最后来看NANDFLASHNANDFLASH 以页为单位读写,要先命令,再给地

址,才能读到NAND 的数据。NANDFLASH是接在NANDFLASH 控制器上而不是系统总线上,所以没有在8 BANK 中分配地址。如果S3C2440 被配置成从Nand Flash 启动, S3C2440 Nand Flash 控制器有一个特殊的功能,S3C2440 上电后,Nand Flash 控制器会自动的把Nand Flash 上的前4K 数据搬移到4K 内部SRAM ,系统会从起始地址是0x0000 0000 的内部SRAM 启动。

程序员需要完成的工作,是把最核心的启动程序放在Nand Flash 的前4K 中,也就是说,你需要编写一个长度小于4K 的引导程序,作用是将主程序拷贝到SDRAM 中运行。由于NandFlash 控制器从NandFlash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K ,我们必须完成S3C2440 的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行。

至于将2440 当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于4K 的时候,只要下到nand flash 中就会被搬运到内部RAM 中执行了。

不管是从NOR FLASH启动还是从NANDFLASH 启动,ARM都是从0x0000 0000 地址开始执行的。 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
S3C2440与SDRAM与NAND与NOR的地址连线分析
【转】1-4、ARM开发步步深入之NandFlash 4KB突围
Nand Flash数据存储规则与数据读写方法(二) | 八喜网络日记
Nandflash的寻址
S3C2410存储器扩展——SDRAM
NorFlash和NandFlash区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服