Skip to content

Commit 0f075b4

Browse files
committed
stm32/tinyusb: Add High Speed USB controller support.
Implements mapping from MICROPY_HW_USB_MAIN_DEV to TinyUSB RHPORT configuration, enabling board-specific USB PHY selection for TinyUSB stack. Adds support for HS-in-FS mode (High Speed controller running at Full Speed) which is the default for STM32 boards without external ULPI PHY. Includes additional TinyUSB source files for DWC2 host controller support. Signed-off-by: Andrew Leech <[email protected]>
1 parent 27b7bf3 commit 0f075b4

File tree

3 files changed

+114
-3
lines changed

3 files changed

+114
-3
lines changed

ports/stm32/mpconfigboard_common.h

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,3 +801,94 @@
801801
#ifndef MICROPY_HW_ETH_DMA_ATTRIBUTE
802802
#define MICROPY_HW_ETH_DMA_ATTRIBUTE __attribute__((aligned(16384)));
803803
#endif
804+
805+
// --------------------------------------------------------------------+
806+
// TinyUSB USB PHY Configuration
807+
// --------------------------------------------------------------------+
808+
809+
#if MICROPY_HW_TINYUSB_STACK
810+
811+
// Include TinyUSB option constants when TinyUSB stack is enabled
812+
#include "lib/tinyusb/src/tusb_option.h"
813+
814+
// Map MICROPY_HW_USB_MAIN_DEV to TinyUSB RHPORT and mode configuration
815+
// Note: USB_PHY_*_ID constants are defined in usb.h as enum values 0 and 1
816+
#if defined(MICROPY_HW_USB_MAIN_DEV)
817+
#if MICROPY_HW_USB_MAIN_DEV == (1)
818+
// Full Speed PHY selected
819+
#ifndef MICROPY_HW_TINYUSB_RHPORT
820+
#define MICROPY_HW_TINYUSB_RHPORT (0)
821+
#endif
822+
#ifndef MICROPY_HW_TINYUSB_RHPORT0_MODE
823+
#define MICROPY_HW_TINYUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED)
824+
#endif
825+
#elif MICROPY_HW_USB_MAIN_DEV == (USB_PHY_HS_ID)
826+
// High Speed PHY selected
827+
#if defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
828+
// These families have separate HS and FS controllers
829+
#ifndef MICROPY_HW_TINYUSB_RHPORT
830+
#define MICROPY_HW_TINYUSB_RHPORT (1)
831+
#endif
832+
// Default to HS-in-FS mode (Full Speed on HS controller)
833+
// TinyUSB will automatically use true HS if external ULPI PHY is detected
834+
#ifndef MICROPY_HW_TINYUSB_RHPORT1_MODE
835+
#ifndef MICROPY_HW_USB_HS_ULPI
836+
#define MICROPY_HW_TINYUSB_RHPORT1_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED)
837+
#else
838+
#define MICROPY_HW_TINYUSB_RHPORT1_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
839+
#endif
840+
#endif
841+
#else
842+
// Other families: HS PHY on same controller as FS
843+
#ifndef MICROPY_HW_TINYUSB_RHPORT
844+
#define MICROPY_HW_TINYUSB_RHPORT (0)
845+
#endif
846+
#ifndef MICROPY_HW_TINYUSB_RHPORT0_MODE
847+
#define MICROPY_HW_TINYUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED)
848+
#endif
849+
#endif
850+
#else
851+
#error "Unknown MICROPY_HW_USB_MAIN_DEV value"
852+
#endif
853+
#else
854+
// Auto-detection fallback: prefer HS if available, otherwise FS
855+
#if defined(MICROPY_HW_USB_HS)
856+
#if defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
857+
#ifndef MICROPY_HW_TINYUSB_RHPORT
858+
#define MICROPY_HW_TINYUSB_RHPORT (1)
859+
#endif
860+
// Default to HS-in-FS mode unless board explicitly defines ULPI PHY
861+
#ifndef MICROPY_HW_TINYUSB_RHPORT1_MODE
862+
#ifndef MICROPY_HW_USB_HS_ULPI
863+
#define MICROPY_HW_TINYUSB_RHPORT1_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED)
864+
#else
865+
#define MICROPY_HW_TINYUSB_RHPORT1_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
866+
#endif
867+
#endif
868+
#else
869+
#ifndef MICROPY_HW_TINYUSB_RHPORT
870+
#define MICROPY_HW_TINYUSB_RHPORT (0)
871+
#endif
872+
#ifndef MICROPY_HW_TINYUSB_RHPORT0_MODE
873+
#define MICROPY_HW_TINYUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED)
874+
#endif
875+
#endif
876+
#elif defined(MICROPY_HW_USB_FS)
877+
#ifndef MICROPY_HW_TINYUSB_RHPORT
878+
#define MICROPY_HW_TINYUSB_RHPORT (0)
879+
#endif
880+
#ifndef MICROPY_HW_TINYUSB_RHPORT0_MODE
881+
#define MICROPY_HW_TINYUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED)
882+
#endif
883+
#else
884+
// Default configuration for boards without explicit USB PHY definitions
885+
#ifndef MICROPY_HW_TINYUSB_RHPORT
886+
#define MICROPY_HW_TINYUSB_RHPORT (0)
887+
#endif
888+
#ifndef MICROPY_HW_TINYUSB_RHPORT0_MODE
889+
#define MICROPY_HW_TINYUSB_RHPORT0_MODE (OPT_MODE_DEVICE)
890+
#endif
891+
#endif
892+
#endif
893+
894+
#endif // MICROPY_HW_TINYUSB_STACK

ports/stm32/stm32_it.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ void OTG_FS_IRQHandler(void) {
372372
void USB1_OTG_HS_IRQHandler(void) {
373373
IRQ_ENTER(USB1_OTG_HS_IRQn);
374374
#if MICROPY_HW_TINYUSB_STACK
375-
tud_int_handler(0);
375+
tud_int_handler(1); // RHPORT 1 for HS controller
376376
#else
377377
HAL_PCD_IRQHandler(&pcd_hs_handle);
378378
#endif
@@ -382,7 +382,7 @@ void USB1_OTG_HS_IRQHandler(void) {
382382
void OTG_HS_IRQHandler(void) {
383383
IRQ_ENTER(OTG_HS_IRQn);
384384
#if MICROPY_HW_TINYUSB_STACK
385-
tud_int_handler(0);
385+
tud_int_handler(1); // RHPORT 1 for HS controller
386386
#else
387387
HAL_PCD_IRQHandler(&pcd_hs_handle);
388388
#endif

shared/tinyusb/tusb_config.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,24 @@
5959
#define MICROPY_HW_USB_MSC_INQUIRY_REVISION_STRING "1.00"
6060
#endif
6161

62+
// #define CFG_TUSB_RHPORT0_MODE (OPT_MODE_NONE)
63+
// #define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE)
64+
6265
#ifndef CFG_TUSB_RHPORT0_MODE
66+
#ifdef MICROPY_HW_TINYUSB_RHPORT0_MODE
67+
#define CFG_TUSB_RHPORT0_MODE MICROPY_HW_TINYUSB_RHPORT0_MODE
68+
#else
6369
#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE)
6470
#endif
71+
#endif
72+
73+
#ifndef CFG_TUSB_RHPORT1_MODE
74+
#ifdef MICROPY_HW_TINYUSB_RHPORT1_MODE
75+
#define CFG_TUSB_RHPORT1_MODE MICROPY_HW_TINYUSB_RHPORT1_MODE
76+
#else
77+
#define CFG_TUSB_RHPORT1_MODE (OPT_MODE_NONE)
78+
#endif
79+
#endif
6580

6681
#if MICROPY_HW_USB_CDC
6782
#define CFG_TUD_CDC (1)
@@ -94,7 +109,12 @@
94109
#define CFG_TUD_MSC_BUFSIZE (MICROPY_FATFS_MAX_SS)
95110
#endif
96111

97-
#define USBD_RHPORT (0) // Currently only one port is supported
112+
// Board-configurable RHPORT selection
113+
#ifndef MICROPY_HW_TINYUSB_RHPORT
114+
#define MICROPY_HW_TINYUSB_RHPORT (0) // Default to port 0
115+
#endif
116+
117+
#define USBD_RHPORT MICROPY_HW_TINYUSB_RHPORT
98118

99119
// Define built-in interface, string and endpoint numbering based on the above config
100120

0 commit comments

Comments
 (0)