深入理解nandflash之寄存器配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mxgsgtc/article/details/72356425
  • 前言
    根据前一篇文章介绍nandflash的基本特性,我们开始配置寄存器, 对于arm9来说,配置nandflash控制器相关寄存器是比较简单的,我们不需要考虑nandflash工作时序问题,我们只要配置控制器好参数,控制器会自动跟nandflash联系(产生读, 写,擦除时序等)
  • 寄存器介绍
    前一篇详细介绍了nandflash的读时序
    1.首先发命令 00H(读命令)
    2.发送地址
    3.发送地址
    4.发送命令 30H(读命令)
    5.忙等待
    6.读取数据
    可以猜测出, 完成读命令需要一个发送地址的寄存器,一个发送命令的寄存器, 需要一个能读取nandflash当前状态的寄存器, 一个存放数据的寄存器, 因此,根据三星用户手册:
    NFCONF –>基本的配置
    NFCONT –>nandflash的使能,片选等
    NFCMD –> 放入命令
    NFADDR –> 放入地址
    NFDATA –> 放入或者读取数据
    NFSTAT –> nandflash状态
    当然还有其他的寄存器,但是使其工作的话这几个就够用了
  • NFCONF
    这里写图片描述
    上面三个红色框标记的三个参数, 根据三星手册第6章我们可以看到三者代表的意义, 如下图
    这里写图片描述
    这是命令访问周期( 其实就是把上一篇文章的读时序分析的读命令进行放大化分析) , 结合nandflash数据手册, 如下图:
    这里写图片描述
    上图中有很多的时间, 其中以S结尾的我们叫做建立时间(Set),以H结尾的是保持时间(Hold)
    对比上面两个图我们可以得出结论
    1.从CLE拉高到WE使能的这段时间,意思就是说CLE要使能一段时间,稳定后在WE使能
    “TACLS”= tCLS - Twp
    2.WE写周期时间:
    “TWRPHO” = twp
    3.CLE保持时间(WE无效后, CLE需要保持一段时间,使其能好好的锁存,即延长硬件的锁存动作(就是存储一段时间),如果WE上升沿后马上拉高CLE(锁存使能无效), 很可能数据就不能及时存入nandflash,造成存储丢失, 我们还可以看到命令在I/O总线上也要随着CLE停留而停留一段时间(tDH)
    “TWROH1” = tCLH
    找到关系后, 通过nandflash数据手册可以找到这些时间的最小定义(即完成动作的最小时间,比如 tCLS的最小时间)
    这里写图片描述
    所以,我们要满足
    “TACLS”>= 0ns
    “TWRPHO” >=12ns
    “TWROH1” >=5ns
    即三个参数配置为 0 3 0 可满足要求
  • NFCONT寄存器
    这里写图片描述
    Reg_nCE:用来控制片选 (一般在读写一次的周期,都要进行片选信号的选定,取消选定的操 作,目的是为了省电)
    MODE: 用来控制flash是否能工作
    其余的寄存器比较简单,如下图
    这里写图片描述
    首先是 NFCMMD寄存器, 第8位写入命令即可,其它位保留
    其次NFADDR寄存器,同上
    NFDATA寄存器,写入数据,对于如何写入数据,查看Page6-5,对于我们的nanflash,IO口为8位
    这里写图片描述
    我们可以看到 传送4个字节,2个字节,1个字节的大小端方式,注意,嵌入式系统中,一个word为4个字节
    拿第一种情况来说,存4个字节的数据,0x12345678(大端, 内存低字节存高位) , 所以先发送 0x78(1st)–>0x56(2nd)–>0x34(3nd)–>0x12(4th)
    最后为状态寄存器 NFSTAT
    这里写图片描述
    RnB: 读取nandflash的状态是否忙,比如读数据,发送读命令后,连续发5个地址,在发读命令,这时5个地址被锁存,锁存是需要一段时间, 所以之后马上要检测nandflash是否忙,如果忙,则while等待到不忙为止,然后真正的读取数据, 好了,寄存器的重要部分介绍完了,之后可以参考韦东山老师的代码nandflash裸机代码进行分析

猜你喜欢

转载自blog.csdn.net/mxgsgtc/article/details/72356425
今日推荐