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)返回写入结果
nandflash操作详解的更多相关文章
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
- shell字符串操作详解
shell字符串操作详解的相关资料. 1.shell变量声明的判断 表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...
- memcached 命令操作详解
memcached 命令操作详解 一.存储命令 存储命令的格式: <command name> <key> <flags> <exptime> < ...
- windows phone 8.1开发SQlite数据库操作详解
原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...
- MySQL 操作详解
MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
- SVN的Windows和Linux客户端操作详解
SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...
随机推荐
- [转]sql利用游标循环,遍历表循环结果集
用 游标(Cursor) + While循环 的方法, 对Customers表中的CompanyName列进行遍历 ) declare pcurr cursor for select distinct ...
- DP编辑距离
俄罗斯科学家Vladimir Levenshtein在1965年提出了编辑距离概念. 编辑距离,又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的三种编 ...
- nearly,about,almost的区别
nearly 几乎,将近almost 几乎,差一点儿就,差不多(与动词,副词,形容词以及名词连用时,可与nearly通用;与no,none,nothing,never等否定式连用时,不可与nearly ...
- devexpress中ASPxGridView控件初始化赋值
写在ASPxGridView中OnCellEditorInitialize="ASPxGridView_progoods_CellEditorInitialize" 事件中: / ...
- .net验证码生成及使用
验证码的作用: 几年前,大部分网站.论坛之类的是没有验证码的,因为对于一般用户来说验证码只是增加了用户的操作,降低了用户的体验.但是后来各种灌水机器人.投票机器人.恶意注册机器人层出不穷,大大增加了网 ...
- C++断言与静态断言
断言是很早之前就有的东西了,只需要引入cassert头文件即可使用.往往assert被用于检查不可能发生的行为,来确保开发者在调试阶段尽早发现“不可能”事件真的发生了,如果真的发生了,那么就表示代码的 ...
- jqmobi 子菜单 高亮效果
在jqmobi 中经常用到一个 子菜单 单击某一个选项 希望能高亮:所以我是这样做的1.HTML的页面显示是这样的 <div class="order_subheader01" ...
- centos kvm
http://linux.dell.com/files/whitepapers/KVM_Virtualization_in_RHEL_6_made_easy.pdf http://linux.dell ...
- ios学习开发阶段小结
总结一下,开发了1个月10天的ios经验. 先晒成绩单:两个实验性质的app,一个wifi管家,一个图片壁纸软件 技术小结: 1.熟悉基本的各种ns语法:#import,#include,@class ...
- 网站性能优化(Yahoo 35条)
Yahoo 网站性能优化 35条 一.内容部分 尽量减少 HTTP请求 减少 DNS查找 避免跳转 缓存 Ajxa 推迟加载 提前加载 减少 DOM元素数量 用域名划分页面内容 使 frame数量最少 ...