summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2025-04-25 21:07:36 +0800
committersakumisu <[email protected]>2025-04-25 21:10:34 +0800
commit95d968bd57336d0f44e32db94529e2fabe3b2f92 (patch)
treecabfb4cec6edb87d1f739857294846ddc9bebec7
parent4edd86c8724eddb1921ecb3a3382f4cf14451a47 (diff)
feat(port/fsdev/usb_glue_st): implement low level api
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--Kconfig6
-rw-r--r--SConscript5
-rw-r--r--docs/source/quick_start/demo.rst4
-rw-r--r--port/fsdev/usb_glue_st.c66
4 files changed, 76 insertions, 5 deletions
diff --git a/Kconfig b/Kconfig
index 4ba2250c..0d20e212 100644
--- a/Kconfig
+++ b/Kconfig
@@ -26,8 +26,10 @@ if CHERRYUSB
default CHERRYUSB_DEVICE_CUSTOM
config CHERRYUSB_DEVICE_CUSTOM
bool "CUSTOM (Implement it yourself)"
- config CHERRYUSB_DEVICE_FSDEV
- bool "fsdev"
+ config CHERRYUSB_DEVICE_FSDEV_ST
+ bool "fsdev_st"
+ config CHERRYUSB_DEVICE_FSDEV_CUSTOM
+ bool "fsdev_custom"
config CHERRYUSB_DEVICE_DWC2_ST
bool "dwc2_st"
config CHERRYUSB_DEVICE_DWC2_ESP
diff --git a/SConscript b/SConscript
index 01818c25..071196df 100644
--- a/SConscript
+++ b/SConscript
@@ -33,7 +33,10 @@ if GetDepend(['PKG_CHERRYUSB_DEVICE']):
if GetDepend(['PKG_CHERRYUSB_DEVICE_HS']):
CPPDEFINES+=['CONFIG_USB_HS']
- if GetDepend(['PKG_CHERRYUSB_DEVICE_FSDEV']):
+ if GetDepend(['PKG_CHERRYUSB_DEVICE_FSDEV_ST']):
+ src += Glob('port/fsdev/usb_dc_fsdev.c')
+ src += Glob('port/fsdev/usb_glue_st.c')
+ if GetDepend(['PKG_CHERRYUSB_DEVICE_FSDEV_CUSTOM']):
src += Glob('port/fsdev/usb_dc_fsdev.c')
if GetDepend(['PKG_CHERRYUSB_DEVICE_DWC2_ST']):
src += Glob('port/dwc2/usb_dc_dwc2.c')
diff --git a/docs/source/quick_start/demo.rst b/docs/source/quick_start/demo.rst
index 2d2d9137..784f6cbe 100644
--- a/docs/source/quick_start/demo.rst
+++ b/docs/source/quick_start/demo.rst
@@ -166,7 +166,7 @@ USB Device 移植要点
.. figure:: img/stm32_10.png
.. figure:: img/stm32_11.png
-.. note :: 如果使用的是 dwc2,以下两个步骤从 V1.4.4 开始不再需要,**usb_glue_st.c** 文件中已经实现
+.. note :: 以下两个步骤从 V1.4.4 开始不再需要,**fsdev/usb_glue_st.c**, **dwc2/usb_glue_st.c** 文件中已经实现
- 拷贝 **xxx_msp.c** 中的 **HAL_PCD_MspInit** 函数中的内容到 **usb_dc_low_level_init** 函数中,屏蔽 st 生成的 usb 初始化
@@ -208,7 +208,7 @@ USB Host 移植要点
#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)
-.. note :: 如果使用的是 dwc2,以下两个步骤从 V1.4.4 开始不再需要,**usb_glue_st.c** 文件中已经实现
+.. note :: 以下两个步骤从 V1.4.4 开始不再需要,**fsdev/usb_glue_st.c**, **dwc2/usb_glue_st.c** 文件中已经实现
- 拷贝 **xxx_msp.c** 中的 `HAL_HCD_MspInit` 函数中的内容到 `usb_hc_low_level_init` 函数中,屏蔽 st 生成的 usb 初始化
- 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid`
diff --git a/port/fsdev/usb_glue_st.c b/port/fsdev/usb_glue_st.c
new file mode 100644
index 00000000..70a98acb
--- /dev/null
+++ b/port/fsdev/usb_glue_st.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2025, sakumisu
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#include "usbd_core.h"
+
+#if __has_include("stm32f0xx_hal.h")
+#include "stm32f0xx_hal.h"
+#elif __has_include("stm32f1xx_hal.h")
+#include "stm32f1xx_hal.h"
+#elif __has_include("stm32f3xx_hal.h")
+#include "stm32f3xx_hal.h"
+#elif __has_include("stm32g0xx_hal.h")
+#include "stm32g0xx_hal.h"
+#elif __has_include("stm32g4xx_hal.h")
+#include "stm32g4xx_hal.h"
+#elif __has_include("stm32l0xx_hal.h")
+#include "stm32l0xx_hal.h"
+#elif __has_include("stm32l1xx_hal.h")
+#include "stm32l1xx_hal.h"
+#elif __has_include("stm32l4xx_hal.h")
+#include "stm32l4xx_hal.h"
+#elif __has_include("stm32l5xx_hal.h")
+#include "stm32l5xx_hal.h"
+#endif
+
+#if !defined(HAL_PCD_MODULE_ENABLED)
+#error please define HAL_PCD_MODULE_ENABLED in stm32xxx_hal_conf.h
+#endif
+
+#ifndef CONFIG_USBDEV_FSDEV_PMA_ACCESS
+#error "please define CONFIG_USBDEV_FSDEV_PMA_ACCESS in usb_config.h"
+#endif
+
+#if CONFIG_USBDEV_FSDEV_PMA_ACCESS != PMA_ACCESS
+#error "CONFIG_USBDEV_FSDEV_PMA_ACCESS must be equal PMA_ACCESS"
+#endif
+
+struct fsdev_instance {
+ USB_TypeDef *Instance;
+};
+
+static struct fsdev_instance g_fsdev_instance;
+
+void usb_dc_low_level_init(uint8_t busid)
+{
+ g_fsdev_instance.Instance = (USB_TypeDef *)g_usbdev_bus[busid].reg_base;
+ HAL_PCD_MspInit((PCD_HandleTypeDef *)&g_fsdev_instance);
+}
+
+void usb_dc_low_level_deinit(uint8_t busid)
+{
+ g_fsdev_instance.Instance = (USB_TypeDef *)g_usbdev_bus[busid].reg_base;
+ HAL_PCD_MspDeInit((PCD_HandleTypeDef *)&g_fsdev_instance);
+}
+
+void USB_IRQHandler(void)
+{
+ USBD_IRQHandler(0);
+}
+
+void USB_LP_IRQHandler(void)
+{
+ USBD_IRQHandler(0);
+} \ No newline at end of file