野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9595|回复: 3

F103RET6 sdio+FATFS 读取速率问题

[复制链接]
发表于 2019-3-15 11:30:47 | 显示全部楼层 |阅读模式
野火大大好,小弟最近用 F103RET6 设计了一个板子,用您提供的 SDIO+FATFS 历程进行修改,对一个 二进制文件进行读取测试。

首先,我先不用FATFS, 直接对扇区进行读取:
      while(1)
        {
                STM32_DEBUG0_L;
    Status = SD_ReadMultiBlocks(SD_TEST_ARRAY,0,512,16);
    Status = SD_WaitReadOperation();
    while(SD_GetStatus() != SD_TRANSFER_OK);
                STM32_DEBUG0_H;               
        }        


读取的长度是 512x16个 字节,通过一个IO 翻转,用逻辑分析仪测量其读取周期,目前测试到 周期是1.1ms, 也就是 1000/1.1 * 8192 = 7.4M字节/秒。

但是,实际项目使用,还是希望用FATFS,因为这样对文件管理比较方便,然后我修改如下:
      while(1)
        {

                 SD_FILE_READ(STM32_DEBUG1_PORT,STM32_DEBUG1,"0:BACK",0,8192,SD_TEST_ARRAY);           
        }        


其中,SD_FILE_READ是我自己做的一个子程序,内容如下:
void SD_FILE_READ(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,u8 *filename, u32 offset_byte, u32 read_num,u8* buffer)
{
                        GPIO_ResetBits(GPIOx, GPIO_Pin);
                        f_open(&fnew, filename, FA_OPEN_EXISTING | FA_READ);                                                         
                        f_lseek(&fnew,offset_byte);
                        f_read(&fnew, buffer, read_num, &fnum);
                        f_close(&fnew);
                        GPIO_SetBits(GPIOx, GPIO_Pin);
}


功能就是,调用OPEN打开文件,调用LSEEK 设定偏移地址,用F_READ读取。

如果按以上方法进行测试,发现 读取512x16字节 的周期是 33ms,远远高于第一个测试(直接读扇区)


然后,我追踪F_READ,发现,F_READ内部会调用DISK_READ,然后看到DISK_READ的内容,虽然内部有 SD_ReadMultiBlocks,但是好像实际并没有使用它。


TIM截图20190314195724.jpg

好像第一个条件 if((DWORD)buff&3) 就成立,直接进入内部执行完,就返回了,因此才会特别慢。

所以想请教一下,如何在FATFS下 使用SD_ReadMultiBlocks 对二进制文件高速读取呢?

回复

使用道具 举报

发表于 2019-3-15 17:45:26 | 显示全部楼层
fatfs不会用multiblock的,每次都是只读一个block,估计它是上层为节约资源直接就这样写了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-15 19:05:44 | 显示全部楼层
flyleaf 发表于 2019-3-15 17:45
fatfs不会用multiblock的,每次都是只读一个block,估计它是上层为节约资源直接就这样写了

那请问可否强制使用MULTIBLOCK呢? 因为文件是我自己做的,都是按照512字节的整数倍存储的,打开文件后也按512倍数走,所以不会有对不齐的问题。但是不知怎么改呢。。
回复 支持 反对

使用道具 举报

发表于 2019-3-16 08:35:19 | 显示全部楼层
orta 发表于 2019-3-15 19:05
那请问可否强制使用MULTIBLOCK呢? 因为文件是我自己做的,都是按照512字节的整数倍存储的,打开文件后也 ...

那要研究下fatfs的源码,进行修改
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-17 10:55 , Processed in 0.029047 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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