本帖最后由 hpdell 于 2016-12-19 14:11 编辑
最近把历程的 nand flash 程序移植到 MT29F32G08CBACA 这个芯片上,出现如下问题,
如果单独使用如下函数进行测试是是正常的,
FTL_Init() ;
NAND_EraseBlock(4000);
uint32_t RWDataSize = 8192 * 4;
uint8_t * nand_F_tx_buff = (uint8_t *)mymalloc(SRAMEX, RWDataSize );
uint8_t * nand_F_rx_buff = (uint8_t *)mymalloc(SRAMEX, RWDataSize );
uint8_t i=0;
for(cc=0; cc < RWDataSize; cc++)
{
nand_F_tx_buff[cc] = i * 2 ;
nand_F_rx_buff[cc] = 0;
i ++;
}
NAND_WritePage( 4000, 6, &nand_F_tx_buff[0], 512);
NAND_ReadPage(4000, 6, &nand_F_rx_buff[0], 512);
if( Buffercmp_8(&nand_F_tx_buff[0], &nand_F_rx_buff[0], 512) == 0)
printf("NAND Data Read Write 8192 * 4 Test OK ... DD
");
else
printf("NAND Data Read Write 8192 * 4 Test Error ... EE
");
myfree(SRAMEX, nand_F_tx_buff);
myfree(SRAMEX, nand_F_rx_buff);
上述测试是OK的
但是如果使用LUT功能建立分区表 就出错,格式化也是出错,也就是如下函数
u8 FTL_CreateLUT(u8 mode)
另外 hnand1.Init.ECCPageSize = FMC_NAND_ECC_PAGE_SIZE_1024BYTE; //ECC页大小为1024字节 这个我配置是1024字节,根据资料介绍是1024字节,还有
还有#define NAND_ECC_SECTOR_SIZE 1024 //执行ECC计算的单元大小,默认1024字节 我也改成了1024,
不知道其他的是否还需要修改啊 ???
mt29f32g08cbaca芯片的ecc资料介绍:
mt29f4g08abada芯片的ecc资料介绍:
还有这个地方的 i = nand_dev.page_mainsize + 0X10 + eccstart * 4; //计算写入ECC的spare区地址 0X10是怎么得来的啊 ???????
不支持MLC啊。。。
你好,正点原子就有啊,我也是使用它们的历程来改的啊, 但是目前移植到 这个 MT29f32g08的芯片上面也还没有成功哟,你有什么好的建议啊 ???
我是在STM32F103的fsmc nand.c,fsmc nand.H上更改的
一周热门 更多>