diff options
| author | MDLZCOOL <[email protected]> | 2025-12-13 23:01:09 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2025-12-14 08:51:51 +0800 |
| commit | 799ae48f7c39dcd1e64a80e01ee982aa268a81dc (patch) | |
| tree | ed52f6fd727c5170795090c36312d82b1e4220ad /docs | |
| parent | da2263728aba07a28d9b6946b7acb6b0a0a97bb1 (diff) | |
feat(usbh_serial): Use Ping-Pong Buffer to Decrease Packet Loss
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/source/api/api_host.rst | 6 | ||||
| -rw-r--r-- | docs/source/demo/usbh_serial.rst | 10 |
2 files changed, 8 insertions, 8 deletions
diff --git a/docs/source/api/api_host.rst b/docs/source/api/api_host.rst index 51b1c502..e369aa3a 100644 --- a/docs/source/api/api_host.rst +++ b/docs/source/api/api_host.rst @@ -198,7 +198,7 @@ usbh_serial_control usbh_serial_write """""""""""""""""""""""""""""""""""" -``usbh_serial_write`` 向串口写数据。 **串口设备如果是 USB2TTL 类型,必须按照波特率发送,否则会丢包** +``usbh_serial_write`` 向串口写数据。 .. code-block:: C @@ -214,7 +214,7 @@ usbh_serial_write usbh_serial_read """""""""""""""""""""""""""""""""""" -``usbh_serial_read`` 从串口读数据。 **如果没有设置波特率,不允许使用该 API**。 +``usbh_serial_read`` 从串口读数据。 **如果没有设置波特率,不允许使用该 API,设置波特率后,内部会开启 rx 接收并将数据写入 ringbuf **。 .. code-block:: C @@ -244,7 +244,7 @@ usbh_serial_cdc_write_async usbh_serial_cdc_read_async """""""""""""""""""""""""""""""""""" -``usbh_serial_cdc_read_async`` 异步从串口读数据。 **如果设置了波特率,不允许使用该 API**。 +``usbh_serial_cdc_read_async`` 异步从串口读数据。 **如果设置了波特率,不允许使用该 API,设置波特率后,内部会开启 rx 接收并将数据写入 ringbuf **。 .. code-block:: C diff --git a/docs/source/demo/usbh_serial.rst b/docs/source/demo/usbh_serial.rst index c3c99255..a32241f3 100644 --- a/docs/source/demo/usbh_serial.rst +++ b/docs/source/demo/usbh_serial.rst @@ -43,7 +43,6 @@ Serial 框架当前支持 cdc acm, ftdi, cp210x, ch34x, pl2303,gsm 驱动。� goto delete_with_close; } else { serial_tx_bytes += ret; - usb_osal_msleep(10); // 11.52 Byte/ms at 115200bps --> 64Byte/5.5ms if (serial_tx_bytes == SERIAL_TEST_LEN) { USB_LOG_RAW("send over\r\n"); @@ -55,7 +54,7 @@ Serial 框架当前支持 cdc acm, ftdi, cp210x, ch34x, pl2303,gsm 驱动。� volatile uint32_t wait_timeout = 0; serial_rx_bytes = 0; while (1) { - ret = usbh_serial_read(serial, &serial_rx_data[serial_rx_bytes], SERIAL_TEST_LEN); + ret = usbh_serial_read(serial, &serial_rx_data[serial_rx_bytes], SERIAL_TEST_LEN - serial_rx_bytes); if (ret < 0) { USB_LOG_RAW("serial read error, ret:%d\r\n", ret); goto delete_with_close; @@ -86,11 +85,12 @@ Serial 框架当前支持 cdc acm, ftdi, cp210x, ch34x, pl2303,gsm 驱动。� usbh_serial_close(serial); +.. note:: 需要注意,例程中使用的是比较简单的先发送后读取的方式,因此发送的总长度不可以超过 CONFIG_USBHOST_SERIAL_RX_SIZE,正常使用 TX/RX 请分开进行。 用户需要考虑以下三种场景: -- USB2TTL 设备 + 启用了波特率,这种情况下需要使用 `usbh_serial_write` 和 `usbh_serial_read` 进行收发数据, **并且需要根据波特率控制发送频率,防止对端丢包**; +- USB2TTL 设备 + 启用了波特率,这种情况下需要使用 `usbh_serial_write` 和 `usbh_serial_read` 进行收发数据, **并且 read 操作需要及时,防止 ringbuf 数据溢出而丢包**; -- 纯 USB 设备 + 未启动波特率,这种情况下可以使用 `usbh_serial_cdc_write_async` 和 `usbh_serial_cdc_read_async` 进行异步收发数据,阻塞则用 `usbh_serial_write` 并且不需要控制发送频率。不可以使用 `usbh_serial_read`。 +- 纯 USB 设备 + 未启动波特率,这种情况下可以使用 `usbh_serial_cdc_write_async` 和 `usbh_serial_cdc_read_async` 进行异步收发数据。阻塞则可以用 `usbh_serial_write` ,不可以使用 `usbh_serial_read`。 -- 纯 USB 设备 + 启动波特率,同 1,但是速率打折扣。不可以使用 `usbh_serial_cdc_write_async` 和 `usbh_serial_cdc_read_async`。如果是 GSM 设备需要使用第一种。
\ No newline at end of file +- 纯 USB 设备 + 启动波特率,同 1,但是速率打折扣(因为多了一层 ringbuf)。此时也不可以使用 `usbh_serial_cdc_write_async` 和 `usbh_serial_cdc_read_async`。 **如果是 GSM 设备请使用第一种场景**。
\ No newline at end of file |
