红联Linux门户
Linux帮助

三星NANDFLASH K9F2G08U0B

发布时间:2011-03-30 01:28:33来源:红联作者:txgc_wm
[i=s] 本帖最后由 txgc_wm 于 2011-3-31 01:39 编辑 [/i]

如果有朋友写三星NANDFLASH K9F2G08U0B的驱动,以此帖为讨论,大家一同分享一下。

目前,正在研究这个,很多地方的理解不正确,大家一同探讨,答疑!

for(i = (start_addr >> 11); size > 0; ) //右移11位,获取到列地址
{
rLB_ReadPage(i, to);
size -= 2048;
to += 2048;
i ++;
}


void rLB_ReadPage(U32 addr, unsigned char * to) //该处的addr就是以上右移11位后的行地址信息
{
U32 i;

rNF_Reset();

// Enable the chip
NF_nFCE_L();
NF_CLEAR_RB();

// Issue Read command
NF_CMD(CMD_READ);

// Set up address 设置读取的地址
NF_ADDR(0x00);
NF_ADDR(0x00);
NF_ADDR((addr) & 0xff); //以下三个地址是行地址
NF_ADDR((addr >> 8) & 0xff);
NF_ADDR((addr >> 16) & 0xff);

NF_CMD(CMD_READ3);

NF_DETECT_RB(); // wait tR(max 12us)

for (i = 0; i < 2048; i++) //该指令执行以后,实际可获取的是2112 bytes,但2048 bytes 以后的数据是属于附加的一些信息,所以这里没有获取
{
to[i] = NF_RDDATA8();
}

NF_nFCE_H();

}


其它的相关指令还在研究中,如果有朋友已经有结果,有兴趣的话分享一下。
文章评论

共有 5 条评论

  1. 陈润息 于 2011-04-21 09:44:02发表:

    路过

  2. 孙晓 于 2011-03-31 16:13:28发表:

    谢谢,你说了我现在知道了

  3. txgc_wm 于 2011-03-31 01:40:45发表:

    支持一下

  4. txgc_wm 于 2011-03-30 22:58:27发表:

    [i=s] 本帖最后由 txgc_wm 于 2011-3-31 01:40 编辑 [/i]

    擦除已验证通过,但不是很完善。


    int Nandflash_Erase_Block(int addr)
    {
    //U8 stat;
    //char data;

    addr &= ~0xfff;

    NF_nFCE_L();
    NF_CLEAR_RB();

    NF_CMD(CMD_ERASE1);
    NF_ADDR((addr>>11) & 0xff);
    NF_ADDR((addr >> 19) & 0xff);
    NF_ADDR((addr >> 27) & 0xff);

    NF_CMD(CMD_ERASE2);

    //NF_DETECT_RB();
    //NF_CMD(CMD_STATUS);
    NF_WAITRB();
    Uart0_SendString("erase the block success!");

    NF_nFCE_H();

    return 0;
    }

    如果大家有什么好的修改意见,请帮忙修改!

  5. Junyi 于 2011-03-30 08:44:03发表:

    一楼很强