完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
看FATfs文件系统的资料中提到,FATfs支持多扇区读写,底层代码需要支持一次读写多个扇区和一次读一个扇区两种情况,但是即使底层支持多扇区读写,在实际操作的时候还是一个扇区一个扇区的写。本来以为这个源代码只需要改diskio.c里的disk_read几个函数即可。现在看来,查找所有引用发现引用disk_read和disk_write的全是指定扇区个数为 1,所以想要支持多扇区读写是不是得把 ff.c 里面引用 disk_read 和 disk_write的扇区个数改成多个扇区数 即可??
|
|
相关推荐
8个回答
|
|
|
|
|
|
谢谢发烧友。
你的意思是说 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个。 什么情况呢? |
|
|
|
|
|
|
|
|
|
|
|
回复【4楼】发烧友:
-------------------------------- 好吧,是这样的。 如果 ffconf.h中 #define_MAX_SS512 那么在实现读写的时候,我打印了,是8个扇区。 我之前的设置是#define_MAX_SS4096 打印的时候是1个扇区。 |
|
|
|
哦哦...
|
|
|
|
原来是因为FAT32的分区大小和簇大小有对应关系,小于8GB的分区,每个簇的空间大小为4K,所以如果单个扇区大小设置为512的话,单个簇的扇区个数为8,可以读写8个扇区;如果单个扇区大小设置为4096的话,单个簇的扇区个数为1,就是读写1个扇区了。
那 你说,如果在这种情况下我希望提高读写速度,是不是只能手动将 ff.c 里读写的count 做更改了呢? 你可以给点意见吗? |
|
|
|
建议换sdio,会比较靠谱.
|
|
|
|
只有小组成员才能发言,加入小组>>
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
525 浏览 2 评论
549 浏览 2 评论
信号发生器产生的正弦频率信号,用定时器进行捕获,当幅值低于3V后为什么MCU就无法捕获到了?
209 浏览 2 评论
874 浏览 2 评论
编码器模式下,中断内访问其他定时器cnt值,会导致进入中断次数丢失的原因?
859 浏览 2 评论
1331浏览 9评论
STM32出现error downloading following files怎么解决?
28浏览 3评论
stm32f103的RST复位后PWM就停止输出了,为什么?
35浏览 3评论
STM32G0空闲中断异常,且DMA接收不到数据是怎么回事?
24浏览 3评论
STM32F103用Timer3TRGO通道触发ADC,ADC在三路输出PWM高电平中间点采样,如何配置?
15浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-28 17:24 , Processed in 0.571854 second(s), Total 50, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号