微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440与SDRAM NorFlash NandFlash连线分析

S3C2440与SDRAM NorFlash NandFlash连线分析

时间:11-10 来源:互联网 点击:

和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地址分配

(1)SDRAM地址分配

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

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

(2)NORFLASH地址分配

S3C2440启动方式如下:

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

OM0接VDD,OM1接VSS。

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

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

(3)NANDFLASH地址分配

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

址,才能读到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地址开始执行的。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top