十六课(1)Nand Flash的操作原理

1、从Nand原理图上分析

从原理图上看,Nand Flash只有数据线,那么是怎么传输地址的?
DATA0~DATA7既传输数据又传输地址。
当ALE为高电平时传输的是地址;当ALE为低电平传输的是数据。

从Nand Flash芯片手册可知,要操作Nand Flash需要先发出命令。
在这里插入图片描述
那么说明数据线也传输命令,那么怎么分辨是命令呢?
当CLE为高电平时传输的是命令;当CLE和ALE为低电平时传输的是数据。

nCE用来干嘛呢?
数据线接到Nand Flash、Nor Flash、SDRAM、DM9000,那么怎么避免干扰?
这些数据被访问时,需要被选中,没有选中的就当没接一样。

假设烧写Nand Flash,把命令、地址、数据发给它之后,Nand Flash不可能瞬间完成。那么怎么判断是烧写完成了呢?
通过状态引脚RnB来判断。
当RnB为高电平表示就绪;当RnB为低电平表示正在忙。

2、怎么操作Nand Flash呢?

根据Nand Flash的芯片手册,一般过程是

  • 发出地址
  • 发出命令
  • 发出/读数据

从读ID时序图看[每个NAND FLASH都内嵌一些ID(譬如:厂家ID,设备ID)]:
在这里插入图片描述

对于我们s3c2440来说,内部集成了一个NAND FLASH控制器
NAND FLASH控制器,帮我们简化了对NAND FLASH的操作。
下面来分析一下不使用NAND FLASH控制器和使用NAND FLASH控制器对外设NAND FLASH的操作。
发命令:

Nand FlashS3C2440(使用Nand Flash 控制器)
nCE选中NFCMMD寄存器上写命令值
CLE输出高电平
DATA0~DATA7上输出命令值
发出一个写脉冲

发地址:

Nand FlashS3C2440(使用Nand Flash 控制器)
nCE选中NFADDR寄存器上写地址值
ALE输出高电平
DATA0~DATA7输出地址值
发出一个写脉冲

发数据:

Nand FlashS3C2440(使用Nand Flash 控制器)
nCE选中NFDATA寄存器上写数据值
ALE和CLE输出低电平
DATA0~DATA7输出数据值
发出一个写脉冲

读数据:

Nand FlashS3C2440(使用Nand Flash 控制器)
nCE选中从NFDATA寄存器上读出数据
发出读脉冲
读DATA0~DATA7上的数据

3、从uboot上体验Nand Flash的操作:

在uboot上,查看下命令的作用:
help md
help mw

(1)读ID

uboot里的数据都认为是16进制的,所以不加0x也可以。

-S3C2440u-boot
选中NFCONT的bit1设为0md.l 4E000004 1;mw.l 4E000004 1
发出命令0x90NFCMMD=0x90mw.b 0x4E000008 90
发出地址0x00NFADDR=0x00mw.b 0x4E00000C 00
读数据得到0xECval=NFDATAmd.b 0x4E000010 1(1:表示读1次,如果不屑1的话会一直读下去)
读数据得到device codeval=NFDATAmd.b 0x4E000010 1
退出读ID的状态NFCMMD=0xffmw.b 0x4E000010 0xff

(2)读0地址的数据

uboot上查看:nand dump 0
从时序图上看:
在这里插入图片描述
因为我们要读0地址上的数据,所以写入地址00000。
为什么是5个地址表示地址呢?
我们的Nand Flash是256M(228),至少需要28条数据线。但是我们的Nand数据线有8条,所以至少是需要4个周期,表示地址。为了兼容不同的Nand,用5个周期表示:
在这里插入图片描述

-S3C2440u-boot
选中NFCONT的bit1设为0mw.l 4E000004 1
发出命令0x00NFCMMD=0x00mw.b 4E000008 0x00
发出地址0x00NFADDR=0x00mw.b 0x4E00000C 0x00
发出地址0x00NFADDR=0x00mw.b 0x4E00000C 0x00
发出地址0x00NFADDR=0x00mw.b 0x4E00000C 0x00
发出地址0x00NFADDR=0x00mw.b 0x4E00000C 0x00
发出地址0x00NFADDR=0x00mw.b 0x4E00000C 0x00
发出命令0x30NFCMMD=0x30mw.b 0x4E00000C 0x00
读数据得到0x17val=NFDATAmr.b 0x4E00000C 1
读数据得到0x00val=NFDATAmr.b 0x4E00000C 1
读数据得到0x00val=NFDATAmr.b 0x4E00000C 1
读数据得到0xeaval=NFDATAmr.b 0x4E00000C 1
退出读状态NFCMMD=0xffmw.b 0x4E000010 0xff
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值