From b19f70575a0aa4ed449f1e6ea737765bd724f3b3 Mon Sep 17 00:00:00 2001
From: sakumisu <1203593632@qq.com>
Date: Tue, 13 May 2025 23:15:48 +0800
Subject: [PATCH] feat: add nationstech support
Signed-off-by: sakumisu <1203593632@qq.com>
---
Kconfig | 4 +
Kconfig.rtt | 4 +
Kconfig.rttpkg | 4 +
README.md | 2 +
README_zh.md | 2 +
SConscript | 6 ++
docs/assets/nationstech.jpg | Bin 0 -> 12618 bytes
port/dwc2/README.md | 4 +
port/dwc2/usb_glue_nation.c | 187 ++++++++++++++++++++++++++++++++++++
9 files changed, 213 insertions(+)
create mode 100644 docs/assets/nationstech.jpg
create mode 100644 port/dwc2/usb_glue_nation.c
diff --git a/Kconfig b/Kconfig
index 811676a7..0084b833 100644
--- a/Kconfig
+++ b/Kconfig
@@ -40,6 +40,8 @@ if CHERRYUSB
bool "dwc2_at"
config CHERRYUSB_DEVICE_DWC2_HC
bool "dwc2_hc"
+ config CHERRYUSB_DEVICE_DWC2_NATION
+ bool "dwc2_nation"
config CHERRYUSB_DEVICE_DWC2_GD
bool "dwc2_gd"
config CHERRYUSB_DEVICE_DWC2_CUSTOM
@@ -199,6 +201,8 @@ if CHERRYUSB
bool "dwc2_kendryte"
config CHERRYUSB_HOST_DWC2_HC
bool "dwc2_hc"
+ config CHERRYUSB_HOST_DWC2_NATION
+ bool "dwc2_nation"
config CHERRYUSB_HOST_DWC2_CUSTOM
bool "dwc2_custom"
config CHERRYUSB_HOST_MUSB_ES
diff --git a/Kconfig.rtt b/Kconfig.rtt
index 75681edf..4c1586e2 100644
--- a/Kconfig.rtt
+++ b/Kconfig.rtt
@@ -40,6 +40,8 @@ if RT_USING_CHERRYUSB
bool "dwc2_at"
config RT_CHERRYUSB_DEVICE_DWC2_HC
bool "dwc2_hc"
+ config RT_CHERRYUSB_DEVICE_DWC2_NATION
+ bool "dwc2_nation"
config RT_CHERRYUSB_DEVICE_DWC2_GD
bool "dwc2_gd"
config RT_CHERRYUSB_DEVICE_DWC2_CUSTOM
@@ -203,6 +205,8 @@ if RT_USING_CHERRYUSB
bool "dwc2_kendryte"
config RT_CHERRYUSB_HOST_DWC2_HC
bool "dwc2_hc"
+ config RT_CHERRYUSB_HOST_DWC2_NATION
+ bool "dwc2_nation"
config RT_CHERRYUSB_HOST_DWC2_CUSTOM
bool "dwc2_custom"
config RT_CHERRYUSB_HOST_MUSB_ES
diff --git a/Kconfig.rttpkg b/Kconfig.rttpkg
index 74c99aae..2e328b85 100644
--- a/Kconfig.rttpkg
+++ b/Kconfig.rttpkg
@@ -41,6 +41,8 @@ if PKG_USING_CHERRYUSB
bool "dwc2_at"
config PKG_CHERRYUSB_DEVICE_DWC2_HC
bool "dwc2_hc"
+ config PKG_CHERRYUSB_DEVICE_DWC2_NATION
+ bool "dwc2_nation"
config PKG_CHERRYUSB_DEVICE_DWC2_GD
bool "dwc2_gd"
config PKG_CHERRYUSB_DEVICE_DWC2_CUSTOM
@@ -202,6 +204,8 @@ if PKG_USING_CHERRYUSB
bool "dwc2_kendryte"
config PKG_CHERRYUSB_HOST_DWC2_HC
bool "dwc2_hc"
+ config PKG_CHERRYUSB_HOST_DWC2_NATION
+ bool "dwc2_nation"
config PKG_CHERRYUSB_HOST_DWC2_CUSTOM
bool "dwc2_custom"
config PKG_CHERRYUSB_HOST_MUSB_ES
diff --git a/README.md b/README.md
index a7c85d2c..6c8ddfa7 100644
--- a/README.md
+++ b/README.md
@@ -194,6 +194,7 @@ TODO
|Espressif | esp32s2/esp32s3/esp32p4 | dwc2 |[esp32_repo](https://github.com/CherryUSB/cherryusb_esp32)|<= latest | Long-term |
|NXP | mcx | kinetis/chipidea/ehci |[nxp_mcx_repo](https://github.com/CherryUSB/cherryusb_mcx)|<= latest | Long-term |
|Kendryte | k230 | dwc2 |[k230_repo](https://github.com/CherryUSB/k230_sdk)|v1.2.0 | Long-term |
+|Nationstech | n32h4x | dwc2 |[nation_repo](https://github.com/CherryUSB/cherryusb_nation)|>=1.5.0 | Long-term |
|Raspberry pi | rp2040/rp2350 | rp2040 |[pico-examples](https://github.com/CherryUSB/pico-examples)|<= latest | Long-term |
|AllwinnerTech | F1C100S/F1C200S | musb |[cherryusb_rtt_f1c100s](https://github.com/CherryUSB/cherryusb_rtt_f1c100s)|<= latest | the same with musb |
|Bekencorp | bk7256/bk7258 | musb |[bk_idk](https://github.com/CherryUSB/bk_idk)| v0.7.0 | the same with musb |
@@ -221,3 +222,4 @@ CherryUSB discord: https://discord.com/invite/wFfvrSAey8.
Thanks to the following companies for their support (in no particular order):
+
diff --git a/README_zh.md b/README_zh.md
index 45554a53..4afcb995 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -194,6 +194,7 @@ TODO
|Espressif | esp32s2/esp32s3/esp32p4 | dwc2 |[esp32_repo](https://github.com/CherryUSB/cherryusb_esp32)|<= latest | Long-term |
|NXP | mcx | kinetis/chipidea/ehci |[nxp_mcx_repo](https://github.com/CherryUSB/cherryusb_mcx)|<= latest | Long-term |
|Kendryte | k230 | dwc2 |[k230_repo](https://github.com/CherryUSB/k230_sdk)|v1.2.0 | Long-term |
+|Nationstech | n32h4x | dwc2 |[nation_repo](https://github.com/CherryUSB/cherryusb_nation)|>=1.5.0 | Long-term |
|Raspberry pi | rp2040/rp2350 | rp2040 |[pico-examples](https://github.com/CherryUSB/pico-examples)|<= latest | Long-term |
|AllwinnerTech | F1C100S/F1C200S | musb |[cherryusb_rtt_f1c100s](https://github.com/CherryUSB/cherryusb_rtt_f1c100s)|<= latest | the same with musb |
|Bekencorp | bk7256/bk7258 | musb |[bk_idk](https://github.com/CherryUSB/bk_idk)| v0.7.0 | the same with musb |
@@ -223,3 +224,4 @@ CherryUSB 微信群:与我联系后邀请加入
感谢以下企业支持(顺序不分先后):
+
diff --git a/SConscript b/SConscript
index 602ba5fe..93730091 100644
--- a/SConscript
+++ b/SConscript
@@ -53,6 +53,9 @@ if GetDepend(['PKG_CHERRYUSB_DEVICE']):
if GetDepend(['PKG_CHERRYUSB_DEVICE_DWC2_HC']):
src += Glob('port/dwc2/usb_dc_dwc2.c')
src += Glob('port/dwc2/usb_glue_hc.c')
+ if GetDepend(['PKG_CHERRYUSB_DEVICE_DWC2_NATION']):
+ src += Glob('port/dwc2/usb_dc_dwc2.c')
+ src += Glob('port/dwc2/usb_glue_nation.c')
if GetDepend(['PKG_CHERRYUSB_DEVICE_DWC2_GD']):
src += Glob('port/dwc2/usb_dc_dwc2.c')
src += Glob('port/dwc2/usb_glue_gd.c')
@@ -197,6 +200,9 @@ if GetDepend(['PKG_CHERRYUSB_HOST']):
if GetDepend(['PKG_CHERRYUSB_HOST_DWC2_HC']):
src += Glob('port/dwc2/usb_hc_dwc2.c')
src += Glob('port/dwc2/usb_glue_hc.c')
+ if GetDepend(['PKG_CHERRYUSB_HOST_DWC2_NATION']):
+ src += Glob('port/dwc2/usb_hc_dwc2.c')
+ src += Glob('port/dwc2/usb_glue_nation.c')
if GetDepend(['PKG_CHERRYUSB_HOST_DWC2_CUSTOM']):
src += Glob('port/dwc2/usb_hc_dwc2.c')
if GetDepend(['PKG_CHERRYUSB_HOST_MUSB_STANDARD']):
diff --git a/docs/assets/nationstech.jpg b/docs/assets/nationstech.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2c48f6b97a2039e96a8b26586c1fb305a512c5e8
GIT binary patch
literal 12618
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 |= (uint32_t)0x01 << 19;
+ RCC->USBHSCTRL1 |= (uint32_t)0x01 << 31;
+}
+
+void usb_dc_low_level_deinit(uint8_t busid)
+{
+ NVIC_InitType NVIC_InitStructure;
+
+ NVIC_InitStructure.NVIC_IRQChannel = USB_HS_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
+ NVIC_Init(&NVIC_InitStructure);
+
+ RCC_EnableAHBPeriphReset(RCC_AHBPRST_USBHSPHYRST);
+ /* Enables the USBHS peripheral clock*/
+ RCC_EnableAHBPeriphClk(RCC_AHB_PERIPHEN_USBHS, DISABLE);
+}
+
+void usb_hc_low_level_init(struct usbh_bus *bus)
+{
+ g_usb_dwc2_irq = USBH_IRQHandler;
+ g_usb_dwc2_busid = 0;
+
+ usbhs_common_init();
+
+ RCC->USBHSCTRL2 &= ~(uint32_t)0x01 << 19;
+ RCC->USBHSCTRL1 |= (uint32_t)0x01 << 31;
+}
+
+void usb_hc_low_level_deinit(struct usbh_bus *bus)
+{
+ NVIC_InitType NVIC_InitStructure;
+
+ NVIC_InitStructure.NVIC_IRQChannel = USB_HS_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
+ NVIC_Init(&NVIC_InitStructure);
+
+ RCC_EnableAHBPeriphReset(RCC_AHBPRST_USBHSPHYRST);
+ /* Enables the USBHS peripheral clock*/
+ RCC_EnableAHBPeriphClk(RCC_AHB_PERIPHEN_USBHS, DISABLE);
+}
+
+uint32_t usbd_get_dwc2_gccfg_conf(uint32_t reg_base)
+{
+ return 0;
+}
+
+uint32_t usbh_get_dwc2_gccfg_conf(uint32_t reg_base)
+{
+ return 0;
+}
+
+void USB_HS_IRQHandler(void)
+{
+ g_usb_dwc2_irq(g_usb_dwc2_busid);
+}
+
+void usbd_dwc2_delay_ms(uint8_t ms)
+{
+
+}
+#endif