环境: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;
}
/********************************************************
//函数名称: 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
}
/********************************************************
//函数名称: 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
}
res = f_mkfs("1", FM_FAT32, 0, work, sizeof(work));
这两条中,其中FF_MAX_SS是多少? sizeof(work)得到的值是多少?
要不要直接用512替换一下呢
我这不懂,瞎掺和
一周热门 更多>