nand flash的读操作

    韦老师的nand flash一章操作的flash与我开发板上的nand flash型号不同,做了一些修改。我的开发板上nand flash型号为K9F2G08,即2Gbit,8bit或者说是256M,8bit。

    1、配置nand flash

     CPU的读写操作要满足flash的时序要求,主要牵涉到HCLK,CLE,ALE和nWE,如下图所示:

2440的CLK分为三种HCLK, FLCK和PCLK,默认的比例是1:1:1,在没有设置锁相环(PLLCON)的情况下,FCLK即为晶振的频率,datasheet上有这样一段话:

However, PLL is commonly known to be unstable after power-on
reset, so Fin is fed directly to FCLK instead of the Mpll (PLL output) before the software newly configures the
PLLCON. Even if the user does not want to change the default value of PLLCON register after reset, the user should
write the same value into PLLCON register by software.

而且PLLCON的默认值即使要起作用也要重新配置PLLCON寄存器。

 

我的开发板晶振是12M的,默认HCLK为12M,而K9F2G08的时间特性如下:

MAX(setup time + hold time, WE plus width)=17ns,可以按照韦老师的设置,TACLS=0(1个HCLK),TWPRH0=3(4个HCLK),TWRPH1=0(1个HCLK),按照韦老师的说话,即使HCLK=100M,TACLS+TWPRH0+TWPRH1=6/(100M)=60ns,可以满足K9F2G08的要求。

    另外NCON0,GPG13,GPG14,GPG15都是只读的,按照K9G2G08的配置应该为1 1 1 0,mini2440的原理图上有说明要去掉NR4和NR5的电阻。

    2、字节对齐

    flash的读操作是以页为单位的,所以起始地址和读取的大小都要是2Gbit的倍数。

    3、写地址需要5个cycle

    4、读flash的流程,如下所示:

完全手册中没有介绍ECC的校验,这要看烧写程序把校验码写到flash的spare area的哪个字节了,校验部分可以看赵春江老师的博客。

    其他的也就差不多一样了。

 

<think>嗯,用户想了解NAND Flash读取时序的工作原理和技术细节。这个问题挺专业的,需要结合硬件接口和时序控制来解释。 用户之前已经接触过一些NAND Flash的基础概念,比如地址传输需要4-5个周期、最小写单位是页、存在坏块管理机制等。现在需要深入讲解读取时序的完整流程。 先从硬件结构说起比较好。NAND Flash的核心是存储阵列,数据通过IO线传输。读取操作涉及几个关键阶段:命令周期、地址周期、等待就绪和数据输出周期。每个阶段都有特定的时序要求。 命令周期首先要发00h或30h指令。这里要注意不同NAND类型(如SLC/MLC)指令可能有差异。地址周期比较复杂,需要分5次发送列地址和行地址。列地址决定页内偏移,行地址确定具体页号。地址传输顺序是固定的:A0-A7先发,然后是A9-A16等。 等待周期最考验设计。NAND内部需要时间从存储单元读取数据到缓存区,这段时间tR可能长达25μs。控制器必须检测R/B#引脚或轮询状态寄存器,这个等待机制对性能影响很大。 数据输出时采用串行方式,每个时钟周期传输8位数据。RE#下降沿触发输出,上升沿锁存数据。时序参数如tREA(输出使能时间)必须满足,否则会采样错误。 坏块管理也要提一下。读取时可能遇到ECC校验错误,需要结合OOB区的校验数据纠正。如果错误超过纠错能力,就要标记坏块。 最后补充实际工程中的实现方式。现代SoC都集成NAND控制器来自动处理时序,通过寄存器配置模式参数。软件工程师只需操作寄存器,不用直接控制波形。 用户可能还想知道时序参数的具体数值,或者如何用示波器测量时序波形。可以建议查阅具体芯片的数据手册,比如美光或三星的文档会提供详细时序图。</think>以下是对NAND Flash读取时序原理的详细技术解析,结合硬件结构和操作流程说明: --- ### **一、NAND Flash读取时序核心步骤** 1. **命令周期(Command Cycle)** - 发送读取指令 `00h` → `30h`(SLC NAND)或 `00h` → `30h` → `Xh`(MLC/TLC)。 - 控制器将指令码写入NAND的I/O端口(通过`WE#`下降沿锁存)。 2. **地址周期(Address Cycle)** - **分5个周期发送地址**(以2KB页为例): ``` 周期1: 列地址低8位 (A0-A7) 周期2: 列地址高8位 (A8-A11, 页内偏移) 周期3: 行地址低8位 (页号) 周期4: 行地址中8位 周期5: 行地址高8位 (LUN/Block号) ``` - 每个地址字节在`WE#`的下降沿被锁存[^1]。 3. **等待就绪周期(tR时间)** - 发送`30h`指令后,NAND进入**内部数据搬移**状态(将存储单元数据搬至页缓存)。 - **tR延迟**:典型值10-25μs(SLC)或100μs以上(TLC),期间控制器需: - 监测`R/B#`引脚(低电平表示忙),或 - 轮询状态寄存器(通过发送`70h`指令读取I/O0)。 4. **数据输出周期(Data Out)** - 控制器触发`RE#`(使能)信号: - `RE#`的每个**下降沿**使NAND输出下一字节数据。 - `RE#`的**上升沿**锁存数据到控制器。 - 连续产生`RE#`脉冲,直至读取完整页数据(如2KB + 64B OOB区)[^2]。 --- ### **二、关键时序参数** | 参数 | 符号 | 典型值 | 作用 | |----------|-------|-----------|--------------------------| | 地址建立时间 | tAS | 10-20ns | `WE#`下降沿前地址稳定时间 | | 写脉冲宽度 | tWP | 10-25ns | `WE#`有效脉冲宽度 | | 访问时间 | tREA | 10-30ns | `RE#`下降沿到数据输出有效 | | 内部搬移时间| tR | 10μs~2ms | 存储单元→页缓存延迟 | | 脉冲宽度 | tRP | 10-30ns | `RE#`有效脉冲宽度 | > 📌 **注**:时序参数随工艺(SLC/MLC/TLC)和制程(nm)变化,需参考具体芯片手册。 --- ### **三、硬件协作机制** 1. **NAND控制器核心作用** SoC内部的NAND控制器硬件自动生成精确时序: - 将软件寄存器操作(如写命令/地址)转换为`WE#`、`RE#`等物理信号波形。 - 确保满足`tAS/tWP/tREA`等关键时序约束[^2]。 2. **坏块处理流程** 读取时需校验OOB区的ECC: - 若ECC校验失败且超出纠错能力,标记为坏块(更新坏块表BBT)[^3]。 - 后续写跳过该物理块(通过FTL层重映射)。 --- ### **四、典型读取时序图** ```plaintext __ __ __ __ __ ________________ CLK __/ \__/ \__/ \__/ \__/ \_________/ ____ ____ ____ ____ ____ ____ WE# __/ \____/ \____/ \____/ \____/ \____/ \__ CMD ADD0 ADD1 ADD2 ADD3 ADD4 I/O --<00h>----<ColLow>-<ColHi>--<RowLow>-<RowMid>-<RowHi>------- _____________________________ R/B# ________/ \____________________ _____________________ RE# ______________________________________/ \__/ \__/ \__ ... \_ D0 D1 D2 Dn ``` > ① 命令/地址周期 → ② tR等待 → ③ RE#脉冲输出数据 --- ### **五、工程实践要点** 1. **时序配置** 在NAND控制器寄存器中设置时序参数(如`tR/tWHR`),需匹配芯片手册。 2. **ECC处理** 每次读取页数据后,用硬件ECC引擎校验OOB区,纠正位错误。 3. **异步模式优化** 高性能场景使用ONFI/Toggle DDR接口,通过双沿采样提升吞吐量。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值