update(demo/usb_host): add fatfs speed test

Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
sakumisu 2025-04-30 21:38:09 +08:00
parent 577ebd0999
commit 5990e5c607

View File

@ -25,6 +25,9 @@
#ifndef TEST_USBH_MSC_FATFS
#define TEST_USBH_MSC_FATFS 0
#endif
#ifndef TEST_USBH_MSC_FATFS_SPEED
#define TEST_USBH_MSC_FATFS_SPEED 0
#endif
#ifndef TEST_USBH_AUDIO
#define TEST_USBH_AUDIO 0
#endif
@ -159,7 +162,14 @@ delete:
#if TEST_USBH_MSC_FATFS
#include "ff.h"
#if TEST_USBH_MSC_FATFS_SPEED
#define WRITE_SIZE_MB (128UL)
#define WRITE_SIZE (1024UL * 1024UL * WRITE_SIZE_MB)
#define BUF_SIZE (1024UL * 128UL)
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t read_write_buffer[BUF_SIZE];
#else
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t read_write_buffer[25 * 100];
#endif
USB_NOCACHE_RAM_SECTION FATFS fs;
USB_NOCACHE_RAM_SECTION FIL fnew;
@ -212,6 +222,64 @@ int usb_msc_fatfs_test()
USB_LOG_RAW("open fail\r\n");
goto unmount;
}
#if TEST_USBH_MSC_FATFS_SPEED
for (uint32_t i = 0; i < BUF_SIZE; i++) {
read_write_buffer[i] = i % 256;
}
USB_LOG_RAW("test fatfs write speed\r\n");
res_sd = f_open(&fnew, "2:cherryusb_msc_test.bin", FA_OPEN_ALWAYS | FA_WRITE);
if (res_sd == FR_OK) {
uint32_t write_size = WRITE_SIZE;
uint32_t start_time = (uint32_t)xTaskGetTickCount();
while (write_size > 0) {
res_sd = f_write(&fnew, read_write_buffer, BUF_SIZE, (UINT*)&fnum);
if (res_sd != FR_OK) {
printf("Write file failed, cause: %s\n", res_sd);
goto unmount;
}
write_size -= BUF_SIZE;
}
if (res_sd == FR_OK) {
uint32_t time_ms = xTaskGetTickCount() - start_time;
USB_LOG_RAW("Fatfs write speed:%f MB/S\r\n", (WRITE_SIZE_MB * 1000 / (float)time_ms));
} else {
USB_LOG_RAW("write fail\r\n");
goto unmount;
}
f_close(&fnew);
} else {
USB_LOG_RAW("open fail\r\n");
goto unmount;
}
USB_LOG_RAW("test fatfs read speed\r\n");
res_sd = f_open(&fnew, "2:cherryusb_msc_test.bin", FA_OPEN_EXISTING | FA_READ);
if (res_sd == FR_OK) {
uint32_t write_size = WRITE_SIZE;
uint32_t start_time = (uint32_t)xTaskGetTickCount();
while (write_size > 0) {
res_sd = f_read(&fnew, read_write_buffer, BUF_SIZE, (UINT*)&fnum);
if (res_sd != FR_OK) {
printf("Read file failed, cause: %s\n", res_sd);
goto unmount;
}
write_size -= BUF_SIZE;
}
if (res_sd == FR_OK) {
uint32_t time_ms = xTaskGetTickCount() - start_time;
USB_LOG_RAW("Fatfs read speed:%f MB/S\r\n", (WRITE_SIZE_MB * 1000 / (float)time_ms));
} else {
USB_LOG_RAW("read fail\r\n");
goto unmount;
}
f_close(&fnew);
} else {
USB_LOG_RAW("open fail\r\n");
goto unmount;
}
#endif
f_mount(NULL, "2:", 1);
return 0;
unmount: