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
加大到每次32或者64KB试试
class10的话,F4系列能差不多整到8-10MB
H7差不多13MB
换个 SD 卡 ,居然 有 6MB/s , 新的 SD卡 也是 class 10, 可能第一个是假货! 害得我 查了半天代码。
suozhang 发表于 2021-11-16 23:01
换个 SD 卡 ,居然 有 6MB/s , 新的 SD卡 也是 class 10, 可能第一个是假货! 害得我 查了半天代码。
SD卡最好用JD的自营店买,靠谱很多。
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
shzdf123 发表于 2021-11-30 12:10
STM32H7 400MHz开ICACHE开DCACHE用的HAL_SD库,没有优化为寄存器方式
512字节:写入515KB/S,读 ...
:lolSTM32F4 内存 没有 STM32H7 阔绰 shzdf123 发表于 2021-11-30 12:10
STM32H7 400MHz开ICACHE开DCACHE用的HAL_SD库,没有优化为寄存器方式
512字节:写入515KB/S,读 ...
这个是开SDMMC的IDMA了,频繁操作的地方都是DMA在刷,所以初始化代码采用简配版的寄存器方式没有区别。 suozhang 发表于 2021-12-1 10:53
STM32F4 内存 没有 STM32H7 阔绰
64KB可以有。 我用的是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]