sakumisu 3 лет назад
Родитель
Сommit
1df32997ed

+ 62 - 40
demo/usb_host.c

@@ -74,6 +74,66 @@ int cdc_acm_test(void)
 }
 #if 0
 #include "ff.h"
+
+USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t read_write_buffer[25 * 100];
+
+FATFS fs;
+FIL fnew;
+UINT fnum;
+FRESULT res_sd = 0;
+
+int usb_msc_fatfs_test()
+{
+    const char *tmp_data = "cherryusb fatfs demo...\r\n";
+
+    USB_LOG_RAW("data len:%d\r\n", strlen(tmp_data));
+    for (uint32_t i = 0; i < 100; i++) {
+        memcpy(&read_write_buffer[i * 25], tmp_data, strlen(tmp_data));
+    }
+
+    res_sd = f_mount(&fs, "2:", 1);
+    if (res_sd != FR_OK) {
+        USB_LOG_RAW("mount fail,res:%d\r\n", res_sd);
+        return -1;
+    }
+
+    USB_LOG_RAW("test fatfs write\r\n");
+    res_sd = f_open(&fnew, "2:test.txt", FA_CREATE_ALWAYS | FA_WRITE);
+    if (res_sd == FR_OK) {
+        res_sd = f_write(&fnew, read_write_buffer, sizeof(read_write_buffer), &fnum);
+        if (res_sd == FR_OK) {
+            USB_LOG_RAW("write success, write len:%d\n", fnum);
+        } 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\r\n");
+
+    res_sd = f_open(&fnew, "2:test.txt", FA_OPEN_EXISTING | FA_READ);
+    if (res_sd == FR_OK) {
+        res_sd = f_read(&fnew, read_write_buffer, sizeof(read_write_buffer), &fnum);
+        if (res_sd == FR_OK) {
+            USB_LOG_RAW("read success, read len:%d\n", fnum);
+        } else {
+            USB_LOG_RAW("read fail\r\n");
+            goto unmount;
+        }
+        f_close(&fnew);
+    } else {
+        USB_LOG_RAW("open fail\r\n");
+        goto unmount;
+    }
+    f_mount(NULL, "2:", 1);
+    return 0;
+unmount:
+    f_mount(NULL, "2:", 1);
+    return -1;
+}
 #endif
 
 USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t partition_table[512];
@@ -86,7 +146,7 @@ int msc_test(void)
         USB_LOG_RAW("do not find /dev/sda\r\n");
         return -1;
     }
-#if 1
+#if 0
     /* get the partition table */
     ret = usbh_msc_scsi_read10(msc_class, 0, partition_table, 1);
     if (ret < 0) {
@@ -103,45 +163,7 @@ int msc_test(void)
 #endif
 
 #if 0
-    uint8_t *msc_buffer = usb_iomalloc(8192);
-    ret = usbh_msc_scsi_read10(msc_class, 0, msc_buffer, 16);
-    usb_iofree(msc_buffer);
-    // for (uint32_t i = 0; i < 1024; i++) {
-    //     if (i % 16 == 0) {
-    //         USB_LOG_RAW("\r\n");
-    //     }
-    //     USB_LOG_RAW("%02x ", msc_buffer[i]);
-    // }
-    // USB_LOG_RAW("\r\n");
-#endif
-
-#if 0
-
-    FATFS fs;
-    FIL fnew;
-    UINT fnum;
-    FRESULT res_sd = 0;
-    uint8_t *ReadBuffer;
-
-    ReadBuffer = usb_iomalloc(512);
-    f_mount(&fs, "2:", 1);
-    res_sd = f_open(&fnew, "2:test.c", FA_OPEN_EXISTING | FA_READ);
-    if (res_sd == FR_OK) {
-        res_sd = f_read(&fnew, ReadBuffer, 512, &fnum);
-        for (uint32_t i = 0; i < fnum; i++) {
-            if (i % 16 == 0) {
-                USB_LOG_RAW("\r\n");
-            }
-            USB_LOG_RAW("%02x ", ReadBuffer[i]);
-        }
-        USB_LOG_RAW("\r\n");
-        f_close(&fnew);
-        /*unmount*/
-        f_mount(NULL, "2:", 1);
-    } else {
-        USB_LOG_RAW("open error:%d\r\n", res_sd);
-    }
-    usb_iofree(ReadBuffer);
+    usb_msc_fatfs_test();
 #endif
     return ret;
 }

+ 13 - 17
third_party/fatfs-0.14/source/diskio.c

@@ -29,25 +29,24 @@ DSTATUS disk_status (
 )
 {
 	DSTATUS stat;
-	int result;
 
 	switch (pdrv) {
 	case DEV_RAM :
-		//result = RAM_disk_status();
+		//stat = RAM_disk_status();
 
 		// translate the reslut code here
 
 		return stat;
 
 	case DEV_MMC :
-		//result = MMC_disk_status();
+		//stat = MMC_disk_status();
 
 		// translate the reslut code here
 
 		return stat;
 
 	case DEV_USB :
-		result = USB_disk_status();
+		stat = USB_disk_status();
 
 		// translate the reslut code here
 
@@ -67,25 +66,24 @@ DSTATUS disk_initialize (
 )
 {
 	DSTATUS stat;
-	int result;
 
 	switch (pdrv) {
 	case DEV_RAM :
-		//result = RAM_disk_initialize();
+		//stat = RAM_disk_initialize();
 
 		// translate the reslut code here
 
 		return stat;
 
 	case DEV_MMC :
-		//result = MMC_disk_initialize();
+		//stat = MMC_disk_initialize();
 
 		// translate the reslut code here
 
 		return stat;
 
 	case DEV_USB :
-		result = USB_disk_initialize();
+		stat = USB_disk_initialize();
 
 		// translate the reslut code here
 
@@ -108,13 +106,12 @@ DRESULT disk_read (
 )
 {
 	DRESULT res;
-	int result;
 
 	switch (pdrv) {
 	case DEV_RAM :
 		// translate the arguments here
 
-		//result = RAM_disk_read(buff, sector, count);
+		//res = RAM_disk_read(buff, sector, count);
 
 		// translate the reslut code here
 
@@ -123,7 +120,7 @@ DRESULT disk_read (
 	case DEV_MMC :
 		// translate the arguments here
 
-		//result = MMC_disk_read(buff, sector, count);
+		//res = MMC_disk_read(buff, sector, count);
 
 		// translate the reslut code here
 
@@ -132,7 +129,7 @@ DRESULT disk_read (
 	case DEV_USB :
 		// translate the arguments here
 
-		result = USB_disk_read(buff, sector, count);
+		res = USB_disk_read(buff, sector, count);
 
 		// translate the reslut code here
 
@@ -158,13 +155,12 @@ DRESULT disk_write (
 )
 {
 	DRESULT res;
-	int result;
 
 	switch (pdrv) {
 	case DEV_RAM :
 		// translate the arguments here
 
-		//result = RAM_disk_write(buff, sector, count);
+		//res = RAM_disk_write(buff, sector, count);
 
 		// translate the reslut code here
 
@@ -173,7 +169,7 @@ DRESULT disk_write (
 	case DEV_MMC :
 		// translate the arguments here
 
-		//result = MMC_disk_write(buff, sector, count);
+		//res = MMC_disk_write(buff, sector, count);
 
 		// translate the reslut code here
 
@@ -182,7 +178,7 @@ DRESULT disk_write (
 	case DEV_USB :
 		// translate the arguments here
 
-		result = USB_disk_write(buff, sector, count);
+		res = USB_disk_write(buff, sector, count);
 
 		// translate the reslut code here
 
@@ -224,7 +220,7 @@ DRESULT disk_ioctl (
 	case DEV_USB :
 
 		// Process of the command the USB drive
-        USB_disk_ioctl(cmd,buff);
+        res = USB_disk_ioctl(cmd,buff);
 		return res;
 	}
 

+ 2 - 2
third_party/fatfs-0.14/source/ffconf.h

@@ -166,12 +166,12 @@
 / Drive/Volume Configurations
 /---------------------------------------------------------------------------*/
 
-#define FF_VOLUMES		1
+#define FF_VOLUMES		3
 /* Number of volumes (logical drives) to be used. (1-10) */
 
 
 #define FF_STR_VOLUME_ID	0
-#define FF_VOLUME_STRS		"RAM","NAND","CF","SD","SD2","USB","USB2","USB3"
+#define FF_VOLUME_STRS		"RAM","SD","USB"
 /* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings.
 /  When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive
 /  number in the path name. FF_VOLUME_STRS defines the volume ID strings for each

+ 4 - 1
third_party/fatfs-0.14/source/port/fatfs_usbh.c

@@ -14,18 +14,21 @@ int USB_disk_initialize(void)
     active_msc_class = (struct usbh_msc *)usbh_find_class_instance("/dev/sda");
     if (active_msc_class == NULL) {
         printf("do not find /dev/sda\r\n");
-        return -1;
+        return RES_NOTRDY;
     }
     return RES_OK;
 }
+
 int USB_disk_read(BYTE *buff, LBA_t sector, UINT count)
 {
     return usbh_msc_scsi_read10(active_msc_class, sector, buff, count);
 }
+
 int USB_disk_write(const BYTE *buff, LBA_t sector, UINT count)
 {
     return usbh_msc_scsi_write10(active_msc_class, sector, buff, count);
 }
+
 int USB_disk_ioctl(BYTE cmd, void *buff)
 {
     int result = 0;