linux下nand flash驱动工作原理,Linux驱动之Nand Flash四问,原理、工作方式都包含了...

Nand Flash 是一个存储芯片。本文引用地址:http://www.eepw.com.cn/article/201801/374606.htm

那么:这样的操作很理“读地址A的数据,把数据B写到地址A”

问1:原理图上的Nand Flash和SC2440之间只有数据线,怎么传输地址?

答:在Data0-Data7上既传输数据,又传输地址,当ALE为高电平时传输的是地址

问2:从Nand Flash芯片手册可知,要操作Nand Flash需要先发出命令,怎么传入命令。

答:在Data0-Data7既传输数据,又传输地址,也传输命令

当ALE为高电平时传输的是地址

当CLE为高电平时传输的是命令

当ALE和CLE为低电平时传输的是数据

问3:数据线既接到Nand Flash,也接到NOR Flash,还接到SDRAM等等,怎么避免干扰?

答:这些设备,要访问之前必须选中

没有选中的芯片不会工作,相当于没有接一样

问4:假设烧写Nand Flash,把命令、地址、数据发给它之后,Nand Flash肯定不可能瞬间完成烧写的,怎么判断烧写完成?

答:通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平正忙。

怎么操作Nand Flash呢?

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

发出命令

发出地址

读写数据7831366b28b95a7d16bcf99ea0461919.png

以上操作可以从时序图上得到

我们先看下nandflash的布线f3e1b2db14561dc40432cb7795d6e05d.png

有data0 到data7 八根数据线

nandflash是个存储芯片,那我提出请求:读地址a的数据,把数据b写到a地址上去

那么我们看原理图只看到data0-data7,没有看到地址引脚,那怎么把地址传给我们的开发板

复用,这几个引脚即传数据也传地址

怎么分别是数据还是地址呢,有个ALE信号,当ALE是高电平时,传输的是地址

但是它不仅只传输地址和数据,还传输命令,在nand flash芯片手册可知,要操作nandflash要先发出命令,只有八条数据线,怎么传输命令呢???

当CLE为高电平的时候传输的就是命令,当ALE和CLE都为低电平的时候传输的是数据。

这个data0 有的开发板不仅仅只接nandflash,还有的接norflash等等非常多的地方

数据线 地址线等即接到nandflash,也接到norflash,还接到sdram,DM9000等等。怎么避免干扰,比如说我访问nandflash的时候,norflash就不要给我提供数据

你就要相当与没接一样,怎么避免干扰呢???

就是通过这些设备要访问之前,必须选中,什么叫选中呢,他们都有片选信号,就要我们的片选引脚变为低电平选中,就是cs引脚,没有选中的芯片不会工作,相当于没接一样

假设烧写nandflash,把数据、命令、地址发给他之后,nandflash肯定是不可能瞬间完成的,怎么判断烧写完成,通过状态引脚RnB来判断,它为高电平表示完成就绪。为低电平表示正忙

we和re就是读写信号..

怎么操作nandflash

根据nandflash的芯片手册,一般过程是:发出命令,发出地址,读写数据。

nandflash的命令表格如下ca1a2c9e5d3e5beba97dde1dc1580164.png

我们往下看,拿个例子来看,读ID这个例子的时序图

每个nandflash都会内嵌ID,比如厂家ID啊等等。fe28de602bd255eb8fe91268fa1c1ecd.png

时序图 横轴是时间,时序图怎么看呢 ,从左往右看。纵向方向就是一列一列 来看

然后可以看到发出命令 90,怎么知道的 ,在数据线上发出90这个值,怎么知道它是命令的,就是CLE是高电平。然后给它一个写脉冲。这个写信号的上升沿nandflash就会把数据存进来,它就知道了我是一个命令。

然后接着发出一个0地址,然后就可以读数据了。

对于我们芯片来说里面集成了一个nandflash控制器,内部接线。它帮我们简化了这些操作,

nandflash 芯片(rus5pv210)

选中芯片

发命令的操作 CLE变为高电平把命令值写到NFCMD寄存器里就可以了

在data0-data7输出命令值

提供一个写脉冲

选中芯片

发地址 ALE输出高电平

在data0-data7输出地址值把地址写入NFADDR寄存器里就可以了

提供一个写脉冲

选中芯片

发数据 ALE,CLE输出低电平

在data0-data7输出数据的值把地址写入NFDATA寄存器里就可以了

提供一个写脉冲

选中芯片

读数据 发出一个读脉冲

读data0-data7的数据

我们可以用uboot体验nandflash的操作

1.读ID,时序图在上面

选中

发出0x90命令

发出地址0x00

读第一个数据会得到0xEC

读第二个数据得到device code

选中的话芯片手册的nand flash章节 可以知道4c7c91c03e9c1e3ba89fa565c6c8ea27.png

选为0为选中

发出命令就是把命令写到下面这个寄存器里面去213a2701b583f2145ca34b5181c7726d.png

同理 地址和数据也是一样寄存器如下84c18a11771ed7ad129e75398b2aef87.png

但是在uboot里面怎么操作呢

uboot里面有命令可以读内存的

md.w 0xB0E0_0004 1 这命令表示读 0xb0e00004 读一次

mw.w 是写命令4c31f89a5f8643c1543117af46ab29ca.png

md 内存显示 b是以字节为单位,w是以2字为单位,l是以四字节为单位92b28a655a0d72824ab9cd1d5943191d.png

读ID命令流程如图b8d3a08b8dcf295c1dfc21cddc0a7739.png

读出dc

我们验证一下 nandflash里面读ID下面就有这张图b49b42483906b24c675391c809c6dec0.png

结束读ID的命令 就是NFCMD寄存器等于0xff 就是命令的reset

2.读数据

我们可以根据uboot的nand dump 0命令读取0地址的数据80fcd57bcf2dee15ea401f935cf8dfd5.png

我们来一下nandflash读操作的时序图515518d576eeea1e16954675a4761b26.png

为什么中间有五个地址

看容量

读00数据命令如下d00b2ee0a64ea2d3fa8b81fa7a8ecece.png

跟上面的输出是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值