From da391c6cf97ddf78be5bed323ce186b26b9c66c3 Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Sun, 8 Sep 2024 00:17:55 +0800 Subject: docs: update rst framework --- docs/source/api/api_config.rst | 19 +- docs/source/api/api_port.rst | 11 ++ docs/source/demo/index.rst | 1 - docs/source/demo/usbd_audiov1.rst | 2 + docs/source/demo/usbd_audiov2.rst | 2 + docs/source/demo/usbd_cdc_acm.rst | 2 + docs/source/demo/usbd_ecm.rst | 2 + docs/source/demo/usbd_hid.rst | 2 + docs/source/demo/usbd_msc.rst | 2 + docs/source/demo/usbd_rndis.rst | 2 + docs/source/demo/usbd_video.rst | 2 + docs/source/demo/usbd_webusb.rst | 2 + docs/source/demo/usbd_winusb.rst | 2 + docs/source/demo/usbh_bluetooth.rst | 2 + docs/source/demo/usbh_hid.rst | 2 + docs/source/demo/usbh_msc.rst | 2 + docs/source/demo/usbh_net.rst | 2 + docs/source/demo/usbh_serial.rst | 2 + docs/source/demo/usbh_wifi.rst | 2 + docs/source/index.rst | 51 ++++-- docs/source/porting.rst | 24 --- docs/source/quick_start/demo.rst | 197 +++++++++++++++++++++ docs/source/quick_start/esp.rst | 17 ++ docs/source/quick_start/img/env0.png | Bin 0 -> 17041 bytes docs/source/quick_start/img/env1.png | Bin 0 -> 42859 bytes docs/source/quick_start/img/env2.png | Bin 0 -> 66915 bytes docs/source/quick_start/img/esp1.png | Bin 0 -> 28939 bytes docs/source/quick_start/img/esp2.png | Bin 0 -> 72318 bytes docs/source/quick_start/img/esp3.png | Bin 0 -> 29745 bytes docs/source/quick_start/img/esp4.png | Bin 0 -> 52878 bytes docs/source/quick_start/img/stm32_init.png | Bin 0 -> 8280 bytes docs/source/quick_start/img/stm32_init2.png | Bin 0 -> 47691 bytes docs/source/quick_start/img/stm32cubemx0.png | Bin 0 -> 22591 bytes docs/source/quick_start/img/stm32cubemx1.png | Bin 0 -> 37705 bytes docs/source/quick_start/img/stm32cubemx2.png | Bin 0 -> 41977 bytes docs/source/quick_start/img/stm32cubemx_clk.png | Bin 0 -> 16418 bytes docs/source/quick_start/index.rst | 197 --------------------- docs/source/quick_start/other_chip.rst | 121 ------------- docs/source/quick_start/rt-thread/img/env0.png | Bin 17041 -> 0 bytes docs/source/quick_start/rt-thread/img/env1.png | Bin 42859 -> 0 bytes docs/source/quick_start/rt-thread/img/env2.png | Bin 66915 -> 0 bytes .../quick_start/rt-thread/img/stm32_init.png | Bin 8280 -> 0 bytes .../quick_start/rt-thread/img/stm32_init2.png | Bin 47691 -> 0 bytes .../quick_start/rt-thread/img/stm32cubemx0.png | Bin 22591 -> 0 bytes .../quick_start/rt-thread/img/stm32cubemx1.png | Bin 37705 -> 0 bytes .../quick_start/rt-thread/img/stm32cubemx2.png | Bin 41977 -> 0 bytes .../quick_start/rt-thread/img/stm32cubemx_clk.png | Bin 16418 -> 0 bytes docs/source/quick_start/rt-thread/rtthread.rst | 119 ------------- docs/source/quick_start/rtthread.rst | 121 +++++++++++++ docs/source/quick_start/transplant.rst | 121 +++++++++++++ docs/source/support/img/dwc2_hostuac.png | Bin 0 -> 168135 bytes docs/source/support/index.rst | 1 + docs/source/usbip/cdns2.rst | 2 + docs/source/usbip/cdns3.rst | 2 + docs/source/usbip/chipidea.rst | 2 + docs/source/usbip/dwc2.rst | 2 + docs/source/usbip/dwc3.rst | 2 + docs/source/usbip/ehci.rst | 2 + docs/source/usbip/fotg210.rst | 2 + docs/source/usbip/musb.rst | 2 + docs/source/usbip/ohci.rst | 2 + docs/source/usbip/xhci.rst | 2 + 62 files changed, 572 insertions(+), 480 deletions(-) delete mode 100644 docs/source/demo/index.rst create mode 100644 docs/source/demo/usbd_audiov1.rst create mode 100644 docs/source/demo/usbd_audiov2.rst create mode 100644 docs/source/demo/usbd_cdc_acm.rst create mode 100644 docs/source/demo/usbd_ecm.rst create mode 100644 docs/source/demo/usbd_hid.rst create mode 100644 docs/source/demo/usbd_msc.rst create mode 100644 docs/source/demo/usbd_rndis.rst create mode 100644 docs/source/demo/usbd_video.rst create mode 100644 docs/source/demo/usbd_webusb.rst create mode 100644 docs/source/demo/usbd_winusb.rst create mode 100644 docs/source/demo/usbh_bluetooth.rst create mode 100644 docs/source/demo/usbh_hid.rst create mode 100644 docs/source/demo/usbh_msc.rst create mode 100644 docs/source/demo/usbh_net.rst create mode 100644 docs/source/demo/usbh_serial.rst create mode 100644 docs/source/demo/usbh_wifi.rst delete mode 100644 docs/source/porting.rst create mode 100644 docs/source/quick_start/demo.rst create mode 100644 docs/source/quick_start/esp.rst create mode 100644 docs/source/quick_start/img/env0.png create mode 100644 docs/source/quick_start/img/env1.png create mode 100644 docs/source/quick_start/img/env2.png create mode 100644 docs/source/quick_start/img/esp1.png create mode 100644 docs/source/quick_start/img/esp2.png create mode 100644 docs/source/quick_start/img/esp3.png create mode 100644 docs/source/quick_start/img/esp4.png create mode 100644 docs/source/quick_start/img/stm32_init.png create mode 100644 docs/source/quick_start/img/stm32_init2.png create mode 100644 docs/source/quick_start/img/stm32cubemx0.png create mode 100644 docs/source/quick_start/img/stm32cubemx1.png create mode 100644 docs/source/quick_start/img/stm32cubemx2.png create mode 100644 docs/source/quick_start/img/stm32cubemx_clk.png delete mode 100644 docs/source/quick_start/index.rst delete mode 100644 docs/source/quick_start/other_chip.rst delete mode 100644 docs/source/quick_start/rt-thread/img/env0.png delete mode 100644 docs/source/quick_start/rt-thread/img/env1.png delete mode 100644 docs/source/quick_start/rt-thread/img/env2.png delete mode 100644 docs/source/quick_start/rt-thread/img/stm32_init.png delete mode 100644 docs/source/quick_start/rt-thread/img/stm32_init2.png delete mode 100644 docs/source/quick_start/rt-thread/img/stm32cubemx0.png delete mode 100644 docs/source/quick_start/rt-thread/img/stm32cubemx1.png delete mode 100644 docs/source/quick_start/rt-thread/img/stm32cubemx2.png delete mode 100644 docs/source/quick_start/rt-thread/img/stm32cubemx_clk.png delete mode 100644 docs/source/quick_start/rt-thread/rtthread.rst create mode 100644 docs/source/quick_start/rtthread.rst create mode 100644 docs/source/quick_start/transplant.rst create mode 100644 docs/source/support/img/dwc2_hostuac.png create mode 100644 docs/source/usbip/cdns2.rst create mode 100644 docs/source/usbip/cdns3.rst create mode 100644 docs/source/usbip/chipidea.rst create mode 100644 docs/source/usbip/dwc2.rst create mode 100644 docs/source/usbip/dwc3.rst create mode 100644 docs/source/usbip/ehci.rst create mode 100644 docs/source/usbip/fotg210.rst create mode 100644 docs/source/usbip/musb.rst create mode 100644 docs/source/usbip/ohci.rst create mode 100644 docs/source/usbip/xhci.rst diff --git a/docs/source/api/api_config.rst b/docs/source/api/api_config.rst index 7a9cb35d..6b2ed8eb 100644 --- a/docs/source/api/api_config.rst +++ b/docs/source/api/api_config.rst @@ -1,7 +1,7 @@ -USB CONFIG 宏 +USB CONFIG 说明 ========================= -通用 CONFIG 宏 +通用 CONFIG --------------------- CONFIG_USB_PRINTF @@ -29,13 +29,13 @@ USB_NOCACHE_RAM_SECTION 如果芯片没有 cache 功能,此宏无效。如果有,则 USB 的输入输出 buffer 必须放在 nocache ram 中,保证数据一致性。 -设备相关 CONFIG 宏 +设备协议栈 CONFIG --------------------- CONFIG_USBDEV_REQUEST_BUFFER_LEN ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -控制传输接收和发送的 buffer 最大长度,默认是 256。 +控制传输接收和发送的 buffer 最大长度,默认是 512。 CONFIG_USBDEV_SETUP_LOG_PRINT ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -55,7 +55,7 @@ CONFIG_USBDEV_MSC_MAX_BUFSIZE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ msc 缓存的最大长度,缓存越大,USB 的速度越高,因为介质一般多个 block 读写速度比单个 block 高很多,比如 sd 卡。 -默认 512 ,如果是 flash 需要改成 4K, 缓存的大小需要是 介质的一个 block size 的整数倍。 +默认 512 ,如果是 flash 需要改成 4K, 缓存的大小需要是介质的一个 block size 的整数倍。 CONFIG_USBDEV_MSC_MANUFACTURER_STRING ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -66,6 +66,11 @@ CONFIG_USBDEV_MSC_PRODUCT_STRING CONFIG_USBDEV_MSC_VERSION_STRING ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +CONFIG_USBDEV_MSC_POLLING +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +将 usbd_msc_sector_read 和 usbd_msc_sector_write 操作放在 while1 中运行,裸机下使用。 + CONFIG_USBDEV_MSC_THREAD ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -90,7 +95,7 @@ rndis 控制传输最大接收和发送的长度,根据 RNDIS options list 决 CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -rndis 以太网帧的最大长度,默认 1536 +rndis 以太网帧的最大长度,默认 1580 CONFIG_USBDEV_RNDIS_VENDOR_ID ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -103,7 +108,7 @@ CONFIG_USBDEV_RNDIS_USING_LWIP rndis 与 lwip 接口的对接 -主机相关 CONFIG 宏 +主机协议栈 CONFIG --------------------- 以下参数决定了支持的最大外部hub数量,接口数,每个接口的端点数和 altsetting 数量,更改此值会影响 ram 的大小,建议根据实际情况更改。 diff --git a/docs/source/api/api_port.rst b/docs/source/api/api_port.rst index a11a8b6c..7821d424 100644 --- a/docs/source/api/api_port.rst +++ b/docs/source/api/api_port.rst @@ -142,6 +142,17 @@ usb_hc_init - **return** 返回 0 表示正确,其他表示错误 +usb_hc_deinit +"""""""""""""""""""""""""""""""""""" + +``usb_hc_deinit`` 用于反初始化 usb host controller 寄存器。 **此函数不对用户开放**。 + +.. code-block:: C + + int usb_hc_deinit(void); + +- **return** 返回 0 表示正确,其他表示错误 + usbh_roothub_control """""""""""""""""""""""""""""""""""" diff --git a/docs/source/demo/index.rst b/docs/source/demo/index.rst deleted file mode 100644 index 30404ce4..00000000 --- a/docs/source/demo/index.rst +++ /dev/null @@ -1 +0,0 @@ -TODO \ No newline at end of file diff --git a/docs/source/demo/usbd_audiov1.rst b/docs/source/demo/usbd_audiov1.rst new file mode 100644 index 00000000..ec8f5e63 --- /dev/null +++ b/docs/source/demo/usbd_audiov1.rst @@ -0,0 +1,2 @@ +usbd_audiov1 +=============== diff --git a/docs/source/demo/usbd_audiov2.rst b/docs/source/demo/usbd_audiov2.rst new file mode 100644 index 00000000..fa496160 --- /dev/null +++ b/docs/source/demo/usbd_audiov2.rst @@ -0,0 +1,2 @@ +usbd_audiov2 +=============== diff --git a/docs/source/demo/usbd_cdc_acm.rst b/docs/source/demo/usbd_cdc_acm.rst new file mode 100644 index 00000000..8a6c4baf --- /dev/null +++ b/docs/source/demo/usbd_cdc_acm.rst @@ -0,0 +1,2 @@ +usbd_cdc_acm +=============== diff --git a/docs/source/demo/usbd_ecm.rst b/docs/source/demo/usbd_ecm.rst new file mode 100644 index 00000000..c4c64ab5 --- /dev/null +++ b/docs/source/demo/usbd_ecm.rst @@ -0,0 +1,2 @@ +usbd_cdc_ecm +=============== diff --git a/docs/source/demo/usbd_hid.rst b/docs/source/demo/usbd_hid.rst new file mode 100644 index 00000000..c51e3627 --- /dev/null +++ b/docs/source/demo/usbd_hid.rst @@ -0,0 +1,2 @@ +usbd_hid +=============== diff --git a/docs/source/demo/usbd_msc.rst b/docs/source/demo/usbd_msc.rst new file mode 100644 index 00000000..eb4dd164 --- /dev/null +++ b/docs/source/demo/usbd_msc.rst @@ -0,0 +1,2 @@ +usbd_msc +=============== diff --git a/docs/source/demo/usbd_rndis.rst b/docs/source/demo/usbd_rndis.rst new file mode 100644 index 00000000..40fba402 --- /dev/null +++ b/docs/source/demo/usbd_rndis.rst @@ -0,0 +1,2 @@ +usbd_rndis +=============== diff --git a/docs/source/demo/usbd_video.rst b/docs/source/demo/usbd_video.rst new file mode 100644 index 00000000..800ca358 --- /dev/null +++ b/docs/source/demo/usbd_video.rst @@ -0,0 +1,2 @@ +usbd_video +=============== diff --git a/docs/source/demo/usbd_webusb.rst b/docs/source/demo/usbd_webusb.rst new file mode 100644 index 00000000..51e25511 --- /dev/null +++ b/docs/source/demo/usbd_webusb.rst @@ -0,0 +1,2 @@ +usbd_webusb +=============== diff --git a/docs/source/demo/usbd_winusb.rst b/docs/source/demo/usbd_winusb.rst new file mode 100644 index 00000000..bc698ea5 --- /dev/null +++ b/docs/source/demo/usbd_winusb.rst @@ -0,0 +1,2 @@ +usbd_winusb +=============== diff --git a/docs/source/demo/usbh_bluetooth.rst b/docs/source/demo/usbh_bluetooth.rst new file mode 100644 index 00000000..a93844ea --- /dev/null +++ b/docs/source/demo/usbh_bluetooth.rst @@ -0,0 +1,2 @@ +usbh_bluetooth +=============== diff --git a/docs/source/demo/usbh_hid.rst b/docs/source/demo/usbh_hid.rst new file mode 100644 index 00000000..508c9cae --- /dev/null +++ b/docs/source/demo/usbh_hid.rst @@ -0,0 +1,2 @@ +usbh_hid +=============== diff --git a/docs/source/demo/usbh_msc.rst b/docs/source/demo/usbh_msc.rst new file mode 100644 index 00000000..3d4b89c7 --- /dev/null +++ b/docs/source/demo/usbh_msc.rst @@ -0,0 +1,2 @@ +usbh_msc +=============== diff --git a/docs/source/demo/usbh_net.rst b/docs/source/demo/usbh_net.rst new file mode 100644 index 00000000..be61628d --- /dev/null +++ b/docs/source/demo/usbh_net.rst @@ -0,0 +1,2 @@ +usbh_net +=============== diff --git a/docs/source/demo/usbh_serial.rst b/docs/source/demo/usbh_serial.rst new file mode 100644 index 00000000..7b914820 --- /dev/null +++ b/docs/source/demo/usbh_serial.rst @@ -0,0 +1,2 @@ +usbh_serial +=============== diff --git a/docs/source/demo/usbh_wifi.rst b/docs/source/demo/usbh_wifi.rst new file mode 100644 index 00000000..be148c7d --- /dev/null +++ b/docs/source/demo/usbh_wifi.rst @@ -0,0 +1,2 @@ +usbh_wifi +=============== diff --git a/docs/source/index.rst b/docs/source/index.rst index a231d01a..08458da6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -53,10 +53,10 @@ CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 :maxdepth: 1 :caption: 快速上手 - quick_start/index - quick_start/rt-thread/rtthread - quick_start/other_chip - version + quick_start/demo + quick_start/transplant + quick_start/rtthread + quick_start/esp q&a .. toctree:: @@ -92,16 +92,39 @@ CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 .. toctree:: :maxdepth: 1 - :caption: 基本例程 - - demo/index + :caption: 例程说明 + + demo/usbd_cdc_acm + demo/usbd_hid + demo/usbd_msc + demo/usbd_rndis + demo/usbd_ecm + demo/usbd_audiov1 + demo/usbd_audiov2 + demo/usbd_video + demo/usbd_winusb + demo/usbd_webusb + demo/usbh_serial + demo/usbh_hid + demo/usbh_msc + demo/usbh_net + demo/usbh_bluetooth + demo/usbh_wifi .. toctree:: :maxdepth: 1 - :caption: Porting 说明 - - porting - porting_usbip + :caption: USBIP 介绍 + + usbip/ohci + usbip/ehci + usbip/xhci + usbip/chipidea + usbip/dwc2 + usbip/musb + usbip/fotg210 + usbip/cdns2 + usbip/cdns3 + usbip/dwc3 .. toctree:: :maxdepth: 1 @@ -109,6 +132,12 @@ CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 tools/index +.. toctree:: + :maxdepth: 1 + :caption: 版本说明 + + version + .. toctree:: :maxdepth: 1 :caption: 商业支持 diff --git a/docs/source/porting.rst b/docs/source/porting.rst deleted file mode 100644 index 5962e229..00000000 --- a/docs/source/porting.rst +++ /dev/null @@ -1,24 +0,0 @@ -Porting 如何编写 -============================== - -本节主要介绍没有支持的芯片如何做 porting。 - -从机 porting ----------------------------- - -- 首先复制一份从 `port/template` 复制一份 `usb_dc.c` 并参与编译,保证能编译过。 -- 实现 ``usb_dc_init`` 保证能进入中断 -- 在中断中判断 reset 中断并能够正常触发 reset 中断,在 reset 中断中调用 ``usbd_event_reset_handler``,如果可能,还需要启动读取 setup 包。 -- 在中断中判断 setup 中断并能够正常触发 setup 中断,然后将读取的数据传入 ``usbd_event_ep0_setup_complete_handler`` -- 实现 ``usbd_ep_start_write`` 并能够触发发送完成中断 -- 实现 ``usbd_ep_start_read`` 并能够触发接收完成中断 -- 分包处理 - -主机 porting ----------------------------- - -- 首先复制一份从 `port/template` 复制一份 `usb_hc.c` 并参与编译,保证能编译过。 -- 实现 ``usb_hc_init`` 保证能进入中断 -- 能够进入插拔中断,比如 ``connect`` 和 ``disconnect``,并调用 ``usbh_roothub_thread_wakeup`` 能够唤醒 hub 线程 -- 实现 ``usbh_roothub_control`` 并根据第三个条件,能够完成 ``usbh_hub_events`` 中 ``usbh_enumerate`` 之前的流程 -- 实现 ``usbh_submit_urb`` \ No newline at end of file diff --git a/docs/source/quick_start/demo.rst b/docs/source/quick_start/demo.rst new file mode 100644 index 00000000..a108143f --- /dev/null +++ b/docs/source/quick_start/demo.rst @@ -0,0 +1,197 @@ +基于现有 demo 快速验证 +========================= + +在学习 USB 或者是学习 CherryUSB 代码之前,我们需要先基于现有的 demo 进行快速验证,为什么?是为了提升对 USB 的兴趣,能有信心进行下一步的动作,如果 demo 都跑不起来,或者自己摸索写代码,或者先看 USB 基本概念,结果看到最后, +发现一点都看不懂,概念好多,根本记不住,从而丧失对 USB 的兴趣。因此,先跑 demo 非常重要。下面我将给大家罗列目前支持的 demo 仓库。 + +基于 bouffalolab 系列芯片 +--------------------------- + +仓库参考:https://github.com/CherryUSB/cherryusb_bouffalolab + +- BL616/BL808 是一个 USB2.0 并且内置高速 PHY 芯片,共 5个端点(包含端点0)。支持主从机。 +- USB 的相关应用位于 `examples/usbdev` 和 `examples/usbhost` 目录下,根据官方环境搭建完成后,即可编译使用。 + +基于 HPMicro 系列芯片 +--------------------------- + +仓库参考:https://github.com/CherryUSB/cherryusb_hpmicro + +- HPM 系列芯片均 USB 2.0 并且内置高速 PHY,支持主从机,端点共 8/16 个,并且可以同时使用双向,不同芯片个数有差异 +- USB 的相关应用位于 `samples/cherryusb` ,根据官方环境搭建完成后,即可编译使用。 + +基于 esp32s2/s3/p4 系列芯片 +--------------------------- + +仓库参考:https://github.com/CherryUSB/cherryusb_esp32 + +- esp32s2/s3 支持全速主从机,esp32p4 支持高速主从机 +- 默认提供主机 demo,并且使用 esp 组件库进行开发, 在 https://components.espressif.com/ 中搜索 cherryusb 即可 + +基于飞腾派系列芯片 +--------------------------- + +仓库参考:https://gitee.com/phytium_embedded/phytium-free-rtos-sdk + +- 飞腾派支持两个 USB3.0 主机, 两个 USB2.0 主从机 +- USB 的相关应用位于 `example/peripheral/usb` ,根据官方环境搭建完成后,即可编译使用。 + +基于 ST 系列芯片 +--------------------------- + +仓库参考:https://github.com/CherryUSB/cherryusb_stm32 + +默认提供以下 demo 工程: + +- F103 使用 fsdev ip +- F429 主从使用 USB1, 引脚 pb14/pb15, 并且都使用 dma 模式 +- H7 设备使用 USB0, 引脚 pa11/pa12,主机使用 USB_OTG_HS ,引脚 pb14/pb15,并且需要做 nocache 处理 + +demo 底下提供了 **stm32xxx.ioc** 文件,双击打开,点击 **Generate Code** 即可。 + +.. caution:: 生成完以后,请使用 git reset 功能将被覆盖的 `main.c` 和 `stm32xxx_it.c` 文件撤回,禁止被 cubemx 覆盖。 + +涵盖 F1/F4/H7,其余芯片基本类似,不再赘述,具体区别有: + +- usb ip 区别:F1使用 fsdev,F4/H7使用 dwc2 +- dwc2 ip 区别: USB0 (引脚是 PA11/PA12) 和 USB1 (引脚是 PB14/PB15), 其中 USB1 默认全速,可以接外部PHY 形成高速主机,并且带 dma 功能 +- F4 无cache,H7 有 cache + +如果是 STM32F7/STM32H7 这种带 cache 功能,需要将 usb 使用到的 ram 定位到 no cache ram 区域。举例如下 + +.. code-block:: C + + cpu_mpu_config(0, MPU_Normal_NonCache, 0x24070000, MPU_REGION_SIZE_64KB); + +对应 keil 中的 sct 脚本修改: + +.. code-block:: C + + LR_IROM1 0x08000000 0x00200000 { ; load region size_region + ER_IROM1 0x08000000 0x00200000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM2 0x24000000 0x00070000 { ; RW data + .ANY (+RW +ZI) + } + USB_NOCACHERAM 0x24070000 0x00010000 { ; RW data + *(.noncacheable) + } + } + +USB Device 移植要点 +^^^^^^^^^^^^^^^^^^^^^^ + +- 使用 **stm32cubemx** 创建工程,配置基本的 RCC、UART (作为log使用) + +.. figure:: img/stm32_1.png +.. figure:: img/stm32_2.png + +- 如果使用 fsdev ip,勾选 **USB** 。如果使用 dwc2 ip,勾选 **USB_OTG_FS** 或者勾选 **USB_OTG_HS**。开启 USB 中断,其他配置对我们没用,代码中不会使用任何 st 的 usb 库。 + +.. figure:: img/stm32_3_1.png +.. figure:: img/stm32_3.png + +- 配置 usb clock 为 48M + +.. figure:: img/stm32_4_1.png +.. figure:: img/stm32_4.png + +- 选择好工程,这里我们选择 keil,设置好 stack 和 heap,如果使用 msc 可以推荐设置大点,然后点击 **Generate Code**。 + +.. figure:: img/stm32_5.png + +- 添加 CherryUSB 必须要的源码( **usbd_core.c** 、 **usb_dc_dwc2.c** 或者是 **usb_dc_fsdev.c** ),以及想要使用的 class 驱动,可以将对应的 class template 添加方便测试。 + +.. figure:: img/stm32_6.png + +- 头文件该加的加 + +.. figure:: img/stm32_7.png + +- 复制一份 **cherryusb_config_template.h**,放到 `Core/Inc` 目录下,并命名为 `usb_config.h` + +.. figure:: img/stm32_8.png + +- 如果使用 dwc2 ip,需要增加 **usb_glue_st.c** 文件,并在 `usb_config.h` 中实现以下宏: + +.. code-block:: C + + // 以下细节如有出入,请对照 stm32xxx.h 文件修改 + // 需要根据硬件实际的 fifo 深度进行修改,默认是最基础的配置 + #define CONFIG_USBDEV_EP_NUM 6 + #define CONFIG_USB_DWC2_RXALL_FIFO_SIZE (1012 - 16 * 6) + #define CONFIG_USB_DWC2_TX0_FIFO_SIZE (64 / 4) + #define CONFIG_USB_DWC2_TX1_FIFO_SIZE (64 / 4) + #define CONFIG_USB_DWC2_TX2_FIFO_SIZE (64 / 4) + #define CONFIG_USB_DWC2_TX3_FIFO_SIZE (64 / 4) + #define CONFIG_USB_DWC2_TX4_FIFO_SIZE (64 / 4) + #define CONFIG_USB_DWC2_TX5_FIFO_SIZE (64 / 4) + +- 如果使用 fsdev ip,在 `usb_config.h` 中实现以下宏: + +.. code-block:: C + + #define CONFIG_USBDEV_EP_NUM 8 + #define CONFIG_USBDEV_FSDEV_PMA_ACCESS 2 + +- 编译器推荐使用 **AC6**。勾选 **Microlib**,并实现 **printf** ,方便后续查看 log。 + +.. figure:: img/stm32_10.png +.. figure:: img/stm32_11.png + +- 拷贝 **xxx_msp.c** 中的 **HAL_PCD_MspInit** 函数中的内容到 **usb_dc_low_level_init** 函数中,屏蔽 st 生成的 usb 初始化 + +.. figure:: img/stm32_12.png +.. figure:: img/stm32_14.png + +- 在中断函数中调用 `USBD_IRQHandler`,并传入 `busid` + +.. figure:: img/stm32_13.png + +- 调用 template 的内容初始化,并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS` + +.. figure:: img/stm32_15.png + +USB Host 移植要点 +^^^^^^^^^^^^^^^^^^^^^^ + +前面 6 步与 Device 一样。需要注意,host 驱动只支持带 dma 的 hs port (引脚是 PB14/PB15),所以 fs port (引脚是 PA11/PA12)不做支持(没有 dma 你玩什么主机)。 + +- 添加 CherryUSB 必须要的源码( **usbh_core.c** 、 **usbh_hub.c** 、 **usb_hc_dwc2.c** 、以及 **osal** 目录下的适配层文件),以及想要使用的 class 驱动,并且可以将对应的 **usb host.c** 添加方便测试。 + +.. figure:: img/stm32_16.png + +- 编译器推荐使用 **AC6**。勾选 **Microlib**,并实现 **printf** ,方便后续查看 log。 + +.. figure:: img/stm32_10.png +.. figure:: img/stm32_11.png + +- 复制一份 **cherryusb_config_template.h**,放到 `Core/Inc` 目录下,并命名为 `usb_config.h` + +- 增加 **usb_glue_st.c** 文件,并在 `usb_config.h` 中实现以下宏: + +.. code-block:: C + + // 以下细节如有出入,请对照 stm32xxx.h 文件修改 + // 需要根据硬件实际的 fifo 深度进行修改,默认是最基础的配置 + #define CONFIG_USBHOST_PIPE_NUM 12 + #define CONFIG_USB_DWC2_NPTX_FIFO_SIZE (512 / 4) + #define CONFIG_USB_DWC2_PTX_FIFO_SIZE (1024 / 4) + #define CONFIG_USB_DWC2_RX_FIFO_SIZE ((1012 - CONFIG_USB_DWC2_NPTX_FIFO_SIZE - CONFIG_USB_DWC2_PTX_FIFO_SIZE) / 4) + +- 拷贝 **xxx_msp.c** 中的 `HAL_HCD_MspInit` 函数中的内容到 `usb_hc_low_level_init` 函数中,屏蔽 st 生成的 usb 初始化 +- 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid` +- 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` +- 启动线程 + +.. figure:: img/stm32_18.png +.. figure:: img/stm32_19.png + +- 如果使用 **msc**,并且带文件系统,需要自行添加文件系统文件了,对应的 porting 编写参考 **fatfs_usbh.c** 文件。 + +.. figure:: img/stm32_21.png + diff --git a/docs/source/quick_start/esp.rst b/docs/source/quick_start/esp.rst new file mode 100644 index 00000000..29639e05 --- /dev/null +++ b/docs/source/quick_start/esp.rst @@ -0,0 +1,17 @@ +基于 ESP-Registry 开发指南 +=========================== + +ESP-Registry 可以参考官方文档,推荐使用 vscode + esp-idf 的开发环境。 + +- ctrl + shift + p 选择 ESP-IDF 欢迎界面,然后选择 Component mananger + +.. figure:: img/esp1.png + +- 找到 cherryusb 并安装 + +.. figure:: img/esp2.png + +- 打开 menuconfig,并打开 cherryusb 的配置,根据实际情况选择主机或者从机模式 + +.. figure:: img/esp3.png +.. figure:: img/esp4.png \ No newline at end of file diff --git a/docs/source/quick_start/img/env0.png b/docs/source/quick_start/img/env0.png new file mode 100644 index 00000000..c0a8b03f Binary files /dev/null and b/docs/source/quick_start/img/env0.png differ diff --git a/docs/source/quick_start/img/env1.png b/docs/source/quick_start/img/env1.png new file mode 100644 index 00000000..2a68e052 Binary files /dev/null and b/docs/source/quick_start/img/env1.png differ diff --git a/docs/source/quick_start/img/env2.png b/docs/source/quick_start/img/env2.png new file mode 100644 index 00000000..ee37101a Binary files /dev/null and b/docs/source/quick_start/img/env2.png differ diff --git a/docs/source/quick_start/img/esp1.png b/docs/source/quick_start/img/esp1.png new file mode 100644 index 00000000..1f059e71 Binary files /dev/null and b/docs/source/quick_start/img/esp1.png differ diff --git a/docs/source/quick_start/img/esp2.png b/docs/source/quick_start/img/esp2.png new file mode 100644 index 00000000..fd20e9ce Binary files /dev/null and b/docs/source/quick_start/img/esp2.png differ diff --git a/docs/source/quick_start/img/esp3.png b/docs/source/quick_start/img/esp3.png new file mode 100644 index 00000000..82a7162f Binary files /dev/null and b/docs/source/quick_start/img/esp3.png differ diff --git a/docs/source/quick_start/img/esp4.png b/docs/source/quick_start/img/esp4.png new file mode 100644 index 00000000..ffb2882a Binary files /dev/null and b/docs/source/quick_start/img/esp4.png differ diff --git a/docs/source/quick_start/img/stm32_init.png b/docs/source/quick_start/img/stm32_init.png new file mode 100644 index 00000000..3ce57201 Binary files /dev/null and b/docs/source/quick_start/img/stm32_init.png differ diff --git a/docs/source/quick_start/img/stm32_init2.png b/docs/source/quick_start/img/stm32_init2.png new file mode 100644 index 00000000..eae3c026 Binary files /dev/null and b/docs/source/quick_start/img/stm32_init2.png differ diff --git a/docs/source/quick_start/img/stm32cubemx0.png b/docs/source/quick_start/img/stm32cubemx0.png new file mode 100644 index 00000000..1ea33e04 Binary files /dev/null and b/docs/source/quick_start/img/stm32cubemx0.png differ diff --git a/docs/source/quick_start/img/stm32cubemx1.png b/docs/source/quick_start/img/stm32cubemx1.png new file mode 100644 index 00000000..a6ca5078 Binary files /dev/null and b/docs/source/quick_start/img/stm32cubemx1.png differ diff --git a/docs/source/quick_start/img/stm32cubemx2.png b/docs/source/quick_start/img/stm32cubemx2.png new file mode 100644 index 00000000..e29254bb Binary files /dev/null and b/docs/source/quick_start/img/stm32cubemx2.png differ diff --git a/docs/source/quick_start/img/stm32cubemx_clk.png b/docs/source/quick_start/img/stm32cubemx_clk.png new file mode 100644 index 00000000..41a7aae8 Binary files /dev/null and b/docs/source/quick_start/img/stm32cubemx_clk.png differ diff --git a/docs/source/quick_start/index.rst b/docs/source/quick_start/index.rst deleted file mode 100644 index a108143f..00000000 --- a/docs/source/quick_start/index.rst +++ /dev/null @@ -1,197 +0,0 @@ -基于现有 demo 快速验证 -========================= - -在学习 USB 或者是学习 CherryUSB 代码之前,我们需要先基于现有的 demo 进行快速验证,为什么?是为了提升对 USB 的兴趣,能有信心进行下一步的动作,如果 demo 都跑不起来,或者自己摸索写代码,或者先看 USB 基本概念,结果看到最后, -发现一点都看不懂,概念好多,根本记不住,从而丧失对 USB 的兴趣。因此,先跑 demo 非常重要。下面我将给大家罗列目前支持的 demo 仓库。 - -基于 bouffalolab 系列芯片 ---------------------------- - -仓库参考:https://github.com/CherryUSB/cherryusb_bouffalolab - -- BL616/BL808 是一个 USB2.0 并且内置高速 PHY 芯片,共 5个端点(包含端点0)。支持主从机。 -- USB 的相关应用位于 `examples/usbdev` 和 `examples/usbhost` 目录下,根据官方环境搭建完成后,即可编译使用。 - -基于 HPMicro 系列芯片 ---------------------------- - -仓库参考:https://github.com/CherryUSB/cherryusb_hpmicro - -- HPM 系列芯片均 USB 2.0 并且内置高速 PHY,支持主从机,端点共 8/16 个,并且可以同时使用双向,不同芯片个数有差异 -- USB 的相关应用位于 `samples/cherryusb` ,根据官方环境搭建完成后,即可编译使用。 - -基于 esp32s2/s3/p4 系列芯片 ---------------------------- - -仓库参考:https://github.com/CherryUSB/cherryusb_esp32 - -- esp32s2/s3 支持全速主从机,esp32p4 支持高速主从机 -- 默认提供主机 demo,并且使用 esp 组件库进行开发, 在 https://components.espressif.com/ 中搜索 cherryusb 即可 - -基于飞腾派系列芯片 ---------------------------- - -仓库参考:https://gitee.com/phytium_embedded/phytium-free-rtos-sdk - -- 飞腾派支持两个 USB3.0 主机, 两个 USB2.0 主从机 -- USB 的相关应用位于 `example/peripheral/usb` ,根据官方环境搭建完成后,即可编译使用。 - -基于 ST 系列芯片 ---------------------------- - -仓库参考:https://github.com/CherryUSB/cherryusb_stm32 - -默认提供以下 demo 工程: - -- F103 使用 fsdev ip -- F429 主从使用 USB1, 引脚 pb14/pb15, 并且都使用 dma 模式 -- H7 设备使用 USB0, 引脚 pa11/pa12,主机使用 USB_OTG_HS ,引脚 pb14/pb15,并且需要做 nocache 处理 - -demo 底下提供了 **stm32xxx.ioc** 文件,双击打开,点击 **Generate Code** 即可。 - -.. caution:: 生成完以后,请使用 git reset 功能将被覆盖的 `main.c` 和 `stm32xxx_it.c` 文件撤回,禁止被 cubemx 覆盖。 - -涵盖 F1/F4/H7,其余芯片基本类似,不再赘述,具体区别有: - -- usb ip 区别:F1使用 fsdev,F4/H7使用 dwc2 -- dwc2 ip 区别: USB0 (引脚是 PA11/PA12) 和 USB1 (引脚是 PB14/PB15), 其中 USB1 默认全速,可以接外部PHY 形成高速主机,并且带 dma 功能 -- F4 无cache,H7 有 cache - -如果是 STM32F7/STM32H7 这种带 cache 功能,需要将 usb 使用到的 ram 定位到 no cache ram 区域。举例如下 - -.. code-block:: C - - cpu_mpu_config(0, MPU_Normal_NonCache, 0x24070000, MPU_REGION_SIZE_64KB); - -对应 keil 中的 sct 脚本修改: - -.. code-block:: C - - LR_IROM1 0x08000000 0x00200000 { ; load region size_region - ER_IROM1 0x08000000 0x00200000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - RW_IRAM2 0x24000000 0x00070000 { ; RW data - .ANY (+RW +ZI) - } - USB_NOCACHERAM 0x24070000 0x00010000 { ; RW data - *(.noncacheable) - } - } - -USB Device 移植要点 -^^^^^^^^^^^^^^^^^^^^^^ - -- 使用 **stm32cubemx** 创建工程,配置基本的 RCC、UART (作为log使用) - -.. figure:: img/stm32_1.png -.. figure:: img/stm32_2.png - -- 如果使用 fsdev ip,勾选 **USB** 。如果使用 dwc2 ip,勾选 **USB_OTG_FS** 或者勾选 **USB_OTG_HS**。开启 USB 中断,其他配置对我们没用,代码中不会使用任何 st 的 usb 库。 - -.. figure:: img/stm32_3_1.png -.. figure:: img/stm32_3.png - -- 配置 usb clock 为 48M - -.. figure:: img/stm32_4_1.png -.. figure:: img/stm32_4.png - -- 选择好工程,这里我们选择 keil,设置好 stack 和 heap,如果使用 msc 可以推荐设置大点,然后点击 **Generate Code**。 - -.. figure:: img/stm32_5.png - -- 添加 CherryUSB 必须要的源码( **usbd_core.c** 、 **usb_dc_dwc2.c** 或者是 **usb_dc_fsdev.c** ),以及想要使用的 class 驱动,可以将对应的 class template 添加方便测试。 - -.. figure:: img/stm32_6.png - -- 头文件该加的加 - -.. figure:: img/stm32_7.png - -- 复制一份 **cherryusb_config_template.h**,放到 `Core/Inc` 目录下,并命名为 `usb_config.h` - -.. figure:: img/stm32_8.png - -- 如果使用 dwc2 ip,需要增加 **usb_glue_st.c** 文件,并在 `usb_config.h` 中实现以下宏: - -.. code-block:: C - - // 以下细节如有出入,请对照 stm32xxx.h 文件修改 - // 需要根据硬件实际的 fifo 深度进行修改,默认是最基础的配置 - #define CONFIG_USBDEV_EP_NUM 6 - #define CONFIG_USB_DWC2_RXALL_FIFO_SIZE (1012 - 16 * 6) - #define CONFIG_USB_DWC2_TX0_FIFO_SIZE (64 / 4) - #define CONFIG_USB_DWC2_TX1_FIFO_SIZE (64 / 4) - #define CONFIG_USB_DWC2_TX2_FIFO_SIZE (64 / 4) - #define CONFIG_USB_DWC2_TX3_FIFO_SIZE (64 / 4) - #define CONFIG_USB_DWC2_TX4_FIFO_SIZE (64 / 4) - #define CONFIG_USB_DWC2_TX5_FIFO_SIZE (64 / 4) - -- 如果使用 fsdev ip,在 `usb_config.h` 中实现以下宏: - -.. code-block:: C - - #define CONFIG_USBDEV_EP_NUM 8 - #define CONFIG_USBDEV_FSDEV_PMA_ACCESS 2 - -- 编译器推荐使用 **AC6**。勾选 **Microlib**,并实现 **printf** ,方便后续查看 log。 - -.. figure:: img/stm32_10.png -.. figure:: img/stm32_11.png - -- 拷贝 **xxx_msp.c** 中的 **HAL_PCD_MspInit** 函数中的内容到 **usb_dc_low_level_init** 函数中,屏蔽 st 生成的 usb 初始化 - -.. figure:: img/stm32_12.png -.. figure:: img/stm32_14.png - -- 在中断函数中调用 `USBD_IRQHandler`,并传入 `busid` - -.. figure:: img/stm32_13.png - -- 调用 template 的内容初始化,并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS` - -.. figure:: img/stm32_15.png - -USB Host 移植要点 -^^^^^^^^^^^^^^^^^^^^^^ - -前面 6 步与 Device 一样。需要注意,host 驱动只支持带 dma 的 hs port (引脚是 PB14/PB15),所以 fs port (引脚是 PA11/PA12)不做支持(没有 dma 你玩什么主机)。 - -- 添加 CherryUSB 必须要的源码( **usbh_core.c** 、 **usbh_hub.c** 、 **usb_hc_dwc2.c** 、以及 **osal** 目录下的适配层文件),以及想要使用的 class 驱动,并且可以将对应的 **usb host.c** 添加方便测试。 - -.. figure:: img/stm32_16.png - -- 编译器推荐使用 **AC6**。勾选 **Microlib**,并实现 **printf** ,方便后续查看 log。 - -.. figure:: img/stm32_10.png -.. figure:: img/stm32_11.png - -- 复制一份 **cherryusb_config_template.h**,放到 `Core/Inc` 目录下,并命名为 `usb_config.h` - -- 增加 **usb_glue_st.c** 文件,并在 `usb_config.h` 中实现以下宏: - -.. code-block:: C - - // 以下细节如有出入,请对照 stm32xxx.h 文件修改 - // 需要根据硬件实际的 fifo 深度进行修改,默认是最基础的配置 - #define CONFIG_USBHOST_PIPE_NUM 12 - #define CONFIG_USB_DWC2_NPTX_FIFO_SIZE (512 / 4) - #define CONFIG_USB_DWC2_PTX_FIFO_SIZE (1024 / 4) - #define CONFIG_USB_DWC2_RX_FIFO_SIZE ((1012 - CONFIG_USB_DWC2_NPTX_FIFO_SIZE - CONFIG_USB_DWC2_PTX_FIFO_SIZE) / 4) - -- 拷贝 **xxx_msp.c** 中的 `HAL_HCD_MspInit` 函数中的内容到 `usb_hc_low_level_init` 函数中,屏蔽 st 生成的 usb 初始化 -- 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid` -- 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` -- 启动线程 - -.. figure:: img/stm32_18.png -.. figure:: img/stm32_19.png - -- 如果使用 **msc**,并且带文件系统,需要自行添加文件系统文件了,对应的 porting 编写参考 **fatfs_usbh.c** 文件。 - -.. figure:: img/stm32_21.png - diff --git a/docs/source/quick_start/other_chip.rst b/docs/source/quick_start/other_chip.rst deleted file mode 100644 index 0f8e4b92..00000000 --- a/docs/source/quick_start/other_chip.rst +++ /dev/null @@ -1,121 +0,0 @@ -芯片通用移植指南 -========================= - -本节主要介绍所有带 USB IP 的芯片,移植 CherryUSB 主从协议栈时的通用步骤和注意事项。在移植之前,需要 **你准备好一个可以打印 helloworld 的基本工程** ,默认打印使用 `printf`, 如果是主机模式, **则需要准备好可以正常执行 os 调度的基本工程**。 - -USB Device 移植要点 ------------------------ - -- 拷贝 CherryUSB 源码到工程目录下,并按需添加源文件和头文件路径,其中 `usbd_core.c` 和 `usb_dc_xxx.c` 为必须添加项。而 `usb_dc_xxx.c` 是芯片所对应的 USB IP dcd 部分驱动,如果不知道自己芯片属于那个 USB IP,参考 **port** 目录下的不同 USB IP 的 readme。如果使用的 USB IP 没有支持,只能自己实现了 -- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径 -- 实现 `usb_dc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。 -- 描述符的注册、class的注册、接口的注册、端点中断的注册。不会的参考 demo 下的 template -- 调用 `usbd_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS` -- 在中断函数中调用 `USBD_IRQHandler`,并传入 `busid`, 如果你的 SDK 中中断入口已经存在 `USBD_IRQHandler` ,请更改 USB 协议栈中的名称 -- 编译使用。各个 class 如何使用,参考 demo 下的 template - -USB Host 移植要点 ------------------------ - -- 拷贝 CherryUSB 源码到工程目录下,并按需添加源文件和头文件路径,其中 `usbh_core.c` 、 `usb_hc_xxx.c` 以及 **osal** 目录下源文件(根据不同的 os 选择对应的源文件)为必须添加项。而 `usb_hc_xxx.c` 是芯片所对应的 USB IP hcd 部分驱动,如果不知道自己芯片属于那个 USB IP,参考 **port** 目录下的不同 USB IP 的 readme。如果使用的 USB IP 没有支持,只能自己实现了 -- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径 -- 实现 `usb_hc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。 -- 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` -- 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid`, 如果你的 SDK 中中断入口已经存在 `USBH_IRQHandler` ,请更改 USB 协议栈中的名称 -- 如果使用的是 GCC ,需要在链接脚本中添加如下代码(需要放在 flash 位置): - -.. code-block:: C - - // 在 ld 文件中添加如下代码 - . = ALIGN(4); - __usbh_class_info_start__ = .; - KEEP(*(.usbh_class_info)) - __usbh_class_info_end__ = .; - -GCC 举例如下: - -.. code-block:: C - - /* The program code and other data into "FLASH" Rom type memory */ - .text : - { - . = ALIGN(4); - *(.text) /* .text sections (code) */ - *(.text*) /* .text* sections (code) */ - *(.glue_7) /* glue arm to thumb code */ - *(.glue_7t) /* glue thumb to arm code */ - *(.eh_frame) - - KEEP (*(.init)) - KEEP (*(.fini)) - . = ALIGN(4); - __usbh_class_info_start__ = .; - KEEP(*(.usbh_class_info)) - __usbh_class_info_end__ = .; - . = ALIGN(4); - _etext = .; /* define a global symbols at end of code */ - } > FLASH - -- Segger Embedded Studio 举例如下: - -.. code-block:: C - - define block cherryusb_usbh_class_info { section .usbh_class_info }; - - define exported symbol __usbh_class_info_start__ = start of block cherryusb_usbh_class_info; - define exported symbol __usbh_class_info_end__ = end of block cherryusb_usbh_class_info + 1; - - place in AXI_SRAM { block cherryusb_usbh_class_info }; - keep { section .usbh_class_info}; - -- 编译使用。各个 class 如何使用,参考 demo 下的 `usb_host.c` 文件 - -带 cache 功能的芯片使用注意 -------------------------------- - -协议栈以及 port 中不会对 cache 区域的 ram 进行 clean 或者 invalid,所以需要使用一块非 cache 区域的 ram 来维护。 `USB_NOCACHE_RAM_SECTION` 宏表示将变量指定到非 cache ram上, -因此,用户需要在对应的链接脚本中添加 no cache ram 的 section。默认 `USB_NOCACHE_RAM_SECTION` 定义为 `__attribute__((section(".noncacheable")))`。 - -GCC: - -.. code-block:: C - - MEMORY - { - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 256K - 64K - RAM_nocache (xrw) : ORIGIN = 0x20030000, LENGTH = 64K - FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K - } - - ._nocache_ram : - { - . = ALIGN(4); - *(.noncacheable) - } >RAM_nocache - - -SCT: - -.. code-block:: C - - LR_IROM1 0x08000000 0x00200000 { ; load region size_region - ER_IROM1 0x08000000 0x00200000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - RW_IRAM2 0x24000000 0x00070000 { ; RW data - .ANY (+RW +ZI) - } - USB_NOCACHERAM 0x24070000 0x00010000 { ; RW data - *(.noncacheable) - } - } - -ICF: - -.. code-block:: C - - define region NONCACHEABLE_RAM = [from 0x1140000 size 256K]; - place in NONCACHEABLE_RAM { section .noncacheable, section .noncacheable.init, section .noncacheable.bss }; // Noncacheable diff --git a/docs/source/quick_start/rt-thread/img/env0.png b/docs/source/quick_start/rt-thread/img/env0.png deleted file mode 100644 index c0a8b03f..00000000 Binary files a/docs/source/quick_start/rt-thread/img/env0.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/env1.png b/docs/source/quick_start/rt-thread/img/env1.png deleted file mode 100644 index 2a68e052..00000000 Binary files a/docs/source/quick_start/rt-thread/img/env1.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/env2.png b/docs/source/quick_start/rt-thread/img/env2.png deleted file mode 100644 index ee37101a..00000000 Binary files a/docs/source/quick_start/rt-thread/img/env2.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/stm32_init.png b/docs/source/quick_start/rt-thread/img/stm32_init.png deleted file mode 100644 index 3ce57201..00000000 Binary files a/docs/source/quick_start/rt-thread/img/stm32_init.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/stm32_init2.png b/docs/source/quick_start/rt-thread/img/stm32_init2.png deleted file mode 100644 index eae3c026..00000000 Binary files a/docs/source/quick_start/rt-thread/img/stm32_init2.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/stm32cubemx0.png b/docs/source/quick_start/rt-thread/img/stm32cubemx0.png deleted file mode 100644 index 1ea33e04..00000000 Binary files a/docs/source/quick_start/rt-thread/img/stm32cubemx0.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/stm32cubemx1.png b/docs/source/quick_start/rt-thread/img/stm32cubemx1.png deleted file mode 100644 index a6ca5078..00000000 Binary files a/docs/source/quick_start/rt-thread/img/stm32cubemx1.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/stm32cubemx2.png b/docs/source/quick_start/rt-thread/img/stm32cubemx2.png deleted file mode 100644 index e29254bb..00000000 Binary files a/docs/source/quick_start/rt-thread/img/stm32cubemx2.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/img/stm32cubemx_clk.png b/docs/source/quick_start/rt-thread/img/stm32cubemx_clk.png deleted file mode 100644 index 41a7aae8..00000000 Binary files a/docs/source/quick_start/rt-thread/img/stm32cubemx_clk.png and /dev/null differ diff --git a/docs/source/quick_start/rt-thread/rtthread.rst b/docs/source/quick_start/rt-thread/rtthread.rst deleted file mode 100644 index a9303715..00000000 --- a/docs/source/quick_start/rt-thread/rtthread.rst +++ /dev/null @@ -1,119 +0,0 @@ -基于 RT-Thread 软件包开发指南 -=============================== - -本节主要介绍使用 RT-Thread 提供的软件包管理器来配置工程,以 env 作为演示。本节操作不同芯片都一样,后续不再重复讲解。打开 env 以后使用 menuconfig 进入包管理器,并在如图所示路径中选择 CherryUSB。 - -.. figure:: img/env0.png - -从机配置 --------------------------- - -* 选择 Enable usb device mode 并敲回车进入。 -* 首先第一个配置是配置 USB 的速度,分为 **FS、HS**,表示使用全速还是高速功能。高速功能要求内置高速 PHY 或者外接 PHY -* 其次第二个配置则是选择 USB device ip,不清楚自己芯片是哪个 ip 的可以参考 **port** 目录下对应的 readme。 -* 选择你想使用的 class -* 选择是否使用 demo 模板 - -.. figure:: img/env1.png - -* 最后退出保存即可。 -* 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径,并修改以下内容: - -.. code-block:: C - - #include "rtthread.h" - - #define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__) - -* USB IP 相关的 config 需要用户自己根据芯片实际情况修改 -* 退出以后不急着编译,需要在代码中实现 `usb_dc_low_level_init` 函数。 -* 调用 `usbd_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS` -* 以上内容我们推荐放在 **board.c** 中,如下代码: - -.. code-block:: C - - void OTG_HS_IRQHandler(void) - { - extern void USBD_IRQHandler(uint8_t busid); - USBD_IRQHandler(0); - } - - int usbd_init(void) - { - xxx_template_init(0, USB_OTG_HS_PERIPH_BASE); - return 0; - } - - INIT_APP_EXPORT(usbd_init); - -* 使用 `scons --target=mdk5` 或者 `scons` 进行编译,如果是mdk,需要使用 AC6 编译器 - -主机配置 --------------------------- - -* 选择 Enable usb host mode 并敲回车进入。 -* 选择 USB host ip,不清楚自己芯片是哪个 ip 的可以参考 **port** 目录下对应的 readme。 -* 根据需要勾选 class 驱动 -* 选择是否开启模板 demo,请注意, msc 禁止使能,因为默认对接到 dfs。 - -.. figure:: img/env2.png - -* 最后退出保存即可。 -* 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径,并实现以下内容: - -.. code-block:: C - - #include "rtthread.h" - - #define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__) - -* USB IP 相关的 config 需要用户自己根据芯片实际情况修改 -* 在代码中实现 `usb_hc_low_level_init` 函数 -* 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` -* 以上内容我们推荐放在 **board.c** 中,如下代码: - -.. code-block:: C - - void OTG_HS_IRQHandler(void) - { - extern void USBH_IRQHandler(uint8_t busid); - USBH_IRQHandler(0); - } - - int usbh_init(void) - { - usbh_initialize(0, USB_OTG_HS_PERIPH_BASE); - return 0; - } - - INIT_APP_EXPORT(usbh_init); - -* 使用 `scons --target=mdk5` 或者 `scons` 进行编译,如果是mdk,需要使用 AC6 编译器 -* 如果使用的是 GCC ,需要在链接脚本(ld)中添加如下代码: - -.. code-block:: C - - /* section information for usbh class */ - . = ALIGN(4); - __usbh_class_info_start__ = .; - KEEP(*(.usbh_class_info)) - __usbh_class_info_end__ = .; - - -借助 STM32CubeMX 生成 USB 初始化 ----------------------------------- - -使用 STM32CubeMX 主要是用来生成 usb 时钟、引脚、中断的配置。我们需要点击如图所示文件,并配置好 USB 的时钟、中断,点击 `Generate Code`。 - -.. figure:: img/stm32cubemx0.png -.. figure:: img/stm32cubemx1.png -.. figure:: img/stm32cubemx2.png -.. figure:: img/stm32cubemx_clk.png - -- 将 `main.c` 中的 `SystemClock_Config` 替换掉 `board.c` 中的配置 - -.. figure:: img/stm32_init2.png - -- 将 `stm32xxxx_hal_msp.c` 中的 `HAL_PCD_MspInit` 或者是 `HAL_HCD_MspInit` 中的内容复制到 `usb_dc_low_level_init` 和 `usb_hc_low_level_init` 函数中,举例如下: - -.. figure:: img/stm32_init.png diff --git a/docs/source/quick_start/rtthread.rst b/docs/source/quick_start/rtthread.rst new file mode 100644 index 00000000..062e6eab --- /dev/null +++ b/docs/source/quick_start/rtthread.rst @@ -0,0 +1,121 @@ +基于 RT-Thread 软件包开发指南 +=============================== + +.. note:: CherryUSB 已经加入 RT-Thread 主线,可以选择使用主线版本,配置方式相同。 + +本节主要介绍使用 RT-Thread 提供的软件包管理器来配置工程,以 env 作为演示。本节操作不同芯片都一样,后续不再重复讲解。打开 env 以后使用 menuconfig 进入包管理器,并在如图所示路径中选择 CherryUSB。 + +.. figure:: img/env0.png + +从机配置 +-------------------------- + +* 选择 Enable usb device mode 并敲回车进入。 +* 首先第一个配置是配置 USB 的速度,分为 **FS、HS**,表示使用全速还是高速功能。高速功能要求内置高速 PHY 或者外接 PHY +* 其次第二个配置则是选择 USB device ip,不清楚自己芯片是哪个 ip 的可以参考 **port** 目录下对应的 readme。 +* 选择你想使用的 class +* 选择是否使用 demo 模板 + +.. figure:: img/env1.png + +* 最后退出保存即可。 +* 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径,并修改以下内容: + +.. code-block:: C + + #include "rtthread.h" + + #define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__) + +* USB IP 相关的 config 需要用户自己根据芯片实际情况修改 +* 退出以后不急着编译,需要在代码中实现 `usb_dc_low_level_init` 函数。 +* 调用 `usbd_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS` +* 以上内容我们推荐放在 **board.c** 中,如下代码: + +.. code-block:: C + + void OTG_HS_IRQHandler(void) + { + extern void USBD_IRQHandler(uint8_t busid); + USBD_IRQHandler(0); + } + + int usbd_init(void) + { + xxx_template_init(0, USB_OTG_HS_PERIPH_BASE); + return 0; + } + + INIT_APP_EXPORT(usbd_init); + +* 使用 `scons --target=mdk5` 或者 `scons` 进行编译,如果是mdk,需要使用 AC6 编译器 + +主机配置 +-------------------------- + +* 选择 Enable usb host mode 并敲回车进入。 +* 选择 USB host ip,不清楚自己芯片是哪个 ip 的可以参考 **port** 目录下对应的 readme。 +* 根据需要勾选 class 驱动 +* 选择是否开启模板 demo,请注意, msc 禁止使能,因为默认对接到 dfs。 + +.. figure:: img/env2.png + +* 最后退出保存即可。 +* 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径,并实现以下内容: + +.. code-block:: C + + #include "rtthread.h" + + #define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__) + +* USB IP 相关的 config 需要用户自己根据芯片实际情况修改 +* 在代码中实现 `usb_hc_low_level_init` 函数 +* 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` +* 以上内容我们推荐放在 **board.c** 中,如下代码: + +.. code-block:: C + + void OTG_HS_IRQHandler(void) + { + extern void USBH_IRQHandler(uint8_t busid); + USBH_IRQHandler(0); + } + + int usbh_init(void) + { + usbh_initialize(0, USB_OTG_HS_PERIPH_BASE); + return 0; + } + + INIT_APP_EXPORT(usbh_init); + +* 使用 `scons --target=mdk5` 或者 `scons` 进行编译,如果是mdk,需要使用 AC6 编译器 +* 如果使用的是 GCC ,需要在链接脚本(ld)中添加如下代码: + +.. code-block:: C + + /* section information for usbh class */ + . = ALIGN(4); + __usbh_class_info_start__ = .; + KEEP(*(.usbh_class_info)) + __usbh_class_info_end__ = .; + + +借助 STM32CubeMX 生成 USB 初始化 +---------------------------------- + +使用 STM32CubeMX 主要是用来生成 usb 时钟、引脚、中断的配置。我们需要点击如图所示文件,并配置好 USB 的时钟、中断,点击 `Generate Code`。 + +.. figure:: img/stm32cubemx0.png +.. figure:: img/stm32cubemx1.png +.. figure:: img/stm32cubemx2.png +.. figure:: img/stm32cubemx_clk.png + +- 将 `main.c` 中的 `SystemClock_Config` 替换掉 `board.c` 中的配置 + +.. figure:: img/stm32_init2.png + +- 将 `stm32xxxx_hal_msp.c` 中的 `HAL_PCD_MspInit` 或者是 `HAL_HCD_MspInit` 中的内容复制到 `usb_dc_low_level_init` 和 `usb_hc_low_level_init` 函数中,举例如下: + +.. figure:: img/stm32_init.png diff --git a/docs/source/quick_start/transplant.rst b/docs/source/quick_start/transplant.rst new file mode 100644 index 00000000..0f8e4b92 --- /dev/null +++ b/docs/source/quick_start/transplant.rst @@ -0,0 +1,121 @@ +芯片通用移植指南 +========================= + +本节主要介绍所有带 USB IP 的芯片,移植 CherryUSB 主从协议栈时的通用步骤和注意事项。在移植之前,需要 **你准备好一个可以打印 helloworld 的基本工程** ,默认打印使用 `printf`, 如果是主机模式, **则需要准备好可以正常执行 os 调度的基本工程**。 + +USB Device 移植要点 +----------------------- + +- 拷贝 CherryUSB 源码到工程目录下,并按需添加源文件和头文件路径,其中 `usbd_core.c` 和 `usb_dc_xxx.c` 为必须添加项。而 `usb_dc_xxx.c` 是芯片所对应的 USB IP dcd 部分驱动,如果不知道自己芯片属于那个 USB IP,参考 **port** 目录下的不同 USB IP 的 readme。如果使用的 USB IP 没有支持,只能自己实现了 +- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径 +- 实现 `usb_dc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。 +- 描述符的注册、class的注册、接口的注册、端点中断的注册。不会的参考 demo 下的 template +- 调用 `usbd_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS` +- 在中断函数中调用 `USBD_IRQHandler`,并传入 `busid`, 如果你的 SDK 中中断入口已经存在 `USBD_IRQHandler` ,请更改 USB 协议栈中的名称 +- 编译使用。各个 class 如何使用,参考 demo 下的 template + +USB Host 移植要点 +----------------------- + +- 拷贝 CherryUSB 源码到工程目录下,并按需添加源文件和头文件路径,其中 `usbh_core.c` 、 `usb_hc_xxx.c` 以及 **osal** 目录下源文件(根据不同的 os 选择对应的源文件)为必须添加项。而 `usb_hc_xxx.c` 是芯片所对应的 USB IP hcd 部分驱动,如果不知道自己芯片属于那个 USB IP,参考 **port** 目录下的不同 USB IP 的 readme。如果使用的 USB IP 没有支持,只能自己实现了 +- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径 +- 实现 `usb_hc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。 +- 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` +- 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid`, 如果你的 SDK 中中断入口已经存在 `USBH_IRQHandler` ,请更改 USB 协议栈中的名称 +- 如果使用的是 GCC ,需要在链接脚本中添加如下代码(需要放在 flash 位置): + +.. code-block:: C + + // 在 ld 文件中添加如下代码 + . = ALIGN(4); + __usbh_class_info_start__ = .; + KEEP(*(.usbh_class_info)) + __usbh_class_info_end__ = .; + +GCC 举例如下: + +.. code-block:: C + + /* The program code and other data into "FLASH" Rom type memory */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + . = ALIGN(4); + __usbh_class_info_start__ = .; + KEEP(*(.usbh_class_info)) + __usbh_class_info_end__ = .; + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } > FLASH + +- Segger Embedded Studio 举例如下: + +.. code-block:: C + + define block cherryusb_usbh_class_info { section .usbh_class_info }; + + define exported symbol __usbh_class_info_start__ = start of block cherryusb_usbh_class_info; + define exported symbol __usbh_class_info_end__ = end of block cherryusb_usbh_class_info + 1; + + place in AXI_SRAM { block cherryusb_usbh_class_info }; + keep { section .usbh_class_info}; + +- 编译使用。各个 class 如何使用,参考 demo 下的 `usb_host.c` 文件 + +带 cache 功能的芯片使用注意 +------------------------------- + +协议栈以及 port 中不会对 cache 区域的 ram 进行 clean 或者 invalid,所以需要使用一块非 cache 区域的 ram 来维护。 `USB_NOCACHE_RAM_SECTION` 宏表示将变量指定到非 cache ram上, +因此,用户需要在对应的链接脚本中添加 no cache ram 的 section。默认 `USB_NOCACHE_RAM_SECTION` 定义为 `__attribute__((section(".noncacheable")))`。 + +GCC: + +.. code-block:: C + + MEMORY + { + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 256K - 64K + RAM_nocache (xrw) : ORIGIN = 0x20030000, LENGTH = 64K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K + } + + ._nocache_ram : + { + . = ALIGN(4); + *(.noncacheable) + } >RAM_nocache + + +SCT: + +.. code-block:: C + + LR_IROM1 0x08000000 0x00200000 { ; load region size_region + ER_IROM1 0x08000000 0x00200000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM2 0x24000000 0x00070000 { ; RW data + .ANY (+RW +ZI) + } + USB_NOCACHERAM 0x24070000 0x00010000 { ; RW data + *(.noncacheable) + } + } + +ICF: + +.. code-block:: C + + define region NONCACHEABLE_RAM = [from 0x1140000 size 256K]; + place in NONCACHEABLE_RAM { section .noncacheable, section .noncacheable.init, section .noncacheable.bss }; // Noncacheable diff --git a/docs/source/support/img/dwc2_hostuac.png b/docs/source/support/img/dwc2_hostuac.png new file mode 100644 index 00000000..6050f531 Binary files /dev/null and b/docs/source/support/img/dwc2_hostuac.png differ diff --git a/docs/source/support/index.rst b/docs/source/support/index.rst index da1d94c5..bee33756 100644 --- a/docs/source/support/index.rst +++ b/docs/source/support/index.rst @@ -12,6 +12,7 @@ .. figure:: img/dwc2_hostuvc1.png .. figure:: img/dwc2_hostuvc2.png +.. figure:: img/dwc2_hostuac.png - 主机 UVC & UAC 类 MUSB IP 中 ISO 驱动和 UAC/UVC 框架, MUSB 需要为 mentor 公司制定的标准 IP diff --git a/docs/source/usbip/cdns2.rst b/docs/source/usbip/cdns2.rst new file mode 100644 index 00000000..88afc8d2 --- /dev/null +++ b/docs/source/usbip/cdns2.rst @@ -0,0 +1,2 @@ +CDNS2 +=============== diff --git a/docs/source/usbip/cdns3.rst b/docs/source/usbip/cdns3.rst new file mode 100644 index 00000000..c2132d1a --- /dev/null +++ b/docs/source/usbip/cdns3.rst @@ -0,0 +1,2 @@ +CDNS3 +=============== diff --git a/docs/source/usbip/chipidea.rst b/docs/source/usbip/chipidea.rst new file mode 100644 index 00000000..57c46ec0 --- /dev/null +++ b/docs/source/usbip/chipidea.rst @@ -0,0 +1,2 @@ +CHIPIDEA +================= \ No newline at end of file diff --git a/docs/source/usbip/dwc2.rst b/docs/source/usbip/dwc2.rst new file mode 100644 index 00000000..6c5a8c08 --- /dev/null +++ b/docs/source/usbip/dwc2.rst @@ -0,0 +1,2 @@ +DWC2 +================= \ No newline at end of file diff --git a/docs/source/usbip/dwc3.rst b/docs/source/usbip/dwc3.rst new file mode 100644 index 00000000..746bbee6 --- /dev/null +++ b/docs/source/usbip/dwc3.rst @@ -0,0 +1,2 @@ +DWC3 +=============== diff --git a/docs/source/usbip/ehci.rst b/docs/source/usbip/ehci.rst new file mode 100644 index 00000000..637bbe69 --- /dev/null +++ b/docs/source/usbip/ehci.rst @@ -0,0 +1,2 @@ +EHCI +================= \ No newline at end of file diff --git a/docs/source/usbip/fotg210.rst b/docs/source/usbip/fotg210.rst new file mode 100644 index 00000000..f6e566a8 --- /dev/null +++ b/docs/source/usbip/fotg210.rst @@ -0,0 +1,2 @@ +FOTG210 +=============== diff --git a/docs/source/usbip/musb.rst b/docs/source/usbip/musb.rst new file mode 100644 index 00000000..597876c0 --- /dev/null +++ b/docs/source/usbip/musb.rst @@ -0,0 +1,2 @@ +MUSB +================= \ No newline at end of file diff --git a/docs/source/usbip/ohci.rst b/docs/source/usbip/ohci.rst new file mode 100644 index 00000000..8467233b --- /dev/null +++ b/docs/source/usbip/ohci.rst @@ -0,0 +1,2 @@ +OHCI +================= \ No newline at end of file diff --git a/docs/source/usbip/xhci.rst b/docs/source/usbip/xhci.rst new file mode 100644 index 00000000..0c16c2e2 --- /dev/null +++ b/docs/source/usbip/xhci.rst @@ -0,0 +1,2 @@ +XHCI +================= \ No newline at end of file -- cgit v1.3.1