Browse Source

update(demo/usb_host): add fatfs speed test

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 8 months ago
parent
commit
5990e5c607
1 changed files with 68 additions and 0 deletions
  1. 68 0
      demo/usb_host.c

+ 68 - 0
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: