加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

U-boot-2014.04移植到MINI2440(7) nand flash datasheet及arm9

发布时间:2020-12-15 07:21:02 所属栏目:百科 来源:网络整理
导读:我的MINI2440上有一个256M的nand flash,后面我们需要从nand启动u-boot,然后引导加载内核,再挂载根文件系统,这里先对其做一个较为细致的认识。主要是硬件管脚定义,控制方式,处理器的控制寄存器对其做一个了解,因为现在市面上nand的用途比较广泛,数码

我的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 原理图,可以整理如下。


?????? 这里的引脚定义做了个表格如下:

信号编号

信号名称

信号功能描述

29-44

I/O0-I/O7

数据输入输出口,地址和数据总线(复用)

7

R/B

Read/busy output忙或者已准备

9

CE

片选信号

16

CLE

命令锁存,用在写操作时锁存写命令

17

ALE

地址/数据锁存,在写时用来锁存地址或者数据

18

WE

写有效使能,表示当前在写操作

8

RE

读有效使能,表示当前正在读操作

6

SE

悬空未知

13,16

VSS

公共接地端

19

WP

写保护,这里连接VDD表示允许正常读写

12,37

VCC

器件工作电压输入端

?????? 再下面,第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个,下表列出了其名称,作用,地址。

寄存器名称

地址

作用

NFCONF:配置寄存器

0x4E000000

设置NAND Flash的时序参数,设置数据位宽,设置是否支持其他大小的页等

NFCONT:控制寄存器

0x4E000004

使能NAND Flash控制器、使能控制引脚信号nCE、初始化ECC,锁定NAND Flash等功能

NFCMD:命令寄存器

0x4E000008

发送Flash操作命令

NFADDR:地址寄存器

0x4E00000C

向Flash发送地址信号

NFDATA:数据寄存器

0x4E000010

读写此寄存器启动对NAND Flash的读写数据操作

NFSTAT:状态寄存器

0x4E000020

0:busy,1:ready

?????? 一般,对于控制器来说,nand相当于一个外围设备,就像我们操作lcd一样,其实有点像,步骤大多都是配置,给命令,给地址,检测状态,读写数据,over。这里对nand flash的操作步骤总结如下:

?????? 第一步:设置NFCONF配置NAND Flash。

?????? 第一步:向NFCMD寄存器写入命令。

?????? 第三步:向NFADDR寄存器写入地址。

?????? 第四步:通过寄存器NFSTAT检测NAND Flash的状态。

?????? 第五步:通过NFDATA读写数据,并进行校验。

?

?????? 下面附上读操作的时序图,以及流程图,操作nand就是根据这两个图来进行细致的步骤,后面我们会用得到。


?????? 这篇帖子就分析到这里吧,有不正确的地方还请指出,大家共同进步。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读