diff --git a/cherryusb_config_template.h b/cherryusb_config_template.h index 327bebe1..95c199dc 100644 --- a/cherryusb_config_template.h +++ b/cherryusb_config_template.h @@ -45,8 +45,8 @@ /* Enable test mode */ // #define CONFIG_USBDEV_TEST_MODE -#ifndef CONFIG_USBDEV_MSC_BLOCK_SIZE -#define CONFIG_USBDEV_MSC_BLOCK_SIZE 512 +#ifndef CONFIG_USBDEV_MSC_MAX_BUFSIZE +#define CONFIG_USBDEV_MSC_MAX_BUFSIZE 512 #endif #ifndef CONFIG_USBDEV_MSC_MANUFACTURER_STRING diff --git a/class/msc/usbd_msc.c b/class/msc/usbd_msc.c index f30c6fba..26ca70bf 100644 --- a/class/msc/usbd_msc.c +++ b/class/msc/usbd_msc.c @@ -43,7 +43,7 @@ USB_NOCACHE_RAM_SECTION struct usbd_msc_priv { uint16_t scsi_blk_size; uint32_t scsi_blk_nbr; - USB_MEM_ALIGNX uint8_t block_buffer[CONFIG_USBDEV_MSC_BLOCK_SIZE]; + USB_MEM_ALIGNX uint8_t block_buffer[CONFIG_USBDEV_MSC_MAX_BUFSIZE]; #if defined(CONFIG_USBDEV_MSC_THREAD) usb_osal_mq_t usbd_msc_mq; @@ -554,7 +554,7 @@ static bool SCSI_write10(uint8_t **data, uint32_t *len) return false; } g_usbd_msc.stage = MSC_DATA_OUT; - data_len = MIN(data_len, CONFIG_USBDEV_MSC_BLOCK_SIZE); + data_len = MIN(data_len, CONFIG_USBDEV_MSC_MAX_BUFSIZE); usbd_ep_start_read(mass_ep_data[MSD_OUT_EP_IDX].ep_addr, g_usbd_msc.block_buffer, data_len); return true; } @@ -583,7 +583,7 @@ static bool SCSI_write12(uint8_t **data, uint32_t *len) return false; } g_usbd_msc.stage = MSC_DATA_OUT; - data_len = MIN(data_len, CONFIG_USBDEV_MSC_BLOCK_SIZE); + data_len = MIN(data_len, CONFIG_USBDEV_MSC_MAX_BUFSIZE); usbd_ep_start_read(mass_ep_data[MSD_OUT_EP_IDX].ep_addr, g_usbd_msc.block_buffer, data_len); return true; } @@ -640,7 +640,7 @@ static bool SCSI_processRead(void) USB_LOG_DBG("read lba:%d\r\n", g_usbd_msc.start_sector); - transfer_len = MIN(g_usbd_msc.nsectors * g_usbd_msc.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); + transfer_len = MIN(g_usbd_msc.nsectors * g_usbd_msc.scsi_blk_size, CONFIG_USBDEV_MSC_MAX_BUFSIZE); if (usbd_msc_sector_read(g_usbd_msc.start_sector, g_usbd_msc.block_buffer, transfer_len) != 0) { SCSI_SetSenseData(SCSI_KCQHE_UREINRESERVEDAREA); @@ -677,7 +677,7 @@ static bool SCSI_processWrite(uint32_t nbytes) if (g_usbd_msc.nsectors == 0) { usbd_msc_send_csw(CSW_STATUS_CMD_PASSED); } else { - data_len = MIN(g_usbd_msc.nsectors * g_usbd_msc.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); + data_len = MIN(g_usbd_msc.nsectors * g_usbd_msc.scsi_blk_size, CONFIG_USBDEV_MSC_MAX_BUFSIZE); usbd_ep_start_read(mass_ep_data[MSD_OUT_EP_IDX].ep_addr, g_usbd_msc.block_buffer, data_len); } @@ -883,7 +883,7 @@ struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uin usbd_msc_get_cap(0, &g_usbd_msc.scsi_blk_nbr, &g_usbd_msc.scsi_blk_size); - if (g_usbd_msc.scsi_blk_size > CONFIG_USBDEV_MSC_BLOCK_SIZE) { + if (g_usbd_msc.scsi_blk_size > CONFIG_USBDEV_MSC_MAX_BUFSIZE) { USB_LOG_ERR("msc block buffer overflow\r\n"); return NULL; } diff --git a/docs/source/api/api_config.rst b/docs/source/api/api_config.rst index a167acaa..7a9cb35d 100644 --- a/docs/source/api/api_config.rst +++ b/docs/source/api/api_config.rst @@ -51,12 +51,11 @@ CONFIG_USBDEV_TEST_MODE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 使能或者关闭 usb test mode -CONFIG_USBDEV_MSC_BLOCK_SIZE +CONFIG_USBDEV_MSC_MAX_BUFSIZE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -msc 临时缓存的大小,缓存越大,msc 的速度越高,默认等于 1个内存介质的扇区大小(例如 sd卡 512,flash 4K),更改时需要是内存介质扇区的倍数。 - -虽然名字叫 block size,但是跟内存介质的 block size不是一个意思。 +msc 缓存的最大长度,缓存越大,USB 的速度越高,因为介质一般多个 block 读写速度比单个 block 高很多,比如 sd 卡。 +默认 512 ,如果是 flash 需要改成 4K, 缓存的大小需要是 介质的一个 block size 的整数倍。 CONFIG_USBDEV_MSC_MANUFACTURER_STRING ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/source/demo/msc_ram.rst b/docs/source/demo/msc_ram.rst index 3a97238d..7e67e19e 100644 --- a/docs/source/demo/msc_ram.rst +++ b/docs/source/demo/msc_ram.rst @@ -35,7 +35,7 @@ USB 模拟 U 盘 } - 实现三个接口即可使用 msc,读写操作如果没有 os 则是在中断中 -- `CONFIG_USBDEV_MSC_BLOCK_SIZE` 可以为 512 的整数倍,更改此项,可以增加 msc 的读写速度,当然,也会消耗更多的 ram +- `CONFIG_USBDEV_MSC_MAX_BUFSIZE` 可以为 512 的整数倍,更改此项,可以增加 msc 的读写速度,当然,也会消耗更多的 ram .. note:: MSC 一般配合 rtos 使用,因为读写操作是阻塞的,放中断是不合适的, `CONFIG_USBDEV_MSC_THREAD` 则是使能 os 管理