NAND_FLASH(K9F1208U0C)驱动分析
一、?编写目的 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.?引脚说明
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.?写保护(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |