|
|
@@ -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:
|