zoukankan      html  css  js  c++  java
  • nandflash操作详解

    1.nandflash就是嵌入式系统的硬盘


    2.分类
    (1)MLC:存储单元格存储两位,慢,偏移,寿命短,容量大
    (2)SLC:存储一位。快,寿命长,容量小,昂贵




    3访问;
    (1)独立编址,有专用的控制器,控制器里有相应的寄存器,先送地址,然后命令,最后数据
    (2)地址组成:行地址(页编号),列地址(在页中的偏移),一个nand可以有很多块,每一块可以很多页,每一页的两个部分可以不同规格
    (3)信号引脚:

    4.初始化nand控制器,(搜索关键字operation)
    (1)初始化NFCONF,配置三个重要的与HCLK有关的时间参数
    (2)初始化NGCONT,一开始要disable chip select 以及使能控制器
    (3)复位:选中nandflash,清除RB标志,发送0xff命令,等待RB信号,取消选中RB信号




    5.按页读
    (1)选中nandflash
    (2)清除RB标志
    (3)写入0x00命令
    (4)发送列地址,两次(但是由于是页读的方式,所以列地址,即页中的偏移量就是0)
    (5)发送页编号,即行地址,分三次完成
    (6)发送0x30命令
    (7)等待RB信号变为ready
    (8)读出数据,每次都取出数据寄存器的值,他会自动更新自己的值
    (9)取消选中nandflash


    6.修改之前的代码拷贝启动代码(之前只从iram复制到内存)
    (1)时钟初始化有问题,错把UPLL当MPLL
    (2)汇编和C语言的参数传递,不超过4个的时候,直接用r0--r3传递,且顺序和从函数的形参一致
    (3)注意保存lr,否则连续两次跳转,会破坏lr,导致在执行完复制函数以后,不能返回到应执行的初始化后续代码部分
    (4)注意在调用c函数之前进行栈的初始化


    7.拷贝函数的三个参数,页的起始地址r0,(ulong,但是由于是页读方式,所以要去掉低11位,低11位是列地址,这里我们要去页编号,即行地址),内存起始地址r1(目标起始地址,uchar*),数据大小r3,每一页对应2048个字节(2K,视具体nandflash而言,每一个循环,大小减小2048)


    8.一旦要去读取(等待)RB信号,之前就要对其进行清除;
    一旦有选中操作,在结束之后要取消选中。




    9.写入之前要擦除,参数是要擦除的页地址,擦除的是指定的页所在的块:
    (1)选中nandflash
    (2)清除RB标志
    (3)写入0x60命令
    (4)发送页编号,即行地址,分三次完成
    (5)发送0xD0命令
    (6)等待RB信号变为ready
    (7)发送命令0x70
    (8)读取擦出结果
    (9)取消选中nandflash
    (10)返回擦除结果


    10.按页写
    (1)选中nandflash
    (2)清除RB标志
    (3)写入0x80命令
    (4)发送列地址,两次(但是由于是页读的方式,所以列地址,即页中的偏移量就是0)
    (5)发送页编号,即行地址,分三次完成
    (6)写入数据,用循环
    (7)发送0x10命令
    (8)等待RB信号变为ready
    (9)发送命令0x70,
    (10)读取写入结果,从数据寄存器读
    (11)取消选中nandflash
    (12)返回写入结果

  • 相关阅读:
    OSGI .Net 框架学习
    ArcEngine开发过程中的空间关系
    ITOCControl添加鼠标右键菜单
    IHookHelper的使用
    ITopologicalOperator接口调用
    GeoProcessor的使用方法
    ArcEngine内置工具条
    OSGI.NET插件方式开发你的应用
    C#在linux上运行实现
    Linux 下随机启动自己的应用 -请使用while(true) 不要Console.ReadKey()
  • 原文地址:https://www.cnblogs.com/chd-zhangbo/p/5287300.html
Copyright © 2011-2022 走看看