NAND_FLASH(K9F1208U0C)驱动分析
来源:互联网 发布:校宝软件登录 编辑:程序博客网 时间:2024/06/07 03:42
一、 编写目的 2
二、 NAND FLASH(K9F1208U0C) 2
1. 引脚说明 2
2. memory组织方式 3
3. 地址传输 4
4. 命令 5
5. 模式控制 5
6. 操作时间限制 6
三、 Bootstrap驱动分析 6
1. CPU引脚设置 6
2. CPU NAND控制器设置 6
3. 读取NAND ID 6
4. 读取一页数据 7
5. 读取备用区域数据 9
6. 连续读取页 9
7. 连续读取备用区域 10
8. 页编程 10
9. 块删除 10
10. 写保护 11
一、编写目的
在移植Bootstrap V1.9至9260核心板时,出现NAND FLASH无法正确读取数据(可以读取ID)的情况。由于之前一直没有系统地学习NAND FLASH驱动,因此分析问题也比较慢,所以把Bootstrap V1.9移植工作暂时停止,先来学习NAND FLASH驱动部分再继续移植工作。
本文档用户记录NAND FLASH驱动分析的过程。本文档中使用的NAND为K9F1208U0C,为9260核心板上使用的64MB NAND。使用的源码为Bootstrap V1.9。
二、NAND FLASH(K9F1208U0C)
1. 引脚说明
标号
功能
说明
N.C
空引脚
不连接线路
I/O 0~7
传输总线
此款IC为8位数据/地址/命令总线
CLE
命令锁存使能
输入高电平时,命令码通过总线传输至于命令寄存器
ALE
地址锁存使能
输入高电平时,地址通过总线传输至地址寄存器
CE
芯片使能
当IC处于繁忙时,此引脚无效
RE
读使能
当需要通过总线往IC中读数据(包括地址)时,此引脚置低
WE
写使能
当需要通过总线往IC中写数据(包括地址)时,此引脚置低
WP
写保护
该引脚置低时,无法对IC进行擦写操作
R/B
状态输出
就绪/忙标志位,输出低电平时,表示IC正在进行擦写操作
2. memory组织方式
由上图可知,此NAND将整个存储器分为4096个Block,每个Block有32个Pages(也有称为Sector),总共有4096*32=131072=128K个Page。
每个Page中有528 B存储单元,其中512 B为存储数据使用,另外16 B为OOB备用区域,一般用于存入检验码信息。
上图最下一部分显示一Page的读写通过两个半页寄存器定位。因此要读一页数据,需要执行两次操作,分别为读取前、后半页。操作NAND Flash时,先传输命令,然后传输地址,最后读写数据。
3. 地址传输
NAND的读写的最小单位为Page,此款NAND为64 MB,因此地址长度最大为17 BIT。此IC地址传输分为4个周期,如下图所示。先传输的为列地址(半页内地址0~256),此IC固定为0x00;再传输三字节页地址,低地址在前。通过命令00H、01H区别读取前半页或后半页,即地址A8位。
4. 命令
此IC的命令集如下图所示。00H读取前半页,01H读取后半页,50H为读取备用区域。
5. 模式控制
通过设置各个使能引脚可使IC处于不同的工作模式。
6. 操作时间限制
这部分内容参考DATASHEET中,需要根据这些内容设置CPU的NAND控制器的参数。
三、Bootstrap驱动分析
1. CPU引脚设置
2. CPU NAND控制器设置
3. 读取NAND ID
执行流程为:
Ø [命令模式]传输90H命令
Ø [地址模式]传输00H地址
Ø [读取模式]传输4个ID值
相关的代码片段如下图所示,与DATASHEET中描述的一致,但代码中只读取了前面两个数据。
4. 读取一页数据
执行流程为:
Ø [命令模式]传输00H命令,读取前半页数据
Ø [地址模式]传输页地址
Ø [读取模式]传输4个ID值
Ø [状态模式]等待就绪
Ø [数据模式]传输前半页数据
Ø [命令模式]传输01H命令,读取后半页数据
Ø [地址模式]传输页地址
Ø [状态模式]等待就绪
Ø [数据模式]传输后半页数据
相关的代码片段如下图所示,与DATASHEET中描述的一致。但代码中等待就绪是使用了两个判断才能正常通过,编写者在注释中也使用了”?”来提出疑问。
5. 读取备用区域数据
6. 连续读取页
7. 连续读取备用区域
8. 页编程
9. 块删除
10. 写保护
- NAND_FLASH(K9F1208U0C)驱动分析
- nand_flash驱动的分析(框架分析)
- nand_flash,platform以及mtd驱动简析
- NOR_FLASH & NAND_FLASH
- NAND_flash与NOR_flash
- NAND_flash与NOR_flash
- NAND_flash与NOR_flash
- 说一说nand_flash,读取原理
- NOR_FLASH and NAND_FLASH
- 【驱动】DM9000网卡驱动分析
- NAND_flash和NOR_flash区别(最详细)
- NAND_flash和NOR_flash区别(最详细)
- 【linux驱动分析】之dm9000驱动分析
- LightsService分析 --- LED驱动分析
- icesword 驱动部分分析
- Icesword驱动部分分析
- 驱动Inf文件分析
- 串口驱动分析
- 浅谈Linux的内存管理机制
- C++的代码优化
- Tempter of the Bone(被粗心坑苦了)
- 嵌入式操作系统的调试
- C#中关于类型的转换
- NAND_FLASH(K9F1208U0C)驱动分析
- 逆波兰算法的实现
- phpstudy mysql密码默认或重置,phpstudy伪静态开启,网站发布外网
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.26
- Python 中对XML 的基本的读写操作
- 棋牌游戏开发--如何选择棋牌开发商
- Webkit之html解析(1)——HTML起源
- poj2635
- 引用计数