STM32F429i-Disco: Add some missing USB host configureation. Fix some some duplicate class registration that causes infinite loops in USB registry searches

This commit is contained in:
Gregory Nutt 2015-04-30 13:01:29 -06:00
parent 1380945a13
commit 4d5fae4ea9
5 changed files with 124 additions and 144 deletions

View File

@ -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

View File

@ -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 <subdir> 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 <subdir> 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:
---------

View File

@ -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

View File

@ -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

View File

@ -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;
}