<p>Kévin Redon has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10360">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">USB: increase USB reset time<br><br>USB reset can be signaled by pulling low USB D+ for at least 10 ms,<br>according to the USB specification. This force a re-enumeration.<br>This time is increased to 20 ms to work with more USB HUBs.<br><br>Some SAM3S based board have external D+ pull-up mechanism (such as<br>SIMtrace) which needs to be used to pull D+ low.<br>This is a legacy mechanism from SAM7S history.<br>This mechanism is not required anymore on the SAM3S, and the qmod<br>does not use it. In this case D+ can be pulled low using PIO.<br>This board difference is not defined on the board header.<br><br>Change-Id: I9b58d8101c2fcf5595026b675728826af26127a3<br>---<br>M firmware/apps/dfu/main.c<br>M firmware/libboard/common/include/board_common.h<br>M firmware/libboard/simtrace/include/board.h<br>M firmware/libcommon/source/usb.c<br>4 files changed, 26 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/60/10360/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/apps/dfu/main.c b/firmware/apps/dfu/main.c</span><br><span>index 74268ad..9dd06ec 100644</span><br><span>--- a/firmware/apps/dfu/main.c</span><br><span>+++ b/firmware/apps/dfu/main.c</span><br><span>@@ -294,11 +294,21 @@</span><br><span> </span><br><span>         TRACE_INFO("USB init...\n\r");</span><br><span>     /* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>  const Pin usb_dp_pullup = PIN_USB_PULLUP;</span><br><span>    PIO_Configure(&usb_dp_pullup, 1);</span><br><span>        PIO_Set(&usb_dp_pullup);</span><br><span style="color: hsl(0, 100%, 40%);">-    mdelay(15);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ const Pin usb_dp = {PIO_PB11, PIOB, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT};</span><br><span style="color: hsl(120, 100%, 40%);">+      PIO_Configure(&usb_dp, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        PIO_Clear(&usb_dp);</span><br><span style="color: hsl(120, 100%, 40%);">+       mdelay(20);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>         PIO_Clear(&usb_dp_pullup);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     USBDFU_Initialize(&dfu_descriptors);</span><br><span> </span><br><span>         while (USBD_GetState() < USBD_STATE_CONFIGURED) {</span><br><span>diff --git a/firmware/libboard/common/include/board_common.h b/firmware/libboard/common/include/board_common.h</span><br><span>index 06d3d6a..1b29680 100644</span><br><span>--- a/firmware/libboard/common/include/board_common.h</span><br><span>+++ b/firmware/libboard/common/include/board_common.h</span><br><span>@@ -114,15 +114,8 @@</span><br><span> #define SIM_PWEN        PIO_PA5</span><br><span> #define VCC_FWD         PIO_PA26</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/** Pin configuration to control USB pull-up on D+</span><br><span style="color: hsl(0, 100%, 40%);">- *  @details the USB pull-up on D+ is enable by default on the board but can be disabled by setting PA16 high</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-#define PIN_USB_PULLUP  {PIO_PA16, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> // Board has UDP controller</span><br><span> #define BOARD_USB_UDP</span><br><span style="color: hsl(0, 100%, 40%);">-// D+ has external pull-up</span><br><span style="color: hsl(0, 100%, 40%);">-#define BOARD_USB_PULLUP_EXTERNAL</span><br><span> </span><br><span> #define BOARD_USB_DFU</span><br><span> #define BOARD_DFU_BOOT_SIZE    (16 * 1024)</span><br><span>diff --git a/firmware/libboard/simtrace/include/board.h b/firmware/libboard/simtrace/include/board.h</span><br><span>index db3a925..6751863 100644</span><br><span>--- a/firmware/libboard/simtrace/include/board.h</span><br><span>+++ b/firmware/libboard/simtrace/include/board.h</span><br><span>@@ -117,6 +117,11 @@</span><br><span> /* SPI flash write protect pin (active low, pulled low) */</span><br><span> #define PIN_SPI_WP    {PA15, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/** Pin configuration to control USB pull-up on D+</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @details the USB pull-up on D+ is enable by default on the board but can be disabled by setting PA16 high</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PIN_USB_PULLUP  {PIO_PA16, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /** USB definitions */</span><br><span> /* OpenMoko SIMtrace 2 USB vendor ID */</span><br><span> #define BOARD_USB_VENDOR_ID USB_VENDOR_OPENMOKO</span><br><span>diff --git a/firmware/libcommon/source/usb.c b/firmware/libcommon/source/usb.c</span><br><span>index e929a05..2864860 100644</span><br><span>--- a/firmware/libcommon/source/usb.c</span><br><span>+++ b/firmware/libcommon/source/usb.c</span><br><span>@@ -576,11 +576,20 @@</span><br><span> {</span><br><span> </span><br><span>        /* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>  const Pin usb_dp_pullup = PIN_USB_PULLUP;</span><br><span>    PIO_Configure(&usb_dp_pullup, 1);</span><br><span>        PIO_Set(&usb_dp_pullup);</span><br><span style="color: hsl(0, 100%, 40%);">-    mdelay(15);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ const Pin usb_dp = {PIO_PB11, PIOB, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT};</span><br><span style="color: hsl(120, 100%, 40%);">+      PIO_Configure(&usb_dp, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        PIO_Clear(&usb_dp);</span><br><span style="color: hsl(120, 100%, 40%);">+       mdelay(20);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>         PIO_Clear(&usb_dp_pullup);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> </span><br><span>   // Get std USB driver</span><br><span>        USBDDriver *pUsbd = USBD_GetDriver();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10360">change 10360</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/10360"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I9b58d8101c2fcf5595026b675728826af26127a3 </div>
<div style="display:none"> Gerrit-Change-Number: 10360 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>