ºìÁª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·¢±í:

    һ¥ºÜÇ¿