美文网首页
24.硬件 - Nand Flash 控制器 & Nand Fl

24.硬件 - Nand Flash 控制器 & Nand Fl

作者: 柏666 | 来源:发表于2019-07-17 02:12 被阅读0次

一、结构与简介:

        1、结构图:

        ①、Nand Flash 以bit的方式保存数据在memory cell中。通常一个cell存一个bit。cell以8或者16为单位连成bit line,形成 byte(x8)/word(x16),即位宽。Page由Line组成。 

        ②、每个 Nand Flash 设备由多个块(block)组成。每个块(block)由多个页(page)组成。

        ③、每个页(page)由普通区域和OOB区组成。普通区域存放读写数据,OOB区域存放校验码。

        ④、向页内写数据时可能发生位反转。所以需要产生校验码,并存入OOB区。从页内读数据时同时读出校验码,纠正位反转。

        ⑤、OOB区首字节存放block状态。如果是 0xff,表明是好的。如果非 0xff,则是坏块。 OOB对 CPU 来说透明(out of bank)。

        ⑥、页(page)是 Nand Flash 的最小读写单元。块(block)是 Nand Flash 的最小擦除单元 。

        ⑦、对 Nand Flash 来讲,地址和命令只能在I/O[7:0]上传递,数据宽度是8位。

        2、原理图:

        3、操作命令(不同 Nand Flash 或有差异):

        3、操作步骤:片选选中 ==> 发命令 ==> 发地址 ==> 传输数据

        ①、发命令:拉高 CLE ==> 用DATA线写命令(写寄存器) ==> 发写脉冲

        ②、发地址:拉高 ALE ==> 用DATA线写地址(写寄存器) ==> 发写脉冲

        ③、发数据:拉低 ALE,CLE ==> 用DATA线写数据(写寄存器) ==> 发写脉冲

        ④、读数据:拉低 ALE,CLE ==> 发读脉冲 ==> 用DATA线读数据(读寄存器)


二、ECC校验:


三、Nand Flash 移植:

        1、初始化:(根据不同型号 Nand Flash 的 datasheet,配置寄存器)

        ①、设置时序。

        ②、初始化 Nand Flash 控制器。

        ③、初始化ECC。并禁止片选,以防误操作。(及一些其他操作)

        ④、如有必要,进行重定位(拷贝到内存)。

        2、识别(读芯片信息):

        ①、使能片选。

        ②、发送命令和地址周期,并读数据。注意设延迟。

                Ⅰ、根据时序图设延时。必要时读取寄存器并判断操作是否完成,没完成则等待。

                Ⅱ、地址根据 datasheet 设置,按位数及顺序依次写入。(行列地址分别写入)

        ③、取消片选使能。

        3、擦除(一次擦除一个 block):

        ①、使能片选。

        ②、发送命令和地址周期。(只需要行地址 page)

        ③、发出擦除命令,延迟等待擦除结束。(擦除一个块。如有需要,则循环操作)

        ④、取消片选使能。 

        4、读(一次读一个 page):

        ①、判断坏块,坏的跳过。

        ②、使能片选。

        ③、发送命令和地址周期,及读命令,延迟等待。

        ④、读数据(数据寄存器中的值)。

        ⑤、取消片选使能。

        4、烧写(一次写一个 page):

        ①、使能片选。

        ②、发送命令和地址周期。

        ③、发出要烧写的数据(地址不一定从页首位开始)。判断大小,如果超过一页大小,则写入下页。依次循环。

        ④、发出烧写命令。延迟等待烧写结束。

        ⑤、更新行列的值,判断循环,写入下一页。

        ⑥、取消片选使能。

        5、数据定位:行(page)与列(column)

        ①、行与列的定位:与传入地址 addr,页大小 pagesize 有关。等决定具体参照芯片手册。

        ②、行(page):page = addr / pagesize;    或    page = addr >> bitnum;    2的 bitnum 次方等于 pagesize 

        ③、列(column):column = addr % pagesize;    或    column = addr & (pagesize - 1);

相关文章

网友评论

      本文标题:24.硬件 - Nand Flash 控制器 & Nand Fl

      本文链接:https://www.haomeiwen.com/subject/tmuhlctx.html