发 帖  
原厂入驻New
[问答] FATfs文件系统的多扇区如何读写
20 FatFs
分享
fatfs文件系统的资料中提到,FATfs支持多扇区读写,底层代码需要支持一次读写多个扇区和一次读一个扇区两种情况,但是即使底层支持多扇区读写,在实际操作的时候还是一个扇区一个扇区的写。本来以为这个源代码只需要改diskio.c里的disk_read几个函数即可。现在看来,查找所有引用发现引用disk_read和disk_write的全是指定扇区个数为 1,所以想要支持多扇区读写是不是得把 ff.c 里面引用 disk_read 和 disk_write的扇区个数改成多个扇区数 即可??
0
2020-5-22 13:50:21   评论 分享淘帖 邀请回答
8个回答
哪里要改ff.c??
只需要修改diskio.c即可!!!
2020-5-22 15:12:00 评论

举报

谢谢发烧友。
你的意思是说 ff.c 中已经支持了多扇区读写吗?
拿diskio.c 中的disk_read来说,
DRESULT disk_read (   BYTE drv, BYTE *buff,  DWORD sector,   BYTE count ),在ff.c里调用disk_read的时候count =1,那下面读多扇区也没用啊?
在f_read中唯一调用disk_read count值不为1的地方是:
cc = btr / SS(fp->fs);/* When remaining bytes >= sector size, */
if (cc) {/* Read maximum contiguous sectors directly */
if (fp->csect + cc > fp->fs->csize)/* Clip at cluster boundary */ 
cc = fp->fs->csize - fp->csect;
if (disk_read(fp->fs->drive, rbuff, sect, (BYTE)cc) != RES_OK)
ABORT(fp->fs, FR_DISK_ERR);
可是我单步进去发现 (BYTE)cc) 还是1,虽然if (cc)处cc不为1,但是每次还是只读1个。
什么情况呢?
2020-5-22 15:20:57 评论

举报

不要以偏概全.
你设置个printf,每次读写的时候输出count的值,再看看吧.
2020-5-22 15:29:04 评论

举报

好,谢谢.
我打印了,真的全是1,。。。
2020-5-22 15:34:40 评论

举报

回复【4楼】发烧友:
--------------------------------
好吧,是这样的。
如果 ffconf.h中
#define_MAX_SS512
那么在实现读写的时候,我打印了,是8个扇区。
我之前的设置是#define_MAX_SS4096
打印的时候是1个扇区。
2020-5-22 15:50:10 评论

举报

2020-5-22 16:02:19 评论

举报

原来是因为FAT32的分区大小和簇大小有对应关系,小于8GB的分区,每个簇的空间大小为4K,所以如果单个扇区大小设置为512的话,单个簇的扇区个数为8,可以读写8个扇区;如果单个扇区大小设置为4096的话,单个簇的扇区个数为1,就是读写1个扇区了。
那 你说,如果在这种情况下我希望提高读写速度,是不是只能手动将 ff.c 里读写的count 做更改了呢? 你可以给点意见吗?
2020-5-22 16:09:18 评论

举报

建议换sdio,会比较靠谱.
2020-5-22 16:21:07 评论

举报

只有小组成员才能发言,加入小组>>

62个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表