diff --git a/class/serial/usbh_serial.c b/class/serial/usbh_serial.c index 53824809..5319f1e1 100644 --- a/class/serial/usbh_serial.c +++ b/class/serial/usbh_serial.c @@ -21,7 +21,7 @@ static struct usbh_serial g_serial_class[CONFIG_USBHOST_MAX_SERIAL_CLASS]; static uint32_t g_devinuse = 0; static uint32_t g_cdcacm_devinuse = 0; -USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_serial_iobuffer[CONFIG_USBHOST_MAX_SERIAL_CLASS][USB_ALIGN_UP((USBH_SERIAL_INT_NOCACHE_OFFSET + USBH_SERIAL_INT_NOCACHE_SIZE), CONFIG_USB_ALIGN_SIZE)]; +USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_serial_iobuffer[CONFIG_USBHOST_MAX_SERIAL_CLASS][USB_ALIGN_UP((USBH_SERIAL_RX2_NOCACHE_OFFSET + USBH_SERIAL_RX2_NOCACHE_SIZE), CONFIG_USB_ALIGN_SIZE)]; /* refer to cherryrb */ static int usbh_serial_ringbuffer_init(usbh_serial_ringbuf_t *rb, void *pool, uint32_t size) @@ -540,7 +540,7 @@ int usbh_serial_write(struct usbh_serial *serial, const void *buffer, uint32_t b urb = &serial->bulkout_urb; - usbh_bulk_urb_fill(urb, serial->hport, serial->bulkout, (uint8_t *)buffer, serial->line_coding.dwDTERate ? MIN(buflen, serial->bulkout->wMaxPacketSize) : buflen, 0xffffffff, NULL, NULL); + usbh_bulk_urb_fill(urb, serial->hport, serial->bulkout, (uint8_t *)buffer, buflen, 0xffffffff, NULL, NULL); ret = usbh_submit_urb(urb); if (ret == 0) { ret = urb->actual_length; diff --git a/class/serial/usbh_serial.h b/class/serial/usbh_serial.h index 3b66a074..033ab705 100644 --- a/class/serial/usbh_serial.h +++ b/class/serial/usbh_serial.h @@ -9,10 +9,10 @@ #include "usb_cdc.h" -#define USBH_SERIAL_CTRL_NOCACHE_SIZE 32 #define USBH_SERIAL_CTRL_NOCACHE_OFFSET 0 -#define USBH_SERIAL_INT_NOCACHE_SIZE 32 +#define USBH_SERIAL_CTRL_NOCACHE_SIZE 32 #define USBH_SERIAL_INT_NOCACHE_OFFSET USB_ALIGN_UP(USBH_SERIAL_CTRL_NOCACHE_SIZE, CONFIG_USB_ALIGN_SIZE) +#define USBH_SERIAL_INT_NOCACHE_SIZE 32 #define USBH_SERIAL_RX_NOCACHE_OFFSET USB_ALIGN_UP((USBH_SERIAL_INT_NOCACHE_OFFSET + USBH_SERIAL_INT_NOCACHE_SIZE), CONFIG_USB_ALIGN_SIZE) #define USBH_SERIAL_RX_NOCACHE_SIZE 512 #define USBH_SERIAL_RX2_NOCACHE_OFFSET USB_ALIGN_UP((USBH_SERIAL_RX_NOCACHE_OFFSET + USBH_SERIAL_RX_NOCACHE_SIZE), CONFIG_USB_ALIGN_SIZE) diff --git a/demo/usb_host.c b/demo/usb_host.c index 8722b0e5..5f6e6e92 100644 --- a/demo/usb_host.c +++ b/demo/usb_host.c @@ -21,7 +21,7 @@ volatile uint32_t serial_tx_bytes = 0; volatile uint32_t serial_rx_bytes = 0; volatile bool serial_is_opened = false; -USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t serial_tx_buffer[64]; +USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t serial_tx_buffer[SERIAL_TEST_LEN]; uint8_t serial_rx_data[SERIAL_TEST_LEN]; #ifdef CONFIG_TEST_USBH_CDC_SPEED diff --git a/docs/source/api/api_host.rst b/docs/source/api/api_host.rst index 5faa9cde..46d1e428 100644 --- a/docs/source/api/api_host.rst +++ b/docs/source/api/api_host.rst @@ -206,10 +206,10 @@ usbh_serial_write - **serial** serial 结构体句柄 - **buffer** 数据缓冲区指针 -- **buflen** 要写入的数据长度,如果是 USB2TTL 设备,一次最高 wMaxPacketSize +- **buflen** 要写入的数据长度 - **return** 实际写入的数据长度或者错误码 -.. note:: 有无设置波特率都可以使用该 API,当未设置波特率时,长度无限制,如果设置了波特率则为 wMaxPacketSize。 +.. note:: 如果没有开启 CONFIG_USB_DCACHE_ENABLE,则 buffer 需要是 nocache区域,否则需要是对齐到 CONFIG_USB_ALIGN_SIZE 的区域。 usbh_serial_read """""""""""""""""""""""""""""""""""" @@ -225,6 +225,8 @@ usbh_serial_read - **buflen** 要读取的最大数据长度 - **return** 实际读取的数据长度或者错误码 +.. note:: 由于内部使用了 ringbuffer,对于用户的 buffer 属性没有限制。 + usbh_serial_cdc_write_async """""""""""""""""""""""""""""""""""" @@ -241,6 +243,8 @@ usbh_serial_cdc_write_async - **arg** 回调函数参数 - **return** 0 表示正常其他表示错误 +.. note:: 如果没有开启 CONFIG_USB_DCACHE_ENABLE,则 buffer 需要是 nocache区域,否则需要是对齐到 CONFIG_USB_ALIGN_SIZE 的区域。 + usbh_serial_cdc_read_async """""""""""""""""""""""""""""""""""" @@ -257,6 +261,7 @@ usbh_serial_cdc_read_async - **arg** 回调函数参数 - **return** 0 表示正常其他表示错误 +.. note:: 如果没有开启 CONFIG_USB_DCACHE_ENABLE,则 buffer 需要是 nocache区域,否则需要是对齐到 CONFIG_USB_ALIGN_SIZE 的区域。 HID -----------------