From 5990e5c607bd98ae53ac6c5e5a2ff223a1b61cbf Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Wed, 30 Apr 2025 21:38:09 +0800 Subject: [PATCH] update(demo/usb_host): add fatfs speed test Signed-off-by: sakumisu <1203593632@qq.com> --- demo/usb_host.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/demo/usb_host.c b/demo/usb_host.c index bef56e2..9253735 100644 --- a/demo/usb_host.c +++ b/demo/usb_host.c @@ -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: