diff --git a/_images/stm32_3.png b/_images/stm32_3_2.png similarity index 100% rename from _images/stm32_3.png rename to _images/stm32_3_2.png diff --git a/_images/stm32_4.png b/_images/stm32_4_2.png similarity index 100% rename from _images/stm32_4.png rename to _images/stm32_4_2.png diff --git a/_images/usbhost_uvc1.gif b/_images/usbhost_uvc1.gif new file mode 100644 index 00000000..c4df04e0 Binary files /dev/null and b/_images/usbhost_uvc1.gif differ diff --git a/_sources/opensource.rst.txt b/_sources/opensource.rst.txt index 321fa4f6..7990538e 100644 --- a/_sources/opensource.rst.txt +++ b/_sources/opensource.rst.txt @@ -56,3 +56,7 @@ Klipper is a 3d-printer firmware. 适配链接:待开放 +MAKCU/KMBOX +-------------- + +懂的都懂,不开放 \ No newline at end of file diff --git a/_sources/q&a.rst.txt b/_sources/q&a.rst.txt index b5c08462..ae41d312 100644 --- a/_sources/q&a.rst.txt +++ b/_sources/q&a.rst.txt @@ -11,11 +11,11 @@ Q & A 提问中请包含以下信息: - 使用的板子,引脚,USB IP -- USB 中断,时钟,引脚,寄存器地址是否正确,截图 +- 是否配置 USB 中断,USB 时钟,USB 引脚,USB phy 配置,以及 USB 寄存器地址是否正确,截图 - 是否能进 USB 中断 - 芯片是否带有 cache功能,是否做了 no cache 处理,截图 - 硬件是否正常,是否使用杜邦线连接,如果正常,请说明正常原因 -- 配置 **#define CONFIG_USB_DBG_LEVEL USB_DBG_LOG** 并提供 log,仅限商业 IP, 其余 IP 禁止开启 log,否则无法枚举 +- 如果能进中断,配置 **#define CONFIG_USB_DBG_LEVEL USB_DBG_LOG** 并提供 log,仅限商业 IP, 其余 IP 禁止开启 log,否则无法枚举 - 是否流片并销售 其余问题提问模板 diff --git a/_sources/quick_start/demo.rst.txt b/_sources/quick_start/demo.rst.txt index 3ad3ca72..3c330e46 100644 --- a/_sources/quick_start/demo.rst.txt +++ b/_sources/quick_start/demo.rst.txt @@ -116,12 +116,12 @@ USB Device 移植要点 - 如果使用 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 +.. figure:: img/stm32_3_2.png - 配置 usb clock 为 48M .. figure:: img/stm32_4_1.png -.. figure:: img/stm32_4.png +.. figure:: img/stm32_4_2.png - 选择好工程,这里我们选择 keil,设置好 stack 和 heap,如果使用 msc 可以推荐设置大点,然后点击 **Generate Code**。 @@ -214,10 +214,12 @@ USB Host 移植要点 - 拷贝 **xxx_msp.c** 中的 `HAL_HCD_MspInit` 函数中的内容到 `usb_hc_low_level_init` 函数中,屏蔽 st 生成的 usb 初始化 - 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid` + +.. figure:: img/stm32_19.png + - 链接脚本修改参考 :ref:`usbh_link_script` 章节 - 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节 - 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` - 启动线程 .. figure:: img/stm32_18.png -.. figure:: img/stm32_19.png diff --git a/_sources/quick_start/transplant.rst.txt b/_sources/quick_start/transplant.rst.txt index 1b401d15..a6dcf14e 100644 --- a/_sources/quick_start/transplant.rst.txt +++ b/_sources/quick_start/transplant.rst.txt @@ -6,26 +6,24 @@ 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 源码到工程目录下,并按需添加源文件和头文件路径,头文件路径建议全部添加。其中 `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 协议栈中的名称 - 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节 -- 编译使用。各个 class 如何使用,参考 demo 下的 template +- 注册描述符并调用 `usbd_initialize`,填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS`,可以直接使用 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 源码到工程目录下,并按需添加源文件和头文件路径,头文件路径建议全部添加。其中 `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 协议栈中的名称 - 链接脚本修改参考 :ref:`usbh_link_script` 章节 - 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节 -- 编译使用。基础的 cdc + hid + msc 参考 `usb_host.c` 文件,其余参考 **platform** 目录下适配 +- 调用 `usbh_initialize` ,填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS` 。基础的 cdc + hid + msc 参考 `usb_host.c` 文件,其余参考 **platform** 目录下适配 .. _usbh_link_script: diff --git a/_sources/support/index.rst.txt b/_sources/support/index.rst.txt index 74a50ee1..e30c4bb0 100644 --- a/_sources/support/index.rst.txt +++ b/_sources/support/index.rst.txt @@ -7,19 +7,23 @@ .. figure:: img/ohci.png -- 主机 UVC & UAC 类 EHCI IP 中 ISO 驱动和 UAC/UVC 框架,iso 支持最多一个微帧 3 包 +- EHCI IP 中 ISO 驱动和 UAC/UVC 框架,搭配主机 UVC & UAC 类(这部分是开源的)使用。iso 支持一个微帧 1/2/3 包,支持 MJPEG 和 YUV 摄像头 .. figure:: img/ehci_hostuvc1.png .. figure:: img/ehci_hostuvc2.png -- 主机 UVC & UAC 类 DWC2 IP 中 ISO 驱动和 UAC/UVC 框架,iso 支持最多一个微帧 3 包 +演示 USB Host UVC 驱动 648 * 480 YUV 摄像头。FPS 30。 + +.. figure:: img/usbhost_uvc.gif + +- DWC2 IP 中 ISO 驱动和 UAC/UVC 框架,搭配主机 UVC & UAC 类(这部分是开源的)使用。iso 支持一个微帧 1/2/3 包,支持 MJPEG 和 YUV 摄像头 .. figure:: img/dwc2_hostuvc1.png .. figure:: img/dwc2_hostuvc2.png .. figure:: img/dwc2_hostuvc3.png .. figure:: img/dwc2_hostuac.png -- 主机 UVC & UAC 类 MUSB IP 中 ISO 驱动和 UAC/UVC 框架, MUSB 需要为 mentor 公司制定的标准 IP +- MUSB IP 中 ISO 驱动和 UAC/UVC 框架,搭配主机 UVC & UAC 类(这部分是开源的)使用。MUSB 需要为 mentor 公司制定的标准 IP - 从机 MTP 类驱动, 支持多文件和多文件夹,支持 MCU 端增删文件并与 PC 同步 @@ -35,5 +39,5 @@ .. figure:: img/rndistx.png .. figure:: img/rndisrx.png -- 定制化 class 驱动或者 IP 驱动 +- 定制化 class 驱动或者 IP 驱动适配 - 技术支持相关 \ No newline at end of file diff --git a/opensource.html b/opensource.html index 4fe838e3..82eb1488 100644 --- a/opensource.html +++ b/opensource.html @@ -60,6 +60,7 @@
Klipper is a 3d-printer firmware.
适配链接:待开放
+懂的都懂,不开放
+提问中请包含以下信息:
使用的板子,引脚,USB IP
USB 中断,时钟,引脚,寄存器地址是否正确,截图
是否配置 USB 中断,USB 时钟,USB 引脚,USB phy 配置,以及 USB 寄存器地址是否正确,截图
是否能进 USB 中断
芯片是否带有 cache功能,是否做了 no cache 处理,截图
硬件是否正常,是否使用杜邦线连接,如果正常,请说明正常原因
配置 #define CONFIG_USB_DBG_LEVEL USB_DBG_LOG 并提供 log,仅限商业 IP, 其余 IP 禁止开启 log,否则无法枚举
如果能进中断,配置 #define CONFIG_USB_DBG_LEVEL USB_DBG_LOG 并提供 log,仅限商业 IP, 其余 IP 禁止开启 log,否则无法枚举
是否流片并销售
+
配置 usb clock 为 48M
+
选择好工程,这里我们选择 keil,设置好 stack 和 heap,如果使用 msc 可以推荐设置大点,然后点击 Generate Code。
拷贝 xxx_msp.c 中的 HAL_HCD_MspInit 函数中的内容到 usb_hc_low_level_init 函数中,屏蔽 st 生成的 usb 初始化
在中断函数中调用 USBH_IRQHandler,并传入 busid
+链接脚本修改参考 主机链接脚本修改 章节
如果芯片带 cache,cache 修改参考 cache 配置修改 章节
调用 usbh_initialize 并填入 busid 和 USB IP 的 reg base, busid 从 0 开始,不能超过 CONFIG_USBHOST_MAX_BUS
-拷贝 CherryUSB 源码到工程目录下,并按需添加源文件和头文件路径,其中 usbd_core.c 和 usb_dc_xxx.c 为必须添加项。而 usb_dc_xxx.c 是芯片所对应的 USB IP dcd 部分驱动,如果不知道自己芯片属于那个 USB IP,参考 port 目录下的不同 USB IP 的 readme。如果使用的 USB IP 没有支持,只能自己实现了
拷贝 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 协议栈中的名称
如果芯片带 cache,cache 修改参考 cache 配置修改 章节
编译使用。各个 class 如何使用,参考 demo 下的 template
注册描述符并调用 usbd_initialize,填入 busid 和 USB IP 的 reg base, busid 从 0 开始,不能超过 CONFIG_USBDEV_MAX_BUS,可以直接使用 demo 下的 template
拷贝 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 源码到工程目录下,并按需添加源文件和头文件路径,头文件路径建议全部添加。其中 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 协议栈中的名称
链接脚本修改参考 主机链接脚本修改 章节
如果芯片带 cache,cache 修改参考 cache 配置修改 章节
编译使用。基础的 cdc + hid + msc 参考 usb_host.c 文件,其余参考 platform 目录下适配
调用 usbh_initialize ,填入 busid 和 USB IP 的 reg base, busid 从 0 开始,不能超过 CONFIG_USBHOST_MAX_BUS 。基础的 cdc + hid + msc 参考 usb_host.c 文件,其余参考 platform 目录下适配
主机 UVC & UAC 类 EHCI IP 中 ISO 驱动和 UAC/UVC 框架,iso 支持最多一个微帧 3 包
EHCI IP 中 ISO 驱动和 UAC/UVC 框架,搭配主机 UVC & UAC 类(这部分是开源的)使用。iso 支持一个微帧 1/2/3 包,支持 MJPEG 和 YUV 摄像头
@@ -174,8 +174,12 @@
演示 USB Host UVC 驱动 648 * 480 YUV 摄像头。FPS 30。
+
+主机 UVC & UAC 类 DWC2 IP 中 ISO 驱动和 UAC/UVC 框架,iso 支持最多一个微帧 3 包
DWC2 IP 中 ISO 驱动和 UAC/UVC 框架,搭配主机 UVC & UAC 类(这部分是开源的)使用。iso 支持一个微帧 1/2/3 包,支持 MJPEG 和 YUV 摄像头
@@ -190,7 +194,7 @@
主机 UVC & UAC 类 MUSB IP 中 ISO 驱动和 UAC/UVC 框架, MUSB 需要为 mentor 公司制定的标准 IP
MUSB IP 中 ISO 驱动和 UAC/UVC 框架,搭配主机 UVC & UAC 类(这部分是开源的)使用。MUSB 需要为 mentor 公司制定的标准 IP
从机 MTP 类驱动, 支持多文件和多文件夹,支持 MCU 端增删文件并与 PC 同步
定制化 class 驱动或者 IP 驱动
定制化 class 驱动或者 IP 驱动适配
技术支持相关