U-boot-2014.04移植到MINI2440(7) nand flash datasheet及arm9
我的MINI2440上有一个256M的nand flash,后面我们需要从nand启动u-boot,然后引导加载内核,再挂载根文件系统,这里先对其做一个较为细致的认识。主要是硬件管脚定义,控制方式,处理器的控制寄存器对其做一个了解,因为现在市面上nand的用途比较广泛,数码相机,mp3都要使用,进入正题。 ?????? 一.nand flash datasheeet 在移植好的u-boot下输入nand info会出现下面的信息: Device 0: NAND 256MiB 3,3V 8-bit,sector size 128 KiB 这说明nand大小为256M,工作电压3.3v,数据总线为8位,扇区大小为128K。首先我们要明确,nand flash的读写原理。我们找找mini2440的原理图,以及nand flash的datasheet来简略分析下。这里我推荐一个datasheet的网站,叫easydatasheet,一般我需要看一个芯片手册都在里面下载。我们板子上的nand型号为:K9F2G08UOC-SCB0。 这里我们有两个地方是要看的,首先是features,也就是第四页,翻译过来如下: 电压: 3.3v的设备,工作范围在2.7~3.6之间 组织(Organization): 存储单元阵列:(256M + 8M) x 8bit 数据寄存器:(2K + 64) x 8bit 自动编程和擦除: ?????? 页面编程:(2K + 64)Byte ?????? 块擦除:(128K + 4K)Byte 页面读取操作: ?????? 页大小:(2K + 64)Byte ?????? 随机读:40μs(Max.) ?????? 串行读:25ns(Min.) 快速写周期时间: ?????? 页编程时间:250μs(Typ.) ?????? 块擦除时间:2ms(Typ.) I/O口命令/地址/数据复用 硬件数据保护: ?????? 在电源转换时锁住编程/擦除操作 ECC校验要求: ?????? 1bit / 528bytes,命令驱动操作 ? 总结一下上面部分,nand大小为256M,一页大小为2k,一块大小为128k,也就是一块包含64个页,一共256M,也就是有2048个块,256M需要多少28位来传送,但是只有8个I/O,所以要分多次传送,分几次呢?按照datasheet,要分五次。下面是网上找的存储结构图,我下载的datasheet里面没有这个图,但是交代了要分五次,每次怎么传,传的什么东西,都有介绍: ? 接着datasheet给出了各个引脚描述,在第8页的pin description,结合mini2440开发板的pcb 原理图,可以整理如下。 ?????? 这里的引脚定义做了个表格如下:
?????? 再下面,第9页,一开始给出了一段描述,叫production introduction,也就是产品介绍,主要讲了使用了8位复用I/O是为了降低引脚,方便升级,然后各个指令需要几个周期,引脚的电平在读写时高低有何要求,写地址、数据、命令时,CE、WE信号必须为低电平,它们在 WE信号的上升沿被锁存。命令锁存使能信号CLE和地址锁存使能信号ALE用来区别IO引脚上传输的是命令还是地址,这个都可以自己去阅读。 ?????? 下面给出了各个控制命令写入命令寄存器的格式: 所以我们会看到这些宏定义: #defineCMD_READ1?????????????????0x00??????????????//页读命令周期1 #defineCMD_READ2?????????????????0x30??????????????//页读命令周期2 #defineCMD_READID???????????????0x90??????????????//读ID命令 #defineCMD_WRITE1???????????????0x80??????????????//页写命令周期1 #defineCMD_WRITE2???????????????0x10??????????????//页写命令周期2 #defineCMD_ERASE1???????????????0x60??????????????//块擦除命令周期1 #defineCMD_ERASE2???????????????0xd0??????????????//块擦除命令周期2 #defineCMD_STATUS????????????????0x70??????????????//读状态命令 #defineCMD_RESET?????????????????0xff???????????????//复位 #defineCMD_RANDOMREAD1?????????0x05???????//随机读命令周期1 #defineCMD_RANDOMREAD2?????????0xE0???????//随机读命令周期2 #defineCMD_RANDOMWRITE?????????0x85???????//随机写命令 ? 再下面,在第11页,给出了各个模式的时候,控制引脚的电平状态: ?????? 在后面给出了时序图,读写校验等的流程图,这里不多做赘述了。 ? 二.S3C2440 and flash控制寄存器 ?????? S3c2440的nand flash控制器主要有以下6个,下表列出了其名称,作用,地址。
?????? 一般,对于控制器来说,nand相当于一个外围设备,就像我们操作lcd一样,其实有点像,步骤大多都是配置,给命令,给地址,检测状态,读写数据,over。这里对nand flash的操作步骤总结如下: ?????? 第一步:设置NFCONF配置NAND Flash。 ?????? 第一步:向NFCMD寄存器写入命令。 ?????? 第三步:向NFADDR寄存器写入地址。 ?????? 第四步:通过寄存器NFSTAT检测NAND Flash的状态。 ?????? 第五步:通过NFDATA读写数据,并进行校验。 ? ?????? 下面附上读操作的时序图,以及流程图,操作nand就是根据这两个图来进行细致的步骤,后面我们会用得到。 ?????? 这篇帖子就分析到这里吧,有不正确的地方还请指出,大家共同进步。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |