From 9cd88c0ca315f1956ea2c808ebf1284cd6162c87 Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Sun, 26 Nov 2023 23:06:04 +0800 Subject: [PATCH] update dwc2 rst --- docs/source/porting_usbip.rst | 24 ++++++++++++++++++++---- docs/source/quick_start/index.rst | 12 ++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/docs/source/porting_usbip.rst b/docs/source/porting_usbip.rst index 3c7b721c..401cb4b1 100644 --- a/docs/source/porting_usbip.rst +++ b/docs/source/porting_usbip.rst @@ -48,6 +48,22 @@ FSDEV 仅支持从机。这个 ip 不同厂家基本都是基于标准的 usb - 同上 - 1 +fsdev 需要外置 dp 上拉才能使用,有些芯片可能是接上拉电阻,有些芯片可能是设置寄存器,举例如下: + +.. code-block:: C + + USB->BCDR |= (uint16_t)USB_BCDR_DPPU; + +如果不存在 BCDR 寄存器,则一般是配置如下,并且该设置需要配置到 `usb_dc_low_level_init` 中或者 `usb_dc_init` 最后都行: + +.. code-block:: C + + /* Pull up controller register */ + #define DP_CTRL ((__IO unsigned*)(0x40001820)) + + #define _EnPortPullup() (*DP_CTRL = (*DP_CTRL) | 0x10000000); + #define _DisPortPullup() (*DP_CTRL = (*DP_CTRL) & 0xEFFFFFFF); + MUSB -------------------------- @@ -153,11 +169,11 @@ MUSB IP 支持主从,并且由 **mentor** 定义了一套标准的寄存器偏 DWC2 -------------------------- -DWC2 IP 支持主从,并且由 **synopsys** 定义了一套标准的寄存器偏移。大部分厂家都使用标准的寄存器偏移,所以如果是从机仅需要修改 `USBD_IRQHandler` 、 `USB_BASE` 、 `USB_NUM_BIDIR_ENDPOINTS` ,主机仅需要修改 `USBH_IRQHandler` 、 `USB_BASE` 即可。 +DWC2 IP 支持主从,并且由 **synopsys** 定义了一套标准的寄存器偏移。大部分厂家都使用标准的寄存器偏移(除了 GCCFG(GGPIO)寄存器),所以如果是从机仅需要修改 `USBD_IRQHandler` 、 `USB_BASE` 、 `USB_NUM_BIDIR_ENDPOINTS` ,主机仅需要修改 `USBH_IRQHandler` 、 `USB_BASE` 即可。 -其次还有需要注意 VBUS SENSING 这个项,也会影响 USB 的正常枚举,如何修改参考 `GD32 dwc2驱动的GCCFG_NOVBUSSENS寄存器兼容性和stm32存在区别 `_。 +.. note:: GCCFG(GGPIO) 根据不同的厂家设置不同,会影响 usb 枚举,需要根据厂家提供的手册进行配置,并实现 usbd_get_dwc2_gccfg_conf 和 usbh_get_dwc2_gccfg_conf 函数,填充相应需要使能的bit -.. caution:: 主机 port 仅支持有高速功能的 dwc2 ip, 因为他支持 dma 模式,如果厂家买的 ip 不支持 dma 模式,则无法使用。 +.. caution:: 主机 port 仅支持有 dma 功能的 dwc2 ip(代码中会判断当前 ip 是否支持), 如果不支持 dma 模式,则无法使用。 下表为具体芯片从机相关宏的修改值: @@ -213,4 +229,4 @@ EHCI 是 intel 制定的标准主机控制器接口,任何厂家都必须实 //是否使能 port power bit #define CONFIG_USB_EHCI_PORT_POWER -同时由于 EHCI 只是主机控制器,一般配合一个 device 控制器+ otg 控制器,而速度的获取一般是在 otg 寄存器中,所以需要用户实现 `usbh_get_port_speed` 函数。 \ No newline at end of file +同时由于 EHCI 只是主机控制器并且只支持高速,一般配合一个 otg 控制器和一个低速全速兼容控制单元,而速度的获取一般是在 otg 寄存器中,所以需要用户实现 `usbh_get_port_speed` 函数。 \ No newline at end of file diff --git a/docs/source/quick_start/index.rst b/docs/source/quick_start/index.rst index b0223c6b..5d863856 100644 --- a/docs/source/quick_start/index.rst +++ b/docs/source/quick_start/index.rst @@ -23,8 +23,8 @@ 默认提供以下 demo 工程: - F103 使用 fsdev ip -- F429 主从使用 hs port,并且均用 dma 模式 -- H7 设备使用 fs port,主机使用 hs port,并且主机带 cache 支持 +- F429 主从使用 hs port(引脚 pb14/pb15),并且均用 dma 模式 +- H7 设备使用 fs port(引脚 pa11/pa12),主机使用 hs port(引脚 pb14/pb15),并且需要做 nocache 处理 默认删除 Drivers ,所以需要使用 stm32cubemx 生成一下 Drivers 目录下的文件,demo 底下提供了 **stm32xxx.ioc** 文件,双击打开,点击 **Generate Code** 即可。 @@ -34,7 +34,8 @@ - usb ip 区别:F1使用 fsdev,F4/H7使用 dwc2 - dwc2 ip 区别: fs port(引脚是 PA11/PA12) 和 hs port(引脚是 PB14/PB15), 其中 hs port 默认全速,可以接外部PHY 形成高速主机,并且带 dma 功能 -- F4 与 H7 cache 区别、USB BASE 区别 +- F4 无cache,H7 有 cache +- H7 的 USB_BASE 与其他系列有区别,需要在 usb_config.h 中配置 如果是 STM32F7/STM32H7 这种带 cache 功能,需要将 usb 使用到的 ram 定位到 no cache ram 区域。举例如下 @@ -61,9 +62,6 @@ } } - -.. caution :: 如果使用 STM32F7 或者 STM32H7, 请在 CFLAG 中添加 STM32F7 或者 STM32H7 宏定义,否则无法枚举 - .. figure:: img/keil.png USB Device 移植要点 @@ -79,6 +77,8 @@ USB Device 移植要点 .. figure:: img/stm32_3_1.png .. figure:: img/stm32_3.png +.. caution :: 如果使用 STM32H7 FS PORT, 请修改 USB_BASE 为 0x40080000UL + - 配置 usb clock 为 48M .. figure:: img/stm32_4_1.png