NAND FLASH挂载FATFS文件系统失败,返回错误13,格式化也是失败

2019-07-20 06:06发布

自己做的STM32F429IGT6板,选择了MT29F8G08ABABA作为NAND FLASH芯片,挂载在STM32F429IGT6的BANK3上。我根据芯片手册重写了正点原子的NAND文件,成功完成NAND初始化,读取到了正确的ID。FATFS文件系统手动移植官网0.13版本的,已经成功挂载了W25Q256和SD卡,并成功在SD卡中读出了文件。现在有如下几个问题:
一、在NAND文件内,对NAND的初始化,在定义NAND_HandleTypeDef类型结构体NAND_Handler的时候,其中的NAND_Handler.Init.ECCPageSize=FMC_NAND_ECC_PAGE_SIZE_512BYTE;这里,定义ECC页的大小,是根据什么来定义的?是根据实际NAND一个Page的main区大小来定义还是根据其他的什么?


                Nand_Device.Page_TotalSize = 4320;                               
                Nand_Device.Page_MainSize = 4096;                               
                Nand_Device.Page_SpareSize = 224;                               
                Nand_Device.PageNum_inOneBlock = 128;               
                Nand_Device.BlockNum_inOnePlane = 1024;       
                Nand_Device.BlockTotalNumber = 2048;                       

以上为根据芯片手册定义的NAND信息结构体

二、在0.13版本的FATFS文件中,格式化函数多了两个参数
FRESULT f_mkfs (
        const TCHAR* path,        /* Logical drive number */
        BYTE opt,                        /* Format option */
        DWORD au,                        /* Size of allocation unit (cluster) [byte] */
        void* work,                        /* Pointer to working buffer (null: use heap memory) */
        UINT len                        /* Size of working buffer [byte] */
)

最后的两个参数是操作内存所需要的数据缓存空间和缓存空间大小嘛?我挂载W25Q256用的格式化函数result = f_mkfs("1:",1,4096,FATFS_DataBuff,FF_MAX_SS);是成功格式化的。

三、NAND部分函数除了根据不同芯片改写了芯片信息的结构体,以及ECC计算页大小不明白对应什么之外,其他都根据正点原子的代码几乎是重写。软件中间层FTL文件一一对应地复制了正点原子的对应文件代码,在FATFS文件系统的diskio文件内,FTL部分一点都没改。LUT表正常创建,但是总是在调用挂载NAND和格式化NAND的函数之后,一定会进入ECC更正函数,也就是NAND_ECC_Correction();内,计算出来的eccchk根据debug显示是0。
在串口助手上打印出来的信息为:
err hd,rd:0x0,0xFFFFFFFF
eccnum,eccstart:1,0
PageNum,ColNum:0,0

后来尝试了单独调用NAND文件内的读写函数,写入27个字节,读出27个字节通过串口打印,没有任何错误。在这之后,没有进行擦除,再次尝试挂载和格式化,串口打印信息为:
err hd,rd:0xf0cc,0xFFFFFFFF
eccnum,eccstart:1,0
PageNum,ColNum:0,0
还是显示2bit以上的错误,无法更正。现在我不太明白为什么。而且在擦除NAND的块的函数中,因为一个块有128个页,所以BlockNum<<=7;将块地址转化为页地址
想请问大家有什么可以尝试解决的办法,附件是相关的代码,主函数和工程没有包含其中。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。