完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
环境: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("格式化成功!rn"); } else { printf("格式化失败!rn"); } #endif return res; } |
|
相关推荐
12个回答
|
|
在 R0.12b这版本中,f_mkfs函数的参数:
FRESULT f_mkfs ( const TCHAR* path, /* [IN] Logical drive number */ BYTE opt, /* [IN] Format options */ DWORD au, /* [IN] Size of the allocation unit */ void* work, /* [指针] Working buffer */ UINT len /* [IN] Size of working buffer */ ); 参数:path 当给定0时, 首先在驱动器上的第一个扇区创建一个分区表, 然后文件系统被创建在分区上。 这被称为FDISK格式化,用于硬盘和存储卡。 当给定1时,文件系统从第一个扇区开始创建, 而没有分区表。这被称为超级软盘(SFD)格式化, 用于软盘和可移动磁盘。 参数:au 指定每簇中以字节为单位的分配单元大小。 数值必须是0或从512到32K之间2的幂。 当指定0时,簇大小取决于卷大小。 我建议把 res = f_mkfs("", FM_FAT32, 0, work, sizeof(work)); 改为 res = f_mkfs("", FM_FAT32, 512, work, sizeof(work)); 试试,看是不是这个导致的。 |
|
|
|
上电时的初始化函数:
/******************************************************** //函数名称: 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 : %drn", res); #endif g_SDCardInitStatus = SUCCEED; } else { g_SDCardInitStatus = FAILURE; } } #if (USART_PRINTF_EN) printf("SD卡初始化结果%drn", g_SDCardInitStatus); #endif } |
|
|
|
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 : %drn", res); #endif g_SDCardInitStatus = SUCCEED; } else { g_SDCardInitStatus = FAILURE; } } #if (USART_PRINTF_EN) printf("SD卡初始化结果%drn", g_SDCardInitStatus); #endif } |
|
|
|
文件系统还没研究过。。。帮顶吧!!!
|
|
|
|
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替换一下呢 我这不懂,瞎掺和 |
|
|
|
|
|
|
|
你好楼主,我刚开始搞这个fatfs,也是最新的r0.13a版本,使用格式化之后,调用f_getfree接口发现8M的flash,只有差不多一半的剩余空间。请问你这个问题解决了吗?
|
|
|
|
改了,也没用,我已经放弃了,改用删除的方式了。 |
|
|
|
zhouxk 发表于 2019-6-3 16:23 谢谢你的掺和 |
|
|
|
BJJRTD 发表于 2019-6-3 16:47 我已经放弃了,改用删除的方式了。 |
|
|
|
本帖最后由 twlllw 于 2021-10-20 14:01 编辑
f_res=f_mkfs("0:",1,32768); //R0.11a // cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024; // cardinfo->CardBlockSize = 512; cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1); //cardinfo->CardCapacity *= 512; cardinfo->CardCapacity *= 1024; // cardinfo->CardCapacity *= 1024; cardinfo->CardBlockSize = 1024; 亲试: cardinfo->CardCapacity *= 512; //格式化后少一半 cardinfo->CardCapacity *= 1024; //完整格式化 |
|
|
|
f_res=f_mkfs("0:",1,32768);
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1464 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
816 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1200 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1674 浏览 1 评论
548 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-11 03:41 , Processed in 0.861070 second(s), Total 61, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号