From 5f992dd1a9076a6883bd3f5fe7c91be4b245fdec Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Thu, 30 Apr 2015 13:01:29 -0600 Subject: [PATCH] STM32F429i-Disco: Add some missing USB host configureation. Fix some some duplicate class registration that causes infinite loops in USB registry searches --- configs/stm32f429i-disco/Kconfig | 10 ++ configs/stm32f429i-disco/README.txt | 75 ++++++++--- configs/stm32f429i-disco/nsh/defconfig | 158 +++++++---------------- configs/stm32f429i-disco/src/stm32_nsh.c | 13 -- configs/stm32f429i-disco/src/stm32_usb.c | 12 +- 5 files changed, 124 insertions(+), 144 deletions(-) diff --git a/configs/stm32f429i-disco/Kconfig b/configs/stm32f429i-disco/Kconfig index bc97e0703c2..de4fb5c904d 100644 --- a/configs/stm32f429i-disco/Kconfig +++ b/configs/stm32f429i-disco/Kconfig @@ -84,6 +84,16 @@ config STM32F429I_DISCO_RAMMTD_SIZE ---help--- Sets the size of static RAM allocation for the SMART RAM device +config STM32F429IDISCO_USBHOST_STACKSIZE + int "USB host waiter stack size" + default 1024 + depends on USBHOST + +config STM32F429IDISCO_USBHOST_PRIO + int "USB host waiter task priority" + default 100 + depends on USBHOST + config PM_BUTTONS bool "PM Button support" default n diff --git a/configs/stm32f429i-disco/README.txt b/configs/stm32f429i-disco/README.txt index d90112144ca..aff044b270f 100644 --- a/configs/stm32f429i-disco/README.txt +++ b/configs/stm32f429i-disco/README.txt @@ -15,20 +15,17 @@ memory and 256kbytes. The board features: - USB OTG FS with micro-AB connector, and - Easy access to most MCU pins. -NOTE: The STM32F429I-DISCO port is in early stages and has only limited - support at this point. I have basic NSH command support with - full 8MByte SDRAM + the internal 256K. Unsupported are the LCD - and USB interfaces. +NOTE: Includes basic NSH command support with full 8MByte SDRAM + the + internal 256K. Unsupported are the LCD and USB interfaces. The board pin configuration to support on-board SDRAM and LCD prevents use of the OTG FS module which is normally used for USB NSH sessions. Instead, the board routes the OTG HS pins to the - USB OTG connector. Until the port has been updated to use the - OTG HS module of the MCU, USB functions are not available. + USB OTG connector. The NSH configuration / testing that has been done so far was performed by connecting an external RS-232 line driver to pins - PA9 and PA10 and configuring UART1 as the NSH console. + PA9 (TX) and PA10 (RX) and configuring UART1 as the NSH console. Refer to the http://www.st.com website for further information about this board (search keyword: 429i-disco) @@ -745,15 +742,31 @@ Where is one of the following: a USB host on the STM32F429I-DISCO, including support for a mass storage class driver: - CONFIG_USBDEV=n : Make sure tht USB device support is disabled - CONFIG_USBHOST=y : Enable USB host support - CONFIG_STM32_OTGFS=y : Enable the STM32 USB OTG FS block - CONFIG_STM32_SYSCFG=y : Needed for all USB OTF FS support - CONFIG_SCHED_WORKQUEUE=y : Worker thread support is required for the mass - storage class driver. - CONFIG_NSH_ARCHINIT=y : Architecture specific USB initialization - is needed for NSH - CONFIG_FS_FAT=y : Needed by the USB host mass storage class. + Device Drivers -> + CONFIG_USBDEV=n : Make sure tht USB device support is disabled + CONFIG_USBHOST=y : Enable USB host support + CONFIG_USBHOST_ISOC_DISABLE=y + + Device Drivers -> USB Host Driver Support + CONFIG_USBHOST_MSC=y : Enable the mass storage class + + System Type -> STM32 Peripheral Support + CONFIG_STM32_OTGHS=y : Enable the STM32 USB OTG FH block (FS mode) + CONFIG_STM32_SYSCFG=y : Needed for all USB OTF HS support + + RTOS Features -> Work Queue Support + CONFIG_SCHED_WORKQUEUE=y : High priority worker thread support is required + CONFIG_SCHED_HPWORK=y : for the mass storage class driver. + + File Systems -> + CONFIG_FS_FAT=y : Needed by the USB host mass storage class. + + Board Selection -> + CONFIG_LIB_BOARDCTL=y : Needed for CONFIG_NSH_ARCHINIT + + Application Configuration -> NSH Library + CONFIG_NSH_ARCHINIT=y : Architecture specific USB initialization + : is needed for NSH With those changes, you can use NSH with a FLASH pen driver as shown belong. Here NSH is started with nothing in the USB host slot: @@ -800,6 +813,36 @@ Where is one of the following: nsh> umount /mnt/stuff + 11. I used this configuration to test the USB hub class. I did this + testing with the following changes to the configuration (in addition + to those listed above for base USB host/mass storage class support): + + Drivers -> USB Host Driver Support + CONFIG_USBHOST_HUB=y : Enable the hub class + CONFIG_USBHOST_ASYNCH=y : Asynchonous I/O supported needed for hubs + + Board Selection -> + CONFIG_STM32F429IDISCO_USBHOST_STACKSIZE=2048 (bigger than it needs to be) + + RTOS Features -> Work Queue Support + CONFIG_SCHED_LPWORK=y : Low priority queue support is needed + CONFIG_SCHED_LPNTHREADS=1 + CONFIG_SCHED_LPWORKSTACKSIZE=1024 + + NOTES: + + 1. It is necessary to perform work on the low-priority work queue + (vs. the high priority work queue) because deferred hub-related + work requires some delays and waiting that is not appropriate on + the high priority work queue. + + 2. Stack usage make increase when USB hub support is enabled because + the nesting depth of certain USB host class logic can increase. + + STATUS: + 2015-04-30 + Appears to be fully functional. + extflash: --------- diff --git a/configs/stm32f429i-disco/nsh/defconfig b/configs/stm32f429i-disco/nsh/defconfig index 42eb163099e..29809c48740 100644 --- a/configs/stm32f429i-disco/nsh/defconfig +++ b/configs/stm32f429i-disco/nsh/defconfig @@ -42,8 +42,9 @@ CONFIG_RAW_BINARY=y # Debug Options # # CONFIG_DEBUG is not set -CONFIG_ARCH_HAVE_STACKCHECK=y CONFIG_ARCH_HAVE_HEAPCHECK=y +CONFIG_ARCH_HAVE_STACKCHECK=y +# CONFIG_STACK_COLORATION is not set CONFIG_DEBUG_SYMBOLS=y CONFIG_ARCH_HAVE_CUSTOMOPT=y CONFIG_DEBUG_NOOPT=y @@ -87,6 +88,7 @@ CONFIG_ARCH="arm" # CONFIG_ARCH_CHIP_SAMA5 is not set # CONFIG_ARCH_CHIP_SAMD is not set # CONFIG_ARCH_CHIP_SAM34 is not set +# CONFIG_ARCH_CHIP_SAMV7 is not set CONFIG_ARCH_CHIP_STM32=y # CONFIG_ARCH_CHIP_STR71X is not set # CONFIG_ARCH_ARM7TDMI is not set @@ -95,6 +97,7 @@ CONFIG_ARCH_CHIP_STM32=y # CONFIG_ARCH_CORTEXM0 is not set # CONFIG_ARCH_CORTEXM3 is not set CONFIG_ARCH_CORTEXM4=y +# CONFIG_ARCH_CORTEXM7 is not set # CONFIG_ARCH_CORTEXA5 is not set # CONFIG_ARCH_CORTEXA8 is not set CONFIG_ARCH_FAMILY="armv7-m" @@ -102,17 +105,24 @@ CONFIG_ARCH_CHIP="stm32" # CONFIG_ARMV7M_USEBASEPRI is not set CONFIG_ARCH_HAVE_CMNVECTOR=y # CONFIG_ARMV7M_CMNVECTOR is not set +# CONFIG_ARMV7M_LAZYFPU is not set CONFIG_ARCH_HAVE_FPU=y +# CONFIG_ARCH_HAVE_DPFPU is not set # CONFIG_ARCH_FPU is not set # CONFIG_ARMV7M_MPU is not set # # ARMV7M Configuration Options # +# CONFIG_ARMV7M_HAVE_ICACHE is not set +# CONFIG_ARMV7M_HAVE_DCACHE is not set +# CONFIG_ARMV7M_HAVE_ITCM is not set +# CONFIG_ARMV7M_HAVE_DTCM is not set # CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT is not set # CONFIG_ARMV7M_TOOLCHAIN_CODEREDL is not set # CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYL is not set CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL=y +CONFIG_ARMV7M_HAVE_STACKCHECK=y # CONFIG_ARMV7M_STACKCHECK is not set # CONFIG_ARMV7M_ITMSYSLOG is not set @@ -138,6 +148,7 @@ CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL=y # CONFIG_ARCH_CHIP_STM32L152V8 is not set # CONFIG_ARCH_CHIP_STM32L152VB is not set # CONFIG_ARCH_CHIP_STM32L162ZD is not set +# CONFIG_ARCH_CHIP_STM32L162VE is not set # CONFIG_ARCH_CHIP_STM32F100C8 is not set # CONFIG_ARCH_CHIP_STM32F100CB is not set # CONFIG_ARCH_CHIP_STM32F100R8 is not set @@ -183,6 +194,24 @@ CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL=y # CONFIG_ARCH_CHIP_STM32F303RC is not set # CONFIG_ARCH_CHIP_STM32F303VB is not set # CONFIG_ARCH_CHIP_STM32F303VC is not set +# CONFIG_ARCH_CHIP_STM32F372C8 is not set +# CONFIG_ARCH_CHIP_STM32F372R8 is not set +# CONFIG_ARCH_CHIP_STM32F372V8 is not set +# CONFIG_ARCH_CHIP_STM32F372CB is not set +# CONFIG_ARCH_CHIP_STM32F372RB is not set +# CONFIG_ARCH_CHIP_STM32F372VB is not set +# CONFIG_ARCH_CHIP_STM32F372CC is not set +# CONFIG_ARCH_CHIP_STM32F372RC is not set +# CONFIG_ARCH_CHIP_STM32F372VC is not set +# CONFIG_ARCH_CHIP_STM32F373C8 is not set +# CONFIG_ARCH_CHIP_STM32F373R8 is not set +# CONFIG_ARCH_CHIP_STM32F373V8 is not set +# CONFIG_ARCH_CHIP_STM32F373CB is not set +# CONFIG_ARCH_CHIP_STM32F373RB is not set +# CONFIG_ARCH_CHIP_STM32F373VB is not set +# CONFIG_ARCH_CHIP_STM32F373CC is not set +# CONFIG_ARCH_CHIP_STM32F373RC is not set +# CONFIG_ARCH_CHIP_STM32F373VC is not set # CONFIG_ARCH_CHIP_STM32F401RE is not set # CONFIG_ARCH_CHIP_STM32F411RE is not set # CONFIG_ARCH_CHIP_STM32F405RG is not set @@ -215,6 +244,7 @@ CONFIG_ARCH_CHIP_STM32F429Z=y # CONFIG_STM32_STM32F20XX is not set # CONFIG_STM32_STM32F207 is not set # CONFIG_STM32_STM32F30XX is not set +# CONFIG_STM32_STM32F37XX is not set CONFIG_STM32_STM32F40XX=y # CONFIG_STM32_STM32F401 is not set # CONFIG_STM32_STM32F411 is not set @@ -262,6 +292,7 @@ CONFIG_STM32_HAVE_SPI2=y CONFIG_STM32_HAVE_SPI3=y CONFIG_STM32_HAVE_SPI4=y CONFIG_STM32_HAVE_SPI5=y +CONFIG_STM32_HAVE_SPI6=y # CONFIG_STM32_ADC1 is not set # CONFIG_STM32_ADC2 is not set # CONFIG_STM32_ADC3 is not set @@ -319,6 +350,7 @@ CONFIG_STM32_USART1=y # CONFIG_STM32_UART8 is not set # CONFIG_STM32_IWDG is not set # CONFIG_STM32_WWDG is not set +# CONFIG_STM32_NOEXT_VECTORS is not set # # Alternate Pin Mapping @@ -342,6 +374,8 @@ CONFIG_STM32_USART=y # CONFIG_SERIAL_DISABLE_REORDERING is not set # CONFIG_STM32_FLOWCONTROL_BROKEN is not set # CONFIG_STM32_USART_SINGLEWIRE is not set +# CONFIG_STM32_HAVE_RTC_COUNTER is not set +# CONFIG_STM32_HAVE_RTC_SUBSECONDS is not set # # USB FS Host Configuration @@ -438,6 +472,7 @@ CONFIG_NSH_MMCSDMINOR=0 # CONFIG_STM32F429I_DISCO_FLASH is not set # CONFIG_STM32F429I_DISCO_RAMMTD is not set # CONFIG_STM32F429I_DISCO_ILI9341 is not set +# CONFIG_LIB_BOARDCTL is not set # # RTOS Features @@ -562,11 +597,16 @@ CONFIG_SPI=y # CONFIG_SPI_OWNBUS is not set CONFIG_SPI_EXCHANGE=y # CONFIG_SPI_CMDDATA is not set +# CONFIG_SPI_CALLBACK is not set # CONFIG_SPI_BITBANG is not set # CONFIG_I2S is not set + +# +# Timer Driver Support +# +# CONFIG_TIMER is not set # CONFIG_RTC is not set # CONFIG_WATCHDOG is not set -# CONFIG_TIMER is not set # CONFIG_ANALOG is not set # CONFIG_AUDIO_DEVICES is not set # CONFIG_VIDEO_DEVICES is not set @@ -644,6 +684,7 @@ CONFIG_USART1_2STOP=0 # System Logging # # CONFIG_RAMLOG is not set +# CONFIG_SYSLOG_CONSOLE is not set # # Networking Support @@ -743,6 +784,7 @@ CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048 # CONFIG_LIBC_PERROR_STDOUT is not set CONFIG_ARCH_LOWPUTC=y # CONFIG_LIBC_LOCALTIME is not set +# CONFIG_TIME_EXTENDED is not set CONFIG_LIB_SENDFILE_BUFSIZE=512 # CONFIG_ARCH_ROMGETC is not set # CONFIG_ARCH_OPTIMIZED_FUNCTIONS is not set @@ -810,10 +852,10 @@ CONFIG_EXAMPLES_NSH_CXXINITIALIZE=y # CONFIG_EXAMPLES_NXTEXT is not set # CONFIG_EXAMPLES_OSTEST is not set # CONFIG_EXAMPLES_PIPE is not set +# CONFIG_EXAMPLES_PPPD is not set # CONFIG_EXAMPLES_POSIXSPAWN is not set # CONFIG_EXAMPLES_QENCODER is not set # CONFIG_EXAMPLES_RGMP is not set -# CONFIG_EXAMPLES_ROMFS is not set # CONFIG_EXAMPLES_SENDMAIL is not set # CONFIG_EXAMPLES_SERIALBLASTER is not set # CONFIG_EXAMPLES_SERIALRX is not set @@ -826,7 +868,6 @@ CONFIG_EXAMPLES_NSH_CXXINITIALIZE=y # CONFIG_EXAMPLES_THTTPD is not set # CONFIG_EXAMPLES_TIFF is not set # CONFIG_EXAMPLES_TOUCHSCREEN is not set -# CONFIG_EXAMPLES_UDP is not set # CONFIG_EXAMPLES_WEBSERVER is not set # CONFIG_EXAMPLES_USBSERIAL is not set # CONFIG_EXAMPLES_USBTERM is not set @@ -843,6 +884,7 @@ CONFIG_EXAMPLES_NSH_CXXINITIALIZE=y # # CONFIG_INTERPRETERS_FICL is not set # CONFIG_INTERPRETERS_PCODE is not set +# CONFIG_INTERPRETERS_MICROPYTHON is not set # # Network Utilities @@ -852,15 +894,11 @@ CONFIG_EXAMPLES_NSH_CXXINITIALIZE=y # Networking Utilities # # CONFIG_NETUTILS_CODECS is not set -# CONFIG_NETUTILS_DHCPD is not set # CONFIG_NETUTILS_FTPC is not set -# CONFIG_NETUTILS_FTPD is not set # CONFIG_NETUTILS_JSON is not set # CONFIG_NETUTILS_SMTP is not set -# CONFIG_NETUTILS_TFTPC is not set # CONFIG_NETUTILS_THTTPD is not set -# CONFIG_NETUTILS_NETLIB is not set -# CONFIG_NETUTILS_WEBCLIENT is not set +# CONFIG_NETUTILS_PPPD is not set # # FreeModBus @@ -894,6 +932,7 @@ CONFIG_NSH_BUILTIN_APPS=y # CONFIG_NSH_DISABLE_CD is not set # CONFIG_NSH_DISABLE_CP is not set # CONFIG_NSH_DISABLE_CMP is not set +CONFIG_NSH_DISABLE_DATE=y # CONFIG_NSH_DISABLE_DD is not set # CONFIG_NSH_DISABLE_DF is not set # CONFIG_NSH_DISABLE_DELROUTE is not set @@ -914,6 +953,7 @@ CONFIG_NSH_BUILTIN_APPS=y # CONFIG_NSH_DISABLE_MKRD is not set # CONFIG_NSH_DISABLE_MH is not set # CONFIG_NSH_DISABLE_MOUNT is not set +# CONFIG_NSH_DISABLE_MV is not set # CONFIG_NSH_DISABLE_MW is not set # CONFIG_NSH_DISABLE_PS is not set # CONFIG_NSH_DISABLE_PUT is not set @@ -964,120 +1004,20 @@ CONFIG_NSH_CONSOLE=y # # System Libraries and NSH Add-Ons # - -# -# Custom Free Memory Command -# # CONFIG_SYSTEM_FREE is not set - -# -# EMACS-like Command Line Editor -# # CONFIG_SYSTEM_CLE is not set - -# -# CU Minimal Terminal -# # CONFIG_SYSTEM_CUTERM is not set - -# -# FLASH Program Installation -# # CONFIG_SYSTEM_INSTALL is not set - -# -# FLASH Erase-all Command -# - -# -# Intel HEX to binary conversion -# # CONFIG_SYSTEM_HEX2BIN is not set - -# -# I2C tool -# - -# -# INI File Parser -# # CONFIG_SYSTEM_INIFILE is not set - -# -# NxPlayer media player library / command Line -# - -# -# RAM test -# # CONFIG_SYSTEM_RAMTEST is not set - -# -# readline() -# CONFIG_SYSTEM_READLINE=y CONFIG_READLINE_ECHO=y - -# -# P-Code Support -# - -# -# PHY Tool -# - -# -# Power Off -# # CONFIG_SYSTEM_POWEROFF is not set - -# -# RAMTRON -# # CONFIG_SYSTEM_RAMTRON is not set - -# -# SD Card -# # CONFIG_SYSTEM_SDCARD is not set - -# -# Sudoku -# # CONFIG_SYSTEM_SUDOKU is not set - -# -# Sysinfo -# CONFIG_SYSTEM_SYSINFO=y CONFIG_SYSTEM_SYSINFO_STACKSIZE=1024 - -# -# VI Work-Alike Editor -# # CONFIG_SYSTEM_VI is not set - -# -# Stack Monitor -# - -# -# USB CDC/ACM Device Commands -# - -# -# USB Composite Device Commands -# - -# -# USB Mass Storage Device Commands -# - -# -# USB Monitor -# - -# -# Zmodem Commands -# # CONFIG_SYSTEM_ZMODEM is not set diff --git a/configs/stm32f429i-disco/src/stm32_nsh.c b/configs/stm32f429i-disco/src/stm32_nsh.c index c6ea2f7c43c..005ce44cb8b 100644 --- a/configs/stm32f429i-disco/src/stm32_nsh.c +++ b/configs/stm32f429i-disco/src/stm32_nsh.c @@ -304,19 +304,6 @@ int board_app_initialize(void) syslog(LOG_ERR, "ERROR: Failed to initialize USB host: %d\n", ret); return ret; } - -#ifdef CONFIG_USBHOST_MSC - /* Initialize the USB storage class */ - - ret = usbhost_storageinit(); - if (ret != OK) - { - syslog(LOG_ERR, "ERROR: Failed to initialize USB host storage: %d\n", ret); - return ret; - } - -#endif - #endif #ifdef HAVE_USBMONITOR diff --git a/configs/stm32f429i-disco/src/stm32_usb.c b/configs/stm32f429i-disco/src/stm32_usb.c index 3360df1c001..e2b47e588b7 100644 --- a/configs/stm32f429i-disco/src/stm32_usb.c +++ b/configs/stm32f429i-disco/src/stm32_usb.c @@ -69,12 +69,12 @@ # undef HAVE_USB #endif -#ifndef CONFIG_USBHOST_DEFPRIO -# define CONFIG_USBHOST_DEFPRIO 50 +#ifndef CONFIG_STM32F429IDISCO_USBHOST_PRIO +# define CONFIG_STM32F429IDISCO_USBHOST_PRIO 100 #endif -#ifndef CONFIG_USBHOST_STACKSIZE -# define CONFIG_USBHOST_STACKSIZE 1024 +#ifndef CONFIG_STM32F429IDISCO_USBHOST_STACKSIZE +# define CONFIG_STM32F429IDISCO_USBHOST_STACKSIZE 1024 #endif /************************************************************************************ @@ -202,8 +202,8 @@ int stm32_usbhost_initialize(void) uvdbg("Start usbhost_waiter\n"); - pid = task_create("usbhost", CONFIG_USBHOST_DEFPRIO, - CONFIG_USBHOST_STACKSIZE, + pid = task_create("usbhost", CONFIG_STM32F429IDISCO_USBHOST_PRIO, + CONFIG_STM32F429IDISCO_USBHOST_STACKSIZE, (main_t)usbhost_waiter, (FAR char * const *)NULL); return pid < 0 ? -ENOEXEC : OK; }