NandFlash操作流程图+硬件ECC实现

 

1. 读操作

  1. init_nand

  2. reset_nand

  3. 查询完成

  4. disable

  5. enable

  6. 发送读命令

  7. 发地址序列

  8. 查询NFSTAT

  9. 读数据

 

2. 写过程:

写操作的起始地址只能是上半页。

a. 发命令0x80 作为开始。

b. 发地址,和读操作是一样的。

c. 写数据.

d. 发命令0x10 表示结束。

e. 等待状态变成ready

f. 发送0x70 命令查看返回结果,判断是否成功。

 

3. 擦除过程:

a. 发命令0x60

b. 发送地址 9~25

c. 发命令0xd0

d. 等待状态变成ready.

e. 发送0x70 命令查看返回结果,判断是否成功。

 

////////////////////////// src ecc write ////////////////////

    1. NFCONF
    2. NFCONT
    3. NFCMMD 80
    4. NFADDR

    5. NFCONT bit[4] , init ecc
    6. NFCONT bit[5]"0", unlock
    7. 写512数据到main area.
    8. NFCONT bit[5]"1", lock
    9. 读出NFMECC0校验码
    10. 将NFMECC0写入NFDATA, 顺序写到了oob区.

    11.NFCMMD10
    12. 轮询NFSTAT
    13. NFCMMD 70
    14. 读NFDATA bit[0]判断,返回值。

 

 

///////////////////// src ecc read /////////////////////////

    1. NFCONF
    2. NFCONT
    3. NFCMMD 00
    4. NFADDR

    5. NFCONT bit[4] , init ecc
    6. NFCONT bit[5]"0", unlock
    7. 读512数据到main area.
    8. NFCONT bit[5]"1", lock

    9. 读出oob区的原ecc
    ((unsigned char *)&oob_ecc)[0] = NFDATA;
    ((unsigned char *)&oob_ecc)[1] = NFDATA;
    ((unsigned char *)&oob_ecc)[2] = NFDATA;
    ((unsigned char *)&oob_ecc)[3] = NFDATA;

    10. 读出read的新ecc

    11. printf

 

 

/////// 软件lock, lock-tight://////////////
    1. (soc P234)
    Lock-tight bit(NFCONT[13]) is set前,可以设置
    NFSBLK - 块开始地址
    NFEBLK - 块结束地址
    这样, 在lock-tight, softlock 都"1"后,NFSBLK到NFEBLK 之间的区域可以write, 其他区域是read-only.

    2.如果给NFSBLK 和NFEBLK 设为同样的地址,则这一块地址为lock

 

你可能感兴趣的:(7,嵌入式技术)