nand flash的读写操作

蹲街弑〆低调 提交于 2019-12-02 09:12:57

本篇博客芯片基于三星s3c2440,nand flash基于三星的K9F2GXXU0M

首先来看下电路图上相关的内容
在这里插入图片描述
看到这个电路图会有一个疑问,其他的存储设备一般会有地址总线和数据总线相连,而在nand flash中只有数据总线相连,所以传递数据和地址以及命令都只能依靠这8根数据线,当ALE为高电平的时候传输的是地址,当CLE为高电平时传输的是命令,当ALE和CLE都为低电平时传输的是数据,后面我们将根据详细讲述为什么是这样?
由于nand flash连接上了数据总线,所以需要通过片选信号来控制设备是否要处于工作状态,承担这一功能的是CE。
nand flash和其他所有存储设备一样,在读取数据或者写数据的过程不是一瞬间就完成,会有一段延迟,我们可以根据RnB管脚来判断读写数据是否完成
对于各个管脚的功能我们也可以从nand flash手册上得到
在这里插入图片描述
如下介绍了各种mode下,对应的各个引脚的状态。如果想要更详细分析的话,需要阅读相关的时序图
在这里插入图片描述
我们来对nand flash做一个简单的测试(基于u-boot完成)
在这里插入图片描述
CE电平拉低,选择当前设备
CLE发出一个信号,WE发出一个信号,设置当前是向nand flash写入命令
同时写入 read ID Command
ALE发出一个脉冲,WE发出一个信号,设置当前是向nand flash写入地址
同时写入 Address. 1cycle(为什么是1个周期,因为只有8根线,显然一次是无法完成地址传输的)
当ALE信号结束,会有一个等待时间,接着RE发出信号,分两次读出信息

来看nand flash controller
COMMAND REGISTER NFCMMD 0x4E000008 直接将命令发送给NFCMMD寄存器,就可以实现对nand flash写命令
ADDRESS REGISTER NFADDR 0x4E00000C 直接将命令发送给NFADDR寄存器,就可以实现对nand flash写地址
还有一个数据寄存器NFDATA ,可以通过这个寄存器读数据,也可以通过这个寄存器写数据。
按照时序图上的操作,确实读出了ID
在这里插入图片描述
测试成功;开始正式地编程
nand flash的初始化
如下是nand flash controller的时序图
在这里插入图片描述
如下是nand flash手册上的时序图,虽然这个是command latch cycle,还有address latch cycle,但是参数其实没有太大区别
在这里插入图片描述
CLE起始于ALE电平拉高, 终止于WE电平开始拉低,所以CLE = tcls - twp,可以查询

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!