suozhang 发表于 2021-11-11 10:41:12

SFTM32F4 FATFS 写入速度测试

本帖最后由 suozhang 于 2021-11-11 12:29 编辑

file write speed 2532 KB/s. 每次写入4KB
file write speed 1079 KB/s. 每次写入1KB

问题: 此速度不知是否正常 ,大家 测试的速度都是咋样的?

测试代码,按照 一次4KB 的 方式写入的 :uint32_t f_mkfs_buff;    // 格式化缓冲区
FIL test_file;



static void fafts_file_test( void )
{
       
        uint32_t i = 0 ;
       
        uint32_t start_tick, end_tick;
       
        uint8_t result = FR_OK;
       
        UINT bw = 0;
       
        start_tick = xTaskGetTickCount();
        log("file write 4MB test start tick:%u.\r\n", start_tick );
       
        result = f_open(&test_file, "0:/armfly.txt", FA_OPEN_ALWAYS | FA_WRITE);
       
        for( i=0; i<1024; i++ )
        {
               
                result = f_write(&test_file, f_mkfs_buff, sizeof(f_mkfs_buff), &bw);
               
                if (result != FR_OK)
                {
                        log("armfly.txt write error %d.\r\n", result );
                        break;
                }
        }

        f_close(&test_file);
       
        end_tick = xTaskGetTickCount();
        log("file write 4MB test end tick:%u.\r\n", end_tick );

        log("file write speed %u KB/s.\r\n", 4096*1024/(end_tick-start_tick) );
       
        result = f_open(&test_file, "0:/armfly.txt", FA_OPEN_ALWAYS | FA_READ);
        memset( f_mkfs_buff, 0, sizeof(f_mkfs_buff) );
        result = f_read(&test_file, f_mkfs_buff, sizeof(f_mkfs_buff), &bw);
       
        if (result == FR_OK)
        {
                log( "armfly.txt read success.\r\n" );
        }
        else
        {
                log("armfly.txt read error %d.\r\n", result );
        }
       
        f_close(&test_file);
}



测试背景:

软件 : CUBEMX6.2.1 , STM32F407ZGTx ,SDIO-DMA, FATFS R0.12C








eric2013 发表于 2021-11-11 11:13:31


加大到每次32或者64KB试试
class10的话,F4系列能差不多整到8-10MB
H7差不多13MB

suozhang 发表于 2021-11-16 23:01:32

换个 SD 卡 ,居然 有 6MB/s , 新的 SD卡 也是 class 10, 可能第一个是假货! 害得我 查了半天代码。

eric2013 发表于 2021-11-17 07:34:53

suozhang 发表于 2021-11-16 23:01
换个 SD 卡 ,居然 有 6MB/s , 新的 SD卡 也是 class 10, 可能第一个是假货! 害得我 查了半天代码。

SD卡最好用JD的自营店买,靠谱很多。

shzdf123 发表于 2021-11-30 12:10:21

STM32H7   400MHz开ICACHE开DCACHE用的HAL_SD库,没有优化为寄存器方式
512字节:写入515KB/S,读出1.8MB/S
4K字节:   写入2.6MB/S,读出3.1MB/S
64K字节:写入9.3MB/S,读出10.9MB/S

suozhang 发表于 2021-12-1 10:53:23

shzdf123 发表于 2021-11-30 12:10
STM32H7   400MHz开ICACHE开DCACHE用的HAL_SD库,没有优化为寄存器方式
512字节:写入515KB/S,读 ...

:lolSTM32F4 内存 没有 STM32H7 阔绰

eric2013 发表于 2021-12-1 11:21:17

shzdf123 发表于 2021-11-30 12:10
STM32H7   400MHz开ICACHE开DCACHE用的HAL_SD库,没有优化为寄存器方式
512字节:写入515KB/S,读 ...

这个是开SDMMC的IDMA了,频繁操作的地方都是DMA在刷,所以初始化代码采用简配版的寄存器方式没有区别。

eric2013 发表于 2021-12-1 11:21:40

suozhang 发表于 2021-12-1 10:53
STM32F4 内存 没有 STM32H7 阔绰

64KB可以有。

shzdf123 发表于 2021-12-1 14:53:12

我用的是FileX文件系统
status =fx_media_open(&sdio_disk, "STM32_SDIO_DISK", fx_stm32_sd_driver, 0, media_memory, sizeof(media_memory));
media_memory这个缓存,是512字节,还是64K字节,测试后发现对速度没什么影响。
所以,我猜,512字节与64K字节的结果相差较大的主要原因是调用fx_file_write()产生的开销比较大。
页: [1]
查看完整版本: SFTM32F4 FATFS 写入速度测试