summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-03-07 22:50:43 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-03-07 22:50:43 +0000
commit64f3292a08e4d681e7f504ddbc1f2798f3780f0d (patch)
tree48e1bfc3c70cb04d8adcfcc5ff7e3f2b779e6b06
parentc1c23363041c3cd09a1fec50c16ca92c8c78a472 (diff)
downloadnuttx-64f3292a08e4d681e7f504ddbc1f2798f3780f0d.tar.gz
nuttx-64f3292a08e4d681e7f504ddbc1f2798f3780f0d.tar.bz2
nuttx-64f3292a08e4d681e7f504ddbc1f2798f3780f0d.zip
Add support for USB device testing on the PIC32 starter kit
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4463 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/configs/pic32-starterkit/README.txt39
-rw-r--r--nuttx/configs/pic32-starterkit/src/Makefile7
-rw-r--r--nuttx/configs/pic32-starterkit/src/up_nsh.c33
-rw-r--r--nuttx/configs/pic32-starterkit/src/up_usbdev.c163
-rw-r--r--nuttx/configs/pic32-starterkit/src/up_usbterm.c105
-rw-r--r--nuttx/configs/sure-pic32mx/README.txt2
6 files changed, 346 insertions, 3 deletions
diff --git a/nuttx/configs/pic32-starterkit/README.txt b/nuttx/configs/pic32-starterkit/README.txt
index 244d028e4..4ff113d7b 100644
--- a/nuttx/configs/pic32-starterkit/README.txt
+++ b/nuttx/configs/pic32-starterkit/README.txt
@@ -996,3 +996,42 @@ Where <subdir> is one of the following:
been unable to get this UART work on the MEB. But on the Expansion
I/O board, this maps to RX = J11 pin 41 and TX = J11 pin 43
+ USB Configuations.
+ -----------------
+ Several USB device configurations can be enabled and included
+ as NSH built-in built in functions.
+
+ To use USB device, connect the starter kit to the host using a cable
+ with a Type-B micro-plug to the starter kit’s micro-A/B port J5, located
+ on the bottom side of the starter kit. The other end of the cable
+ must have a Type-A plug. Connect it to a USB host. Jumper JP2 should be
+ removed.
+
+ All USB device configurations require the following basic setup in
+ your NuttX configuration file to enable USB device support:
+
+ CONFIG_USBDEV=y : Enable basic USB device support
+ CONFIG_PIC32MX_USBDEV=y : Enable PIC32 USB device support
+
+ examples/usbterm - This option can be enabled by uncommenting
+ the following line in the appconfig file:
+
+ CONFIGURED_APPS += examples/usbterm
+
+ And by enabling one of the USB serial devices:
+
+ CONFIG_PL2303=y : Enable the Prolifics PL2303 emulation
+ CONFIG_CDCACM=y : or the CDC/ACM serial driver (not both)
+
+ examples/cdcacm - The examples/cdcacm program can be included as an
+ function by uncommenting the following line in the appconfig file:
+
+ CONFIGURED_APPS += examples/cdcacm
+
+ and defining the following in your .config file:
+
+ CONFIG_CDCACM=y : Enable the CDCACM device
+
+ examples/usbstorage - There are some hooks in the appconfig file
+ to enable the USB mass storage device. However, this device cannot
+ work until support for the SD card is also incorporated.
diff --git a/nuttx/configs/pic32-starterkit/src/Makefile b/nuttx/configs/pic32-starterkit/src/Makefile
index f45e70826..a7355239f 100644
--- a/nuttx/configs/pic32-starterkit/src/Makefile
+++ b/nuttx/configs/pic32-starterkit/src/Makefile
@@ -40,6 +40,13 @@ CFLAGS += -I$(TOPDIR)/sched
ASRCS =
CSRCS = up_boot.c up_leds.c up_spi.c
+ifeq ($(CONFIG_PIC32MX_USBDEV),y)
+CSRCS += up_usbdev.c
+ifeq ($(CONFIG_EXAMPLES_USBTERM_DEVINIT),y)
+CSRCS += up_usbterm.c
+endif
+endif
+
ifeq ($(CONFIG_NSH_ARCHINIT),y)
CSRCS += up_nsh.c
endif
diff --git a/nuttx/configs/pic32-starterkit/src/up_nsh.c b/nuttx/configs/pic32-starterkit/src/up_nsh.c
index d66a651cd..db6dc922e 100644
--- a/nuttx/configs/pic32-starterkit/src/up_nsh.c
+++ b/nuttx/configs/pic32-starterkit/src/up_nsh.c
@@ -64,12 +64,12 @@
# define CONFIG_NSH_HAVEMMCSD 1
# define CONFIG_NSH_HAVEUSBHOST 1
# if !defined(CONFIG_NSH_MMCSDSPIPORTNO) || CONFIG_NSH_MMCSDSPIPORTNO != 1
-# error "The Sure PIC32MX MMC/SD is on SPI2"
+# error "The PIC32 Starter Kit MMC/SD is on SPI2"
# undef CONFIG_NSH_MMCSDSPIPORTNO
# define CONFIG_NSH_MMCSDSPIPORTNO 2
# endif
# if !defined(CONFIG_NSH_MMCSDSLOTNO) || CONFIG_NSH_MMCSDSLOTNO != 0
-# error "The Sure PIC32MX MMC/SD is only one slot (0)"
+# error "The PIC32 Starter Kit has only one slot (0)"
# undef CONFIG_NSH_MMCSDSLOTNO
# define CONFIG_NSH_MMCSDSLOTNO 0
# endif
@@ -294,6 +294,28 @@ static int nsh_usbhostinitialize(void)
#endif
/****************************************************************************
+ * Name: nsh_usbdevinitialize
+ *
+ * Description:
+ * Initialize SPI-based microSD.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_USBDEV
+static int nsh_usbdevinitialize(void)
+{
+ /* The PIC32 Starter Kit has no way to know when the USB is connected. So
+ * we will fake it and tell the USB driver that the USB is connected now.
+ */
+
+ pic32mx_usbattach();
+ return OK;
+}
+#else
+# define nsh_usbdevinitialize() (OK)
+#endif
+
+/****************************************************************************
* Public Functions
****************************************************************************/
@@ -318,5 +340,12 @@ int nsh_archinitialize(void)
ret = nsh_usbhostinitialize();
}
+
+ if (ret == OK)
+ {
+ /* Initialize USB device */
+
+ ret = nsh_usbdevinitialize();
+ }
return ret;
}
diff --git a/nuttx/configs/pic32-starterkit/src/up_usbdev.c b/nuttx/configs/pic32-starterkit/src/up_usbdev.c
new file mode 100644
index 000000000..6f04f43cb
--- /dev/null
+++ b/nuttx/configs/pic32-starterkit/src/up_usbdev.c
@@ -0,0 +1,163 @@
+/************************************************************************************
+ * configs/pic32-starterkit/src/up_usbdev.c
+ * arch/arm/src/board/up_usbdev.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ************************************************************************************/
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <debug.h>
+
+#include <nuttx/usb/usbdev.h>
+
+#include "pic32mx-internal.h"
+#include "starterkit_internal.h"
+
+#if defined(CONFIG_PIC32MX_USBDEV)
+
+/************************************************************************************
+ * Definitions
+ ************************************************************************************/
+/*
+ * PIN NAME SIGNAL NOTES
+ * ---- ------------------------------- -------------- ------------------------------
+ * 20 VBUSON/C1IN+/AN5/CN7/RB5 VBUSON To USB VBUS circuitry
+ * 43 C2IN+/AN3/CN5/RB3 USB_PGOOD Power good (low if bad)
+ */
+
+#define GPIO_USB_VBUSON (GPIO_INPUT|GPIO_PORTB|GPIO_PIN5)
+#define GPIO_USB_PGOOD (GPIO_INPUT|GPIO_PORTB|GPIO_PIN3)
+
+/************************************************************************************
+ * Private Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: pic32mx_usbdevinitialize
+ *
+ * Description:
+ * Called to configure the mini-A/B J5 on the PIC32 Ethernet Starter Kit for the
+ * USB device
+ *
+ ************************************************************************************/
+
+void weak_function pic32mx_usbdevinitialize(void)
+{
+ /* Connect the PHY to the USB mini-B port. Order and timing matter! */
+
+ pic32mx_configgpio(GPIO_USB_PGOOD);
+
+ /* Notes from the Sure Electronics sample code:
+ *
+ * "The USB specifications require that USB peripheral devices must never source
+ * current onto the Vbus pin. Additionally, USB peripherals should not source
+ * current on D+ or D- when the host/hub is not actively powering the Vbus line.
+ * When designing a self powered (as opposed to bus powered) USB peripheral
+ * device, the firmware should make sure not to turn on the USB module and D+
+ * or D- pull up resistor unless Vbus is actively powered. Therefore, the
+ * firmware needs some means to detect when Vbus is being powered by the host.
+ * A 5V tolerant I/O pin can be connected to Vbus (through a resistor), and
+ * can be used to detect when Vbus is high (host actively powering), or low
+ * (host is shut down or otherwise not supplying power). The USB firmware
+ * can then periodically poll this I/O pin to know when it is okay to turn on
+ * the USB module/D+/D- pull up resistor. When designing a purely bus powered
+ * peripheral device, it is not possible to source current on D+ or D- when the
+ * host is not actively providing power on Vbus. Therefore, implementing this
+ * bus sense feature is optional. ..."
+ */
+
+#ifdef CONFIG_USBHOST
+ // pic32mx_configgpio(GPIO_USB_VBUSON);
+#endif
+
+ /* "If the host PC sends a GetStatus (device) request, the firmware must respond
+ * and let the host know if the USB peripheral device is currently bus powered
+ * or self powered. See chapter 9 in the official USB specifications for details
+ * regarding this request. If the peripheral device is capable of being both
+ * self and bus powered, it should not return a hard coded value for this request.
+ * Instead, firmware should check if it is currently self or bus powered, and
+ * respond accordingly. If the hardware has been configured like demonstrated
+ * on the PICDEM FS USB Demo Board, an I/O pin can be polled to determine the
+ * currently selected power source. ..."
+ */
+
+#ifdef CONFIG_USB_PWRSENSE
+ // pic32mx_configgpio(GPIO_USB_PWRSENSE);
+#endif
+}
+
+/************************************************************************************
+ * Name: pic32mx_usbpullup
+ *
+ * Description:
+ * If USB is supported and the board supports a pullup via GPIO (for USB
+ * software connect and disconnect), then the board software must provide
+ * stm32_pullup. See include/nuttx/usb/usbdev.h for additional description
+ * of this method. Alternatively, if no pull-up GPIO the following EXTERN
+ * can be redefined to be NULL.
+ *
+ ************************************************************************************/
+
+int pic32mx_usbpullup(FAR struct usbdev_s *dev, bool enable)
+{
+ /* The PIC32 Ethernet Starter Kit does not have a USB pull-up */
+
+ return OK;
+}
+
+/************************************************************************************
+ * Name: pic32mx_usbsuspend
+ *
+ * Description:
+ * Board logic must provide the stm32_usbsuspend logic if the USBDEV 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.
+ *
+ ************************************************************************************/
+
+void pic32mx_usbsuspend(FAR struct usbdev_s *dev, bool resume)
+{
+ /* Do nothing */
+}
+
+#endif /* CONFIG_PIC32MX_USBDEV */
diff --git a/nuttx/configs/pic32-starterkit/src/up_usbterm.c b/nuttx/configs/pic32-starterkit/src/up_usbterm.c
new file mode 100644
index 000000000..012e8a5c0
--- /dev/null
+++ b/nuttx/configs/pic32-starterkit/src/up_usbterm.c
@@ -0,0 +1,105 @@
+/************************************************************************************
+ * configs/pic32-starterkit/src/up_usbterm.c
+ * arch/arm/src/board/up_usbterm.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ************************************************************************************/
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <debug.h>
+
+#include <nuttx/usb/usbdev.h>
+
+#include "pic32mx-internal.h"
+#include "starterkit_internal.h"
+
+#if defined(CONFIG_PIC32MX_USBDEV) && defined(CONFIG_EXAMPLES_USBTERM_DEVINIT)
+
+/************************************************************************************
+ * Definitions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Private Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/****************************************************************************
+ * Name:
+ *
+ * Description:
+ * If CONFIG_EXAMPLES_USBTERM_DEVINIT is defined, then the example will
+ * call this user provided function as part of its initialization.
+ *
+ ****************************************************************************/
+
+int usbterm_devinit(void)
+{
+ /* The PIO32 Starter Kit has no way to know when the USB is connected. So
+ * we will fake it and tell the USB driver that the USB is connected now.
+ *
+ * If examples/usbterm is built as an NSH built-in application, then
+ * pic32mx_usbattach() will be called in nsh_archinitialize().
+ */
+
+#ifndef CONFIG_EXAMPLES_USBTERM_BUILTIN
+ pic32mx_usbattach();
+#endif
+ return OK;
+}
+
+/****************************************************************************
+ * Name:
+ *
+ * Description:
+ * If CONFIG_EXAMPLES_USBTERM_DEVINIT is defined, then the example will
+ * call this user provided function as part of its termination sequence.
+ *
+ ****************************************************************************/
+
+void usbterm_devuninit(void)
+{
+ /* Tell the USB driver that the USB is no longer connected */
+
+ pic32mx_usbdetach();
+}
+
+#endif /* CONFIG_PIC32MX_USBDEV && CONFIG_EXAMPLES_USBTERM_DEVINIT */
diff --git a/nuttx/configs/sure-pic32mx/README.txt b/nuttx/configs/sure-pic32mx/README.txt
index 4766823ab..e21325984 100644
--- a/nuttx/configs/sure-pic32mx/README.txt
+++ b/nuttx/configs/sure-pic32mx/README.txt
@@ -471,7 +471,7 @@ Where <subdir> is one of the following:
as NSH built-in built in functions. All require the following
basic setup in your .config to enable USB device support:
- CONFIG_USBEV=y : Enable basic USB device support
+ CONFIG_USBDEV=y : Enable basic USB device support
CONFIG_PIC32MX_USBDEV=y : Enable PIC32 USB device support
examples/usbterm - This option can be enabled by uncommenting