This is an automated email from the ASF dual-hosted git repository. btashton pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 87d8e5dda20990c8aad24fe80364a2602ce81cf8 Author: Brennan Ashton <bash...@brennanashton.com> AuthorDate: Sat Nov 21 13:16:59 2020 -0800 board: nucleo-h743zi USB Host fixups --- arch/arm/src/stm32f7/stm32_otg.h | 39 +++++++-------- arch/arm/src/stm32h7/stm32_otg.h | 42 ++++++++-------- arch/arm/src/stm32h7/stm32_otghost.c | 4 +- boards/arm/stm32h7/nucleo-h743zi/Kconfig | 17 +++++++ .../nucleo-h743zi/configs/otg_fs_host/defconfig | 4 +- .../arm/stm32h7/nucleo-h743zi/src/nucleo-h743zi.h | 57 ++++++++++++++++++++-- .../arm/stm32h7/nucleo-h743zi/src/stm32_bringup.c | 6 +-- boards/arm/stm32h7/nucleo-h743zi/src/stm32_usb.c | 6 +++ 8 files changed, 122 insertions(+), 53 deletions(-) diff --git a/arch/arm/src/stm32f7/stm32_otg.h b/arch/arm/src/stm32f7/stm32_otg.h index 90672ae..0ddd843 100644 --- a/arch/arm/src/stm32f7/stm32_otg.h +++ b/arch/arm/src/stm32f7/stm32_otg.h @@ -1,4 +1,4 @@ -/************************************************************************************ +/**************************************************************************** * arch/arm/src/stm32f7/stm32_otg.h * * Copyright (C) 2012-2013, 2016 Gregory Nutt. All rights reserved. @@ -31,14 +31,14 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - ************************************************************************************/ + ****************************************************************************/ #ifndef __ARCH_ARM_SRC_STM32F7_STM32_OTG_H #define __ARCH_ARM_SRC_STM32F7_STM32_OTG_H -/************************************************************************************ +/**************************************************************************** * Included Files - ************************************************************************************/ + ****************************************************************************/ #include <nuttx/config.h> @@ -49,11 +49,11 @@ #if defined(CONFIG_STM32F7_OTGFS) || defined(CONFIG_STM32F7_OTGFSHS) -/************************************************************************************ +/**************************************************************************** * Pre-processor Definitions - ************************************************************************************/ + ****************************************************************************/ -/* Configuration ********************************************************************/ +/* Configuration ************************************************************/ #ifndef CONFIG_OTG_PRI # define CONFIG_OTG_PRI NVIC_SYSH_PRIORITY_DEFAULT @@ -83,9 +83,9 @@ # define STM32_OTG_FIFO_SIZE 4096 #endif -/************************************************************************************ - * Public Functions - ************************************************************************************/ +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ #ifndef __ASSEMBLY__ @@ -105,9 +105,9 @@ extern "C" * Initialize USB host device controller hardware. * * Input Parameters: - * controller -- If the device supports more than USB host controller, then - * this identifies which controller is being initializeed. Normally, this - * is just zero. + * controller -- If the device supports more than USB host controller, + * then this identifies which controller is being initialized. + * Normally, this is just zero. * * Returned Value: * And instance of the USB host interface. The controlling task should @@ -128,17 +128,18 @@ struct usbhost_connection_s; FAR struct usbhost_connection_s *stm32_otghost_initialize(int controller); #endif -/************************************************************************************ +/**************************************************************************** * Name: stm32_usbsuspend * * Description: - * Board logic must provide the stm32_usbsuspend logic if the OTG FS device driver - * is used. This function is called whenever the USB enters or leaves suspend - * mode. This is an opportunity for the board logic to shutdown clocks, power, - * etc. while the USB is suspended. + * Board logic must provide the stm32_usbsuspend logic if the OTG FS + * device driver is used. This function is called whenever the USB enters + * or leaves suspend mode. This is an opportunity for the board logic to + * shutdown clocks, power, etc. while the USB is suspended. * - ************************************************************************************/ + ****************************************************************************/ +struct usbdev_s; void stm32_usbsuspend(FAR struct usbdev_s *dev, bool resume); #undef EXTERN diff --git a/arch/arm/src/stm32h7/stm32_otg.h b/arch/arm/src/stm32h7/stm32_otg.h index 2831236..d765539 100644 --- a/arch/arm/src/stm32h7/stm32_otg.h +++ b/arch/arm/src/stm32h7/stm32_otg.h @@ -1,4 +1,4 @@ -/************************************************************************************ +/**************************************************************************** * arch/arm/src/stm32h7/stm32_otg.h * * Copyright (C) 2019 Gregory Nutt. All rights reserved. @@ -31,14 +31,14 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - ************************************************************************************/ + ****************************************************************************/ #ifndef __ARCH_ARM_SRC_STM32H7_STM32_OTG_H #define __ARCH_ARM_SRC_STM32H7_STM32_OTG_H -/************************************************************************************ +/**************************************************************************** * Included Files - ************************************************************************************/ + ****************************************************************************/ #include <nuttx/config.h> @@ -49,15 +49,16 @@ #if defined(CONFIG_STM32H7_OTGFS) || defined(CONFIG_STM32H7_OTGHS) -/************************************************************************************ +/**************************************************************************** * Pre-processor Definitions - ************************************************************************************/ -/* Configuration ********************************************************************/ + ****************************************************************************/ + +/* Configuration ************************************************************/ #if defined(CONFIG_STM32H7_OTGFS) # define STM32_IRQ_OTG STM32_IRQ_OTGFS # define STM32_OTG_BASE STM32_OTGFS_BASE /* OTG FS */ -# define STM32_NENDPOINTS (7) /* ep0-8 x 2 for IN and OUT but driver internals use byte to map + one bit for direction */ +# define STM32_NENDPOINTS (7) /* ep0-8 x 2 for IN and OUT but driver internals use byte to map + one bit for direction */ # define GPIO_OTG_DM GPIO_OTGFS_DM # define GPIO_OTG_DP GPIO_OTGFS_DP # define GPIO_OTG_ID GPIO_OTGFS_ID @@ -68,7 +69,7 @@ #if defined(CONFIG_STM32H7_OTGHS) # define STM32_IRQ_OTG STM32_IRQ_OTGHS # define STM32_OTG_BASE STM32_OTGHS_BASE /* OTG HS/FS */ -# define STM32_NENDPOINTS (7) /* ep0-8 x 2 for IN and OUT but driver internals use byte to map + one bit for direction */ +# define STM32_NENDPOINTS (7) /* ep0-8 x 2 for IN and OUT but driver internals use byte to map + one bit for direction */ # define GPIO_OTG_DM GPIO_OTGHS_DM # define GPIO_OTG_DP GPIO_OTGHS_DP # define GPIO_OTG_ID GPIO_OTGHS_ID @@ -76,9 +77,9 @@ # define STM32_OTG_FIFO_SIZE 4096 #endif -/************************************************************************************ - * Public Functions - ************************************************************************************/ +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ #ifndef __ASSEMBLY__ @@ -99,8 +100,8 @@ extern "C" * * Input Parameters: * controller -- If the device supports more than USB host controller, then - * this identifies which controller is being initializeed. Normally, this - * is just zero. + * this identifies which controller is being initialized. Normally, + * this is just zero. * * Returned Value: * And instance of the USB host interface. The controlling task should @@ -121,17 +122,18 @@ struct usbhost_connection_s; FAR struct usbhost_connection_s *stm32_otgfshost_initialize(int controller); #endif -/************************************************************************************ +/**************************************************************************** * Name: stm32_usbsuspend * * Description: - * Board logic must provide the stm32_usbsuspend logic if the OTG FS device driver - * is used. This function is called whenever the USB enters or leaves suspend - * mode. This is an opportunity for the board logic to shutdown clocks, power, - * etc. while the USB is suspended. + * Board logic must provide the stm32_usbsuspend logic if the OTG FS + * device driver is used. This function is called whenever the USB enters + * or leaves suspend mode. This is an opportunity for the board logic to + * shutdown clocks, power, etc. while the USB is suspended. * - ************************************************************************************/ + ****************************************************************************/ +struct usbdev_s; void stm32_usbsuspend(FAR struct usbdev_s *dev, bool resume); #undef EXTERN diff --git a/arch/arm/src/stm32h7/stm32_otghost.c b/arch/arm/src/stm32h7/stm32_otghost.c index 1a0a7bc..9126b52 100644 --- a/arch/arm/src/stm32h7/stm32_otghost.c +++ b/arch/arm/src/stm32h7/stm32_otghost.c @@ -73,9 +73,7 @@ #include "stm32_otg.h" #include "stm32_usbhost.h" -#if defined(CONFIG_USBHOST) && defined(CONFIG_STM32H7_OTGFS) && defined(CONFIG_EXPERIMENTAL) - -#warning OTG host not tested for STM32H7! +#if defined(CONFIG_USBHOST) && defined(CONFIG_STM32H7_OTGFS) /**************************************************************************** * Pre-processor Definitions diff --git a/boards/arm/stm32h7/nucleo-h743zi/Kconfig b/boards/arm/stm32h7/nucleo-h743zi/Kconfig index b3ba773..c648632 100644 --- a/boards/arm/stm32h7/nucleo-h743zi/Kconfig +++ b/boards/arm/stm32h7/nucleo-h743zi/Kconfig @@ -4,6 +4,23 @@ # if ARCH_BOARD_NUCLEO_H743ZI + +choice + prompt "STM Nucleo-144 Board Variant" + default STM_NUCLEO144_MB1364 + +config STM_NUCLEO144_MB1364 + bool "Nucleo-H743ZI2 (MB1364)" + ---help--- + This is the current version of the Nucelo-144 for the H743ZI + +config STM_NUCLEO144_MB1137 + bool "Nucleo-H743ZI (MB1137)" + ---help--- + This is the origional version of the Nucelo-144 for the H743ZI + +endchoice + config STM32_ROMFS bool "Automount baked-in ROMFS image" default n diff --git a/boards/arm/stm32h7/nucleo-h743zi/configs/otg_fs_host/defconfig b/boards/arm/stm32h7/nucleo-h743zi/configs/otg_fs_host/defconfig index 788b7b2..5ff7526 100644 --- a/boards/arm/stm32h7/nucleo-h743zi/configs/otg_fs_host/defconfig +++ b/boards/arm/stm32h7/nucleo-h743zi/configs/otg_fs_host/defconfig @@ -17,11 +17,9 @@ CONFIG_ARMV7M_DCACHE=y CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y CONFIG_ARMV7M_DTCM=y CONFIG_ARMV7M_ICACHE=y -CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=y CONFIG_BOARD_LOOPSPERMSEC=43103 CONFIG_BUILTIN=y CONFIG_DEBUG_SYMBOLS=y -CONFIG_EXPERIMENTAL=y CONFIG_FAT_LCNAMES=y CONFIG_FS_FAT=y CONFIG_FS_PROCFS=y @@ -31,7 +29,7 @@ CONFIG_HAVE_CXXINITIALIZE=y CONFIG_INTELHEX_BINARY=y CONFIG_LIBM=y CONFIG_MAX_TASKS=16 -CONFIG_MM_REGIONS=3 +CONFIG_MM_REGIONS=4 CONFIG_NFILE_DESCRIPTORS=8 CONFIG_NSH_ARCHINIT=y CONFIG_NSH_BUILTIN_APPS=y diff --git a/boards/arm/stm32h7/nucleo-h743zi/src/nucleo-h743zi.h b/boards/arm/stm32h7/nucleo-h743zi/src/nucleo-h743zi.h index 1972022..fd84a4a 100644 --- a/boards/arm/stm32h7/nucleo-h743zi/src/nucleo-h743zi.h +++ b/boards/arm/stm32h7/nucleo-h743zi/src/nucleo-h743zi.h @@ -52,6 +52,38 @@ /* Configuration ************************************************************/ +#define HAVE_PROC 1 +#define HAVE_USBDEV 1 +#define HAVE_USBHOST 1 +#define HAVE_USBMONITOR 1 + +/* Can't support USB host or device features if USB OTG FS is not enabled */ + +#ifndef CONFIG_STM32H7_OTGFS +# undef HAVE_USBDEV +# undef HAVE_USBHOST +# undef HAVE_USBMONITOR +#endif + +/* Can't support USB device monitor if USB device is not enabled */ + +#ifndef CONFIG_USBDEV +# undef HAVE_USBDEV +# undef HAVE_USBMONITOR +#endif + +/* Can't support USB host is USB host is not enabled */ + +#ifndef CONFIG_USBHOST +# undef HAVE_USBHOST +#endif + +/* Check if we should enable the USB monitor before starting NSH */ + +#if !defined(CONFIG_USBDEV_TRACE) || !defined(CONFIG_USBMONITOR) +# undef HAVE_USBMONITOR +#endif + /* procfs File System */ #ifdef CONFIG_FS_PROCFS @@ -112,8 +144,13 @@ #define GPIO_OTGFS_VBUS (GPIO_INPUT|GPIO_FLOAT|GPIO_SPEED_100MHz| \ GPIO_OPENDRAIN|GPIO_PORTA|GPIO_PIN9) -#define GPIO_OTGFS_PWRON (GPIO_OUTPUT|GPIO_FLOAT|GPIO_SPEED_100MHz| \ +#if defined(CONFIG_STM_NUCLEO144_MB1137) +# define GPIO_OTGFS_PWRON (GPIO_OUTPUT|GPIO_FLOAT|GPIO_SPEED_100MHz| \ GPIO_PUSHPULL|GPIO_PORTG|GPIO_PIN6) +#elif defined(CONFIG_STM_NUCLEO144_MB1364) +# define GPIO_OTGFS_PWRON (GPIO_OUTPUT|GPIO_FLOAT|GPIO_SPEED_100MHz| \ + GPIO_PUSHPULL|GPIO_PORTD|GPIO_PIN10) +#endif #ifdef CONFIG_USBHOST # define GPIO_OTGFS_OVER (GPIO_INPUT|GPIO_EXTI|GPIO_FLOAT| \ @@ -234,12 +271,26 @@ int stm32_gpio_initialize(void); * * Description: * Called from stm32_usbinitialize very early in inialization to setup - * USB-related GPIO pins for the nucleo-144 board. + * USB-related GPIO pins for the NUCLEO-H743ZI board. * ****************************************************************************/ #ifdef CONFIG_STM32H7_OTGFS -void stm32_usbinitialize(void); +void weak_function stm32_usbinitialize(void); +#endif + +/**************************************************************************** + * Name: stm32_usbhost_initialize + * + * Description: + * Called at application startup time to initialize the USB host + * functionality. This function will start a thread that will monitor for + * device connection/disconnection events. + * + ****************************************************************************/ + +#if defined(CONFIG_STM32H7_OTGFS) && defined(CONFIG_USBHOST) +int stm32_usbhost_initialize(void); #endif /**************************************************************************** diff --git a/boards/arm/stm32h7/nucleo-h743zi/src/stm32_bringup.c b/boards/arm/stm32h7/nucleo-h743zi/src/stm32_bringup.c index 0e85ea4..f49d3d0 100644 --- a/boards/arm/stm32h7/nucleo-h743zi/src/stm32_bringup.c +++ b/boards/arm/stm32h7/nucleo-h743zi/src/stm32_bringup.c @@ -44,16 +44,12 @@ #include <syslog.h> #include <errno.h> -#define HAVE_USBHOST 1 -#define CONFIG_USBMONITOR 1 - #ifdef CONFIG_USBMONITOR #include <nuttx/usb/usbmonitor.h> #endif -#ifdef CONFIG_STM32_OTGFS +#ifdef CONFIG_STM32H7_OTGFS #include "stm32_usbhost.h" -#include "stm32_usb.h" #endif #include "nucleo-h743zi.h" diff --git a/boards/arm/stm32h7/nucleo-h743zi/src/stm32_usb.c b/boards/arm/stm32h7/nucleo-h743zi/src/stm32_usb.c index 8127e22..c7ce67c 100644 --- a/boards/arm/stm32h7/nucleo-h743zi/src/stm32_usb.c +++ b/boards/arm/stm32h7/nucleo-h743zi/src/stm32_usb.c @@ -275,7 +275,13 @@ void stm32_usbhost_vbusdrive(int iface, bool enable) /* Set the Power Switch by driving the active high enable pin */ +#if defined(CONFIG_STM_NUCLEO144_MB1137) stm32_gpiowrite(GPIO_OTGFS_PWRON, enable); +#elif defined(CONFIG_STM_NUCLEO144_MB1364) + stm32_gpiowrite(GPIO_OTGFS_PWRON, !enable); +#else +# error "Non-supported board" +#endif } #endif