Skip to content

Commit

Permalink
docs: update rst
Browse files Browse the repository at this point in the history
  • Loading branch information
sakumisu committed Nov 27, 2024
1 parent d874bed commit 6e95f9e
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 1 deletion.
99 changes: 99 additions & 0 deletions docs/source/demo/usbd_cdc_acm.rst
Original file line number Diff line number Diff line change
@@ -1,2 +1,101 @@
usbd_cdc_acm
===============

本 demo 主要用于演示 cdc acm 功能,包含收发测试,DTR 控制,ZLP 测试,性能测试。

- 开辟读写 buffer,用于收发数据,并且buffer需要用 nocache 修饰,这里我们读写都是用 2048字节,是为了后面的 ZLP 测试和性能测试使用。

.. code-block:: C
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t read_buffer[2048]; /* 2048 is only for test speed , please use CDC_MAX_MPS for common*/
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t write_buffer[2048];
- 协议栈回调中,我们需要在枚举完成后启动第一次传输,并清除相关 flag,可以在 reset 事件中清除,也可以在 configured 事件中清除。

.. code-block:: C
static void usbd_event_handler(uint8_t busid, uint8_t event)
{
switch (event) {
case USBD_EVENT_RESET:
break;
case USBD_EVENT_CONNECTED:
break;
case USBD_EVENT_DISCONNECTED:
break;
case USBD_EVENT_RESUME:
break;
case USBD_EVENT_SUSPEND:
break;
case USBD_EVENT_CONFIGURED:
ep_tx_busy_flag = false;
/* setup first out ep read transfer */
usbd_ep_start_read(busid, CDC_OUT_EP, read_buffer, 2048);
break;
case USBD_EVENT_SET_REMOTE_WAKEUP:
break;
case USBD_EVENT_CLR_REMOTE_WAKEUP:
break;
default:
break;
}
}
- 在接收完成中断中继续发起接收;在发送完成中断中判断是否需要发送 ZLP。

.. code-block:: C
void usbd_cdc_acm_bulk_out(uint8_t busid, uint8_t ep, uint32_t nbytes)
{
USB_LOG_RAW("actual out len:%d\r\n", nbytes);
// for (int i = 0; i < 100; i++) {
// printf("%02x ", read_buffer[i]);
// }
// printf("\r\n");
/* setup next out ep read transfer */
usbd_ep_start_read(busid, CDC_OUT_EP, read_buffer, 2048);
}
void usbd_cdc_acm_bulk_in(uint8_t busid, uint8_t ep, uint32_t nbytes)
{
USB_LOG_RAW("actual in len:%d\r\n", nbytes);
if ((nbytes % usbd_get_ep_mps(busid, ep)) == 0 && nbytes) {
/* send zlp */
usbd_ep_start_write(busid, CDC_IN_EP, NULL, 0);
} else {
ep_tx_busy_flag = false;
}
}
- 以下是为了测试 DTR 功能并控制 USB 发送,DTR 和 RST 只用于搭配 UART 使用,如果是纯 USB,没什么用,这里仅做测试。DTR 开关使用任意串口上位机并勾选 DTR。

.. code-block:: C
void usbd_cdc_acm_set_dtr(uint8_t busid, uint8_t intf, bool dtr)
{
if (dtr) {
dtr_enable = 1;
} else {
dtr_enable = 0;
}
}
- 在主函数中一直调用发送即可

.. code-block:: C
void cdc_acm_data_send_with_dtr_test(uint8_t busid)
{
if (dtr_enable) {
ep_tx_busy_flag = true;
usbd_ep_start_write(busid, CDC_IN_EP, write_buffer, 2048);
while (ep_tx_busy_flag) {
}
}
}
- 上述我们需要注意,长度设置为 2048 是为了测试 ZLP 功能,通常实际使用时,接收长度应该使用 CDC_MAX_MPS 。具体原因参考 :ref:`usb_ext`
- 如果需要做性能测试,使用 tools/test_srcipts/test_cdc_speed.py 进行测试,并在测试之前删除 `usbd_cdc_acm_bulk_out` 和 `usbd_cdc_acm_bulk_in` 中的打印,否则会影响测试结果。
25 changes: 24 additions & 1 deletion docs/source/quick_start/demo.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,32 @@

仓库参考:https://gitee.com/phytium_embedded/phytium-free-rtos-sdk

- 飞腾派支持两个 USB3.0 主机, 两个 USB2.0 主从机
- 飞腾派支持两个 USB3.0 主机(采用 XHCI), 两个 USB2.0 主从机
- USB 的相关应用位于 `example/peripheral/usb` ,根据官方环境搭建完成后,即可编译使用。

基于 Essemi 系列芯片
---------------------------

仓库参考:https://github.com/CherryUSB/cherryusb_es32

- 支持全速和高速主从机

基于 NXP MCX系列芯片
---------------------------

仓库参考:https://github.com/CherryUSB/cherryusb_mcx 或者 https://github.com/RT-Thread/rt-thread/tree/master/bsp/nxp/mcx

- 支持全速 IP 和高速 IP, 高速 IP 支持主机和从机

- 支持全速和高速主从机

基于 Artinchip 系列芯片
---------------------------

仓库参考:https://gitee.com/artinchip/luban-lite

- 支持全速和高速主从机,主机采用 EHCI + OHCI。

基于 ST 系列芯片
---------------------------

Expand Down
2 changes: 2 additions & 0 deletions docs/source/usb/usb_ext.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _usb_ext:

USB 知识点拓展
===========================

Expand Down

0 comments on commit 6e95f9e

Please sign in to comment.