summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2025-04-30 21:38:09 +0800
committersakumisu <[email protected]>2025-04-30 21:38:09 +0800
commit5990e5c607bd98ae53ac6c5e5a2ff223a1b61cbf (patch)
tree2c81ffe303647a2d386844c9e2f139773bee0c3d
parent577ebd0999db91a28b4a0ebc1c5c013d5c77fa31 (diff)
update(demo/usb_host): add fatfs speed test
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--demo/usb_host.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/demo/usb_host.c b/demo/usb_host.c
index bef56e28..92537350 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: