Some STM32 USB OTG FS driver fixes

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5059 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-08-27 22:27:03 +00:00
parent 8b527a745d
commit 227126f75f
10 changed files with 28 additions and 11 deletions

View File

@ -3200,4 +3200,6 @@
OFF, there are more NAKs occuring in more places than before and this OFF, there are more NAKs occuring in more places than before and this
reveals a variety of errors. This check in improves NAK robustness reveals a variety of errors. This check in improves NAK robustness
for control transfers but does not resolve all of the issues. for control transfers but does not resolve all of the issues.
* configs/stm3220g-eval/*/defconfig: Calibrated delay loop. It had
never been calibrated was was way off.

View File

@ -48,6 +48,10 @@
#include <errno.h> #include <errno.h>
#include <debug.h> #include <debug.h>
#if !defined(CONFIG_DEBUG_VERBOSE) && !defined(CONFIG_DEBUG_USB)
# include <debug.h>
#endif
#include <nuttx/arch.h> #include <nuttx/arch.h>
#include <nuttx/kmalloc.h> #include <nuttx/kmalloc.h>
#include <nuttx/usb/usb.h> #include <nuttx/usb/usb.h>
@ -1888,7 +1892,7 @@ static void stm32_gint_connected(FAR struct stm32_usbhost_s *priv)
if (!priv->connected) if (!priv->connected)
{ {
/* Yes.. then now we are connected */ /* Yes.. then now we are connected */
ullvdbg("Connected\n"); ullvdbg("Connected\n");
priv->connected = true; priv->connected = true;
DEBUGASSERT(priv->smstate == SMSTATE_DETACHED); DEBUGASSERT(priv->smstate == SMSTATE_DETACHED);
@ -3595,8 +3599,19 @@ static int stm32_transfer(FAR struct usbhost_driver_s *drvr, usbhost_ep_t ep,
} }
} }
/* There is a bug in the code at present. With debug OFF, this driver
* overruns the typical FLASH device and there are many problems with
* NAKS sticking a big delay here allows the driver to work but with
* very poor performance when debug is off.
*/
#if !defined(CONFIG_DEBUG_VERBOSE) && !defined(CONFIG_DEBUG_USB)
#warning "REVISIT this delay"
usleep(100*1000);
#endif
/* Start the transfer */ /* Start the transfer */
stm32_transfer_start(priv, chidx); stm32_transfer_start(priv, chidx);
/* Wait for the transfer to complete and get the result */ /* Wait for the transfer to complete and get the result */
@ -3696,7 +3711,7 @@ static void stm32_portreset(FAR struct stm32_usbhost_s *priv)
* Flush the selected Tx FIFO. * Flush the selected Tx FIFO.
* *
* Input Parameters: * Input Parameters:
* priv -- USB host driver private data structure. * txfnum -- USB host driver private data structure.
* *
* Returned Value: * Returned Value:
* None. * None.

View File

@ -75,7 +75,7 @@ CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32F207IG=y CONFIG_ARCH_CHIP_STM32F207IG=y
CONFIG_ARCH_BOARD="stm3220g-eval" CONFIG_ARCH_BOARD="stm3220g-eval"
CONFIG_ARCH_BOARD_STM3220G_EVAL=y CONFIG_ARCH_BOARD_STM3220G_EVAL=y
CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_LOOPSPERMSEC=10926
CONFIG_DRAM_SIZE=0x00030000 CONFIG_DRAM_SIZE=0x00030000
CONFIG_DRAM_START=0x20000000 CONFIG_DRAM_START=0x20000000
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y

View File

@ -75,7 +75,7 @@ CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32F207IG=y CONFIG_ARCH_CHIP_STM32F207IG=y
CONFIG_ARCH_BOARD="stm3220g-eval" CONFIG_ARCH_BOARD="stm3220g-eval"
CONFIG_ARCH_BOARD_STM3220G_EVAL=y CONFIG_ARCH_BOARD_STM3220G_EVAL=y
CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_LOOPSPERMSEC=10926
CONFIG_DRAM_SIZE=0x00030000 CONFIG_DRAM_SIZE=0x00030000
CONFIG_DRAM_START=0x20000000 CONFIG_DRAM_START=0x20000000
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y

View File

@ -75,7 +75,7 @@ CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32F207IG=y CONFIG_ARCH_CHIP_STM32F207IG=y
CONFIG_ARCH_BOARD="stm3220g-eval" CONFIG_ARCH_BOARD="stm3220g-eval"
CONFIG_ARCH_BOARD_STM3220G_EVAL=y CONFIG_ARCH_BOARD_STM3220G_EVAL=y
CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_LOOPSPERMSEC=10926
CONFIG_DRAM_SIZE=0x00030000 CONFIG_DRAM_SIZE=0x00030000
CONFIG_DRAM_START=0x20000000 CONFIG_DRAM_START=0x20000000
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y

View File

@ -76,7 +76,7 @@ CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32F207IG=y CONFIG_ARCH_CHIP_STM32F207IG=y
CONFIG_ARCH_BOARD="stm3220g-eval" CONFIG_ARCH_BOARD="stm3220g-eval"
CONFIG_ARCH_BOARD_STM3220G_EVAL=y CONFIG_ARCH_BOARD_STM3220G_EVAL=y
CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_LOOPSPERMSEC=10926
CONFIG_DRAM_SIZE=0x00030000 CONFIG_DRAM_SIZE=0x00030000
CONFIG_DRAM_START=0x20000000 CONFIG_DRAM_START=0x20000000
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y

View File

@ -75,7 +75,7 @@ CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32F207IG=y CONFIG_ARCH_CHIP_STM32F207IG=y
CONFIG_ARCH_BOARD="stm3220g-eval" CONFIG_ARCH_BOARD="stm3220g-eval"
CONFIG_ARCH_BOARD_STM3220G_EVAL=y CONFIG_ARCH_BOARD_STM3220G_EVAL=y
CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_LOOPSPERMSEC=10926
CONFIG_DRAM_SIZE=0x00030000 CONFIG_DRAM_SIZE=0x00030000
CONFIG_DRAM_START=0x20000000 CONFIG_DRAM_START=0x20000000
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y

View File

@ -75,7 +75,7 @@ CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32F207IG=y CONFIG_ARCH_CHIP_STM32F207IG=y
CONFIG_ARCH_BOARD="stm3220g-eval" CONFIG_ARCH_BOARD="stm3220g-eval"
CONFIG_ARCH_BOARD_STM3220G_EVAL=y CONFIG_ARCH_BOARD_STM3220G_EVAL=y
CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_LOOPSPERMSEC=10926
CONFIG_DRAM_SIZE=0x00030000 CONFIG_DRAM_SIZE=0x00030000
CONFIG_DRAM_START=0x20000000 CONFIG_DRAM_START=0x20000000
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y

View File

@ -75,7 +75,7 @@ CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32F207IG=y CONFIG_ARCH_CHIP_STM32F207IG=y
CONFIG_ARCH_BOARD="stm3220g-eval" CONFIG_ARCH_BOARD="stm3220g-eval"
CONFIG_ARCH_BOARD_STM3220G_EVAL=y CONFIG_ARCH_BOARD_STM3220G_EVAL=y
CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_LOOPSPERMSEC=10926
CONFIG_DRAM_SIZE=0x00030000 CONFIG_DRAM_SIZE=0x00030000
CONFIG_DRAM_START=0x20000000 CONFIG_DRAM_START=0x20000000
CONFIG_ARCH_IRQPRIO=y CONFIG_ARCH_IRQPRIO=y

View File

@ -351,7 +351,7 @@ static inline int romfs_searchdir(struct romfs_mountpt_s *rm,
} }
while (next != 0); while (next != 0);
/* There is nothing in this directoy with that name */ /* There is nothing in this directory with that name */
return -ENOENT; return -ENOENT;
} }