TF卡使用FATFS的f_mkfs格式化后容量少了一半

2019-07-18 17:25发布

环境:TF卡+SPI+FATFS R0.13。
结果:我使用了容量不同的TF卡(128M、2G、4G、8G、16G),调用f_mkfs函数对TF卡格式化之后,所有的卡插到电脑上发现容量都少了一半,不多不少就是一半!


格式化的源码:
/********************************************************
//函数名称: FATFS_Format_Disk
//函数功能: 文件系统格式化磁盘的函数
//输    入: BYTE drv——磁盘号,0:FDISK, 1:SFD
//输    出: FRESULT——格式化结果
//备    注: 对卡进行格式化,驱动器号一般为0
            格式完之后,插入电脑中会重新格式化,并且容量减半!!!
********************************************************/
FRESULT FATFS_Format_Disk(BYTE drv)
{
    BYTE work[FF_MAX_SS]; /* Work area (larger is better for processing time) */
    u8 i = 0;

    do
    {
        switch(drv)
        {
            case 0:
            {
                /* Create FAT volume */
                res = f_mkfs("", FM_FAT32, 0, work, sizeof(work));
            }
            break;

            case 1:
            {
                /* Create FAT volume */
                res = f_mkfs("1:", FM_FAT32, 0, work, sizeof(work));
            }
            break;

            default:
            {
                /* Create FAT volume */
                res = f_mkfs("", FM_FAT32, 0, work, sizeof(work));
            }
            break;
        }
        IF(i++ >= 10)
        {
            break;
        }
    }while(res != FR_OK);

    /* Register work area */
    f_mount(&fs[0], "", 1);

//    /* Unregister work area */
//    f_mount(NULL, "", 0);

#if USART_FATFS_PRINTF_EN
if(res == FR_OK)
{
    printf("格式化成功! ");
}
else
{
    printf("格式化失败! ");
}
#endif  
    return res;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
xieweibin
1楼-- · 2019-07-18 21:03
 精彩回答 2  元偷偷看……
dreamAnd
2楼-- · 2019-07-19 00:01
上电时的初始化函数:
/********************************************************
//函数名称: FATFS_Init
//函数功能: SD卡文件系统初始化
//输    入: 无
//输    出: 无
//备    注:
********************************************************/
void FATFS_Init(void)
{
    u8 i = 0;
   
    do
    {
        g_SDCardInitStatus = SD_Init();
        i++;
    }while((i < 10) && (g_SDCardInitStatus != SUCCEED));
    if(g_SDCardInitStatus == SUCCEED)
    {
        /* Register work area */
        f_mount(&fs[0], "", 1);
        if(res == FR_OK)
        {
                    
#if (USART_PRINTF_EN)
printf("注册工作区res : %d ", res);
#endif   
   
            g_SDCardInitStatus = SUCCEED;            
        }
        else
        {
            g_SDCardInitStatus = FAILURE;
        }
    }
        
#if (USART_PRINTF_EN)
printf("SD卡初始化结果%d ", g_SDCardInitStatus);
#endif   
   
}
dreamAnd
3楼-- · 2019-07-19 05:43
PS,上电时TF卡和FATFS初始化程序:
/********************************************************
//函数名称: FATFS_Init
//函数功能: SD卡文件系统初始化
//输    入: 无
//输    出: 无
//备    注:
********************************************************/
void FATFS_Init(void)
{
    u8 i = 0;
   
    do
    {
        g_SDCardInitStatus = SD_Init();
        i++;
    }while((i < 10) && (g_SDCardInitStatus != SUCCEED));
    if(g_SDCardInitStatus == SUCCEED)
    {
        /* Register work area */
        f_mount(&fs[0], "", 1);
        if(res == FR_OK)
        {
                    
#if (USART_PRINTF_EN)
printf("注册工作区res : %d ", res);
#endif   
   
            g_SDCardInitStatus = SUCCEED;            
        }
        else
        {
            g_SDCardInitStatus = FAILURE;
        }
    }
        
#if (USART_PRINTF_EN)
printf("SD卡初始化结果%d ", g_SDCardInitStatus);
#endif   
   
}
jfuwre
4楼-- · 2019-07-19 08:02
文件系统还没研究过。。。帮顶吧!!!
zhouxk
5楼-- · 2019-07-19 08:18
BYTE work[FF_MAX_SS]; /* Work area (larger is better for processing time) */
res = f_mkfs("1", FM_FAT32, 0, work, sizeof(work));

这两条中,其中FF_MAX_SS是多少? sizeof(work)得到的值是多少?
要不要直接用512替换一下呢
我这不懂,瞎掺和
cnm7
6楼-- · 2019-07-19 12:00
 精彩回答 2  元偷偷看……

一周热门 更多>