单片机学习小组
直播中

刘军

7年用户 1394经验值
私信 关注

根据BSP里面的NAND YAFFS2的例程调试NANDFLASH,不想使用YAFFS2文件系统怎么解决?

我根据BSP里面的NAND YAFFS2的例程调试NANDFLASH。
我现在不想使用YAFFS2文件系统。想直接调NANDflash驱动写。
int main(void)
{
    char *ptr;
    char mtpoint[] = "user";
    char buf[8];
    int volatile i;
  
        sysInitializeUART();
    sysprintf("\n");
    sysprintf("==========================================\n");
    sysprintf("          FMI NAND YAFFS2                 \n");
    sysprintf("==========================================\n");

        sysDisableCache();
        sysInvalidCache();
        sysSetMMUMappingMethod(MMU_DIRECT_MAPPING);
        sysEnableCache(CACHE_WRITE_BACK);

    SYS_Init();

    nand_init();                        
        
//         cmd_yaffs_devconfig(mtpoint, 0, 0x10, 0x14);
//     cmd_yaffs_dev_ls();
//           cmd_yaffs_mount(mtpoint);
//     cmd_yaffs_dev_ls();
nand_read_chip();

while(1)
{
}

}



void nand_read_chip(void)
{
        struct mtd_info *mtd = &nand_info[0];
        struct nand_chip *nand = &nand_chip[0];

  size_t retlen;

        u_char buf1[2048];
       u_char buf[2048];
        unsigned int i=0;

       struct erase_info ei;
        int retval = 0;
//擦除
        ei.mtd = mtd;
        ei.addr = 0x1600000;
////        ei.len = dev->data_bytes_per_chunk * dev->param.chunks_per_block;
        ei.len = 2048*64;
        ei.time = 1000;
        ei.retries = 2;
        ei.callback = NULL;
        ei.priv = 0;

        /* Todo finish off the ei if required */
        retval = mtd->erase(mtd, &ei);

//写
        memset(buf, 0x88, 2048);
        mtd->write(mtd ,0x1600000,2048,&retlen,buf);        


//读        
        mtd->read(mtd ,0x1600000,2048,&retlen,buf1);        
        
                for(i =0; i < 2048; i++)
                sysPutChar(buf1[i]);
}

擦除,写,读数据不成功,有没有人调试过


回帖(1)

YYXIAO

2024-4-24 18:01:00
nbsp; sysprintf("=    NUC970 NANDFLASH WRITE EXAMPLE    =n");    sysprintf("==========================================nn");    sysprintf("Opening NAND device...n");    if (nandInit() != 0) {      sysprintf("ERROR: NAND Init failed!!n");      while(1);    }    sysprintf("NAND Init Success!!nn");    sysprintf("Writing data to NAND...n");    ptr = (char *)malloc(512);    for (i=0;i<512;i++) {      ptr[i] = i%26 + 'A';    }    memset(buf, 0x0, sizeof(buf));    buf[0] = 'T';    buf[1] = 'E';    buf[2] = 'S';    buf[3] = 'T';    buf[4] = '1';    buf[5] = '2';    buf[6] = '3';    buf[7] = '4';    nandEraseBlock(0, 0, 0);    nandWritePage(0, (UINT8 *)buf, ptr);    sysprintf("Data written successfully!n");    free(ptr);    return 0;}  

以上是一个简单的写NANDFLASH的示例代码,只需要引入头文件nand.h并调用相应的API即可实现写入操作,不需要使用YAFFS2文件系统。需要注意的是,由于NANDFLASH写操作的特殊性,因此在调用相关API之前可能需要进行擦除操作。具体使用方法可以参考BSP提供的例程或者相关文档。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分