fix(usbh_serial): fix serial iobuffer size, remove length limit of write

Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
sakumisu
2025-12-17 20:42:40 +08:00
parent baf2a56c93
commit a6ffbd3600
4 changed files with 12 additions and 7 deletions

View File

@@ -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_devinuse = 0;
static uint32_t g_cdcacm_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 */ /* refer to cherryrb */
static int usbh_serial_ringbuffer_init(usbh_serial_ringbuf_t *rb, void *pool, uint32_t size) 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; 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); ret = usbh_submit_urb(urb);
if (ret == 0) { if (ret == 0) {
ret = urb->actual_length; ret = urb->actual_length;

View File

@@ -9,10 +9,10 @@
#include "usb_cdc.h" #include "usb_cdc.h"
#define USBH_SERIAL_CTRL_NOCACHE_SIZE 32
#define USBH_SERIAL_CTRL_NOCACHE_OFFSET 0 #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_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_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_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) #define USBH_SERIAL_RX2_NOCACHE_OFFSET USB_ALIGN_UP((USBH_SERIAL_RX_NOCACHE_OFFSET + USBH_SERIAL_RX_NOCACHE_SIZE), CONFIG_USB_ALIGN_SIZE)

View File

@@ -21,7 +21,7 @@ volatile uint32_t serial_tx_bytes = 0;
volatile uint32_t serial_rx_bytes = 0; volatile uint32_t serial_rx_bytes = 0;
volatile bool serial_is_opened = false; 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]; uint8_t serial_rx_data[SERIAL_TEST_LEN];
#ifdef CONFIG_TEST_USBH_CDC_SPEED #ifdef CONFIG_TEST_USBH_CDC_SPEED

View File

@@ -206,10 +206,10 @@ usbh_serial_write
- **serial** serial 结构体句柄 - **serial** serial 结构体句柄
- **buffer** 数据缓冲区指针 - **buffer** 数据缓冲区指针
- **buflen** 要写入的数据长度,如果是 USB2TTL 设备,一次最高 wMaxPacketSize - **buflen** 要写入的数据长度
- **return** 实际写入的数据长度或者错误码 - **return** 实际写入的数据长度或者错误码
.. note:: 有无设置波特率都可以使用该 API当未设置波特率时长度无限制如果设置了波特率则为 wMaxPacketSize .. note:: 如果没有开启 CONFIG_USB_DCACHE_ENABLE则 buffer 需要是 nocache区域否则需要是对齐到 CONFIG_USB_ALIGN_SIZE 的区域
usbh_serial_read usbh_serial_read
"""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""
@@ -225,6 +225,8 @@ usbh_serial_read
- **buflen** 要读取的最大数据长度 - **buflen** 要读取的最大数据长度
- **return** 实际读取的数据长度或者错误码 - **return** 实际读取的数据长度或者错误码
.. note:: 由于内部使用了 ringbuffer对于用户的 buffer 属性没有限制。
usbh_serial_cdc_write_async usbh_serial_cdc_write_async
"""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""
@@ -241,6 +243,8 @@ usbh_serial_cdc_write_async
- **arg** 回调函数参数 - **arg** 回调函数参数
- **return** 0 表示正常其他表示错误 - **return** 0 表示正常其他表示错误
.. note:: 如果没有开启 CONFIG_USB_DCACHE_ENABLE则 buffer 需要是 nocache区域否则需要是对齐到 CONFIG_USB_ALIGN_SIZE 的区域。
usbh_serial_cdc_read_async usbh_serial_cdc_read_async
"""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""
@@ -257,6 +261,7 @@ usbh_serial_cdc_read_async
- **arg** 回调函数参数 - **arg** 回调函数参数
- **return** 0 表示正常其他表示错误 - **return** 0 表示正常其他表示错误
.. note:: 如果没有开启 CONFIG_USB_DCACHE_ENABLE则 buffer 需要是 nocache区域否则需要是对齐到 CONFIG_USB_ALIGN_SIZE 的区域。
HID HID
----------------- -----------------