<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Kinetis Microcontrollers中的主题 Re: Bus timeout on K20 USB host transfers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756158#M46099</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Avelino&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Each time the USB host sends a new SETUP it needs the data token to be re-synchronised since the next transmitted one is DATA0 and the next received one will be DATA1.&lt;BR /&gt;If you have incorrect data tokens being sent or expected the transfers will fail, which is presumably what is happening.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It makes sense to monitor the operation with a USB analyser since such problems will be easily to identify.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;You can also take a look at the uTasker project since it contains USB host mode operation and emulation of this and the USB host controller which allows the driver code to be checked: It will immediately signal problems with data toggling errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is what the emulation of the connection of a (non-formatted) memory stick looks like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;USB FS device detected&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;USB device information ready:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;USB2.0 device with 64 byte pipe&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Vendor/Product = 0x1d0d/0x0213&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Manufacturer = "TDKMedia"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Product = "CDC&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Serial Number = "12345"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Bus-powered device (max. 200mA) with 1 interface(s)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Mass Storage Class : Sub-class = 0x06 interface protocol = 0x50&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Endpoints:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;2 = BULK IN with size 64&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;2 = BULK OUT with size 64&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;3 = INTERRUPT IN with size 2 (polling interval = 1ms)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Enumerated (1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;LUN = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI INQUIRY -&amp;gt; Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI REQUEST SENSE -&amp;gt; Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI FORMAT CAP. -&amp;gt; (3:512:16777216) Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI READ CAP. -&amp;gt; (16785408:1016575) Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Mem-Stick mounting...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Non-formatted Memory stick&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;whereby the endpoint 0 transmissions during the enumeration phase are:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x00 0x02 0x00 0x00 0xFF 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x00 0x03 0x00 0x00 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x01 0x03 0x09 0x04 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x02 0x03 0x09 0x04 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x03 0x03 0x09 0x04 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0xA1 0xFE 0x00 0x00 0x00 0x00 0x01 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you use the open source version as reference you can either cut out the parts of the enumeration state-machine that you don't want or copy its operation to your environment.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;The minimal frames that you are sending would be :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 &lt;BR /&gt;and&lt;BR /&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN&gt;Kinetis: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis.html&lt;/A&gt;&lt;BR /&gt;Kinetis K20:&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FFRDM-K20D50M.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/FRDM-K20D50M.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTWR-K20D50M.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/TWR-K20D50M.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTWR-K20D72M.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/TWR-K20D72M.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTEENSY_3.1.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/TEENSY_3.1.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FtinyK20.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/tinyK20.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN&gt;Free Open Source solution: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fgithub.com%2FuTasker%2FuTasker-Kinetis" rel="nofollow" target="_blank"&gt;https://github.com/uTasker/uTasker-Kinetis&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;Working project in 15 minutes video: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fyoutu.be%2FK8ScSgpgQ6M" rel="nofollow" target="_blank"&gt;https://youtu.be/K8ScSgpgQ6M&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;For better, faster, cheaper product developments consider the uTasker developer's version, professional Kinetis support, one-on-one training and complete fast-track project solutions to set you apart from the herd : &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fsupport.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/support.html&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 02 Apr 2018 20:00:23 GMT</pubDate>
    <dc:creator>mjbcswitzerland</dc:creator>
    <dc:date>2018-04-02T20:00:23Z</dc:date>
    <item>
      <title>Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756157#M46098</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;I am writting a simple USB host example code from scratch (without libraries). A minimalistic host that detects a USB device plugged, sends a SET_ADDRESS(1) setup packet (with all seems to be ok until here) and runs into "bus timeout" when send a second SET_CONFIGURATION setup packet:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void usbHostInit() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // usbotg clock gate enable&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC4 |= 0x00040000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // hard reset the usb module&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_USBTRC0 |= 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (USB0_USBTRC0 &amp;amp; 0x80)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable usb transceiver (disable suspend state)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_USBCTRL &amp;amp;= 0x7F;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear interrupt flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ISTAT = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ERRSTAT = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_OTGISTAT = 0xFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_USBTRC0 |= 0x40;&amp;nbsp;&amp;nbsp;&amp;nbsp; // undocumented&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure both d+ and d- pulldown resistors&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_OTGCTL = 0x30;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable ATTACH interrupt&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_INTEN |= 0x40;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable usbotg irq&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_SER[USBOTG_IRQ &amp;gt;&amp;gt; 5] = (1ULL &amp;lt;&amp;lt; (USBOTG_IRQ &amp;amp; 0x1F));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable host mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_CTL |= 0x08;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disable SOF generation&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_CTL &amp;amp;= 0xFE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure BDT&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset((void *) usbBufferDescriptorTable, 0, 512);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_BDTPAGE1 = (((uint32_t) usbBufferDescriptorTable) &amp;gt;&amp;gt; 8) &amp;amp; 0x000000FF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_BDTPAGE2 = (((uint32_t) usbBufferDescriptorTable) &amp;gt;&amp;gt; 16) &amp;amp; 0x000000FF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_BDTPAGE3 = (((uint32_t) usbBufferDescriptorTable) &amp;gt;&amp;gt; 24) &amp;amp; 0x000000FF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbHostStatus = USB_HOST_STATUS_IDLE;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void usbISR() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t istat = USB0_ISTAT;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (istat &amp;amp; 0x40) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // usb device attached&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disable all usb interrupts&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_INTEN = 0x00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set packet size to 8 bytes (minimum)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_SOFTHLD = 18;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // check device speed&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(USB0_CTL &amp;amp; 0x80)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // low speed device&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ADDR = 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // host without hub = 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ENDPT0 = 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // full speed device&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ADDR = 0x00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ENDPT0 = 0x00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send usb reset for 10 ms&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_CTL |= 0x10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wait10ms();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_CTL &amp;amp;= 0xEF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start generation of SOF packets&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_CTL |= 0x01;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set device address to 0 (keep low speed bit)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ADDR &amp;amp;= 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ENDPT0 |= 0x1D;&amp;nbsp;&amp;nbsp;&amp;nbsp; // txen, rxen, enable setup transfers&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure endpoint 0 for tx a SET_ADDRESS(1) setup token&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UsbSetupPacket *setupPacket = (UsbSetupPacket *) txBuffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;bmRequestType = 0x00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;bRequest = 0x05;&amp;nbsp;&amp;nbsp; // 5 = set_address&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;wValue = 1;&amp;nbsp;&amp;nbsp; // 1 = address&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;wIndex = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;wLength = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenTx.buffer = (uint8_t *) txBuffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenTx.r = (((uint32_t) 8) &amp;lt;&amp;lt; 16) | 0x80;&amp;nbsp;&amp;nbsp; // 8 bytes, data0, own&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_TOKEN = 0xD0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setup token&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable transfer completed and disable attach interrupt&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_INTEN = 0x08;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbHostStatus = USB_HOST_STATUS_WAIT_SET_ADDRESS_SETUP_TX;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ISTAT = 0x40;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (istat &amp;amp; 0x08) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // usb transfer completed&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (usbHostStatus == USB_HOST_STATUS_WAIT_SET_ADDRESS_SETUP_TX) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenRx.buffer = (uint8_t *) rxBuffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenRx.r = (((uint32_t) 0) &amp;lt;&amp;lt; 16) | 0xC0;&amp;nbsp; // 0 bytes, data1, own&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_TOKEN = 0x90;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in token&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbHostStatus = USB_HOST_STATUS_WAIT_SET_ADDRESS_IN_RX;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (usbHostStatus == USB_HOST_STATUS_WAIT_SET_ADDRESS_IN_RX) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;STRONG&gt;AT THIS POINT I GET A DATA1 PID FROM BUFFER DESCRIPTOR (I THINK THAT IS CORRECT, IS'N IT?)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure device address = 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ADDR |= 0x01;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // reset to even banks again (the "bus timeout" appears reseting to even banks or not reseting at all)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_CTL |= 0x02;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send SET_CONFIGURATION(1) setup packet&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UsbSetupPacket *setupPacket = (UsbSetupPacket *) txBuffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;bmRequestType = 0x00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;bRequest = 0x09;&amp;nbsp; // 9 = set_configuration&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;wValue = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 1st configuration&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;wIndex = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setupPacket-&amp;gt;wLength = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenTx.buffer = (uint8_t *) txBuffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenTx.r = (((uint32_t) 8) &amp;lt;&amp;lt; 16) | 0x80;&amp;nbsp;&amp;nbsp; // 8 bytes, data0, own&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setup token&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_TOKEN = 0xD0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbHostStatus = USB_HOST_STATUS_WAIT_SET_CONFIGURATION_SETUP_TX;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (usbHostStatus == USB_HOST_STATUS_WAIT_SET_CONFIGURATION_SETUP_TX) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;STRONG&gt;BUT HERE I GET A BUS TIMEOUT PID FROM BUFFER DESCRIPTOR&amp;nbsp; (TOK_PID = 0) :-(&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenRx.buffer = (uint8_t *) rxBuffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbBufferDescriptorTable[0].evenRx.r = (((uint32_t) 0) &amp;lt;&amp;lt; 16) | 0xC0;&amp;nbsp; // 0 bytes, data1, own&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_TOKEN = 0x90;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in token&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbHostStatus = USB_HOST_STATUS_WAIT_SET_CONFIGURATION_IN_RX;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (usbHostStatus == USB_HOST_STATUS_WAIT_SET_CONFIGURATION_IN_RX) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure endpoint 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ENDPT1 = 0x19;&amp;nbsp;&amp;nbsp;&amp;nbsp; // rxen&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbHostStatus = USB_HOST_STATUS_IDLE_CONFIGURED;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ISTAT = 0x08;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB0_ISTAT = 0xFF;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have tested different setup commands and always get the same error: The first setup packet returns a PID of a non error but the second setup packet generates a TOK_PID value of 0x00 (bus timeout) instead of DATA0/DATA1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can any body help me? Thanks in advance!!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 31 Mar 2018 22:35:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756157#M46098</guid>
      <dc:creator>avelinoherrera</dc:creator>
      <dc:date>2018-03-31T22:35:13Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756158#M46099</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Avelino&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Each time the USB host sends a new SETUP it needs the data token to be re-synchronised since the next transmitted one is DATA0 and the next received one will be DATA1.&lt;BR /&gt;If you have incorrect data tokens being sent or expected the transfers will fail, which is presumably what is happening.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It makes sense to monitor the operation with a USB analyser since such problems will be easily to identify.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;You can also take a look at the uTasker project since it contains USB host mode operation and emulation of this and the USB host controller which allows the driver code to be checked: It will immediately signal problems with data toggling errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is what the emulation of the connection of a (non-formatted) memory stick looks like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;USB FS device detected&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;USB device information ready:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;USB2.0 device with 64 byte pipe&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Vendor/Product = 0x1d0d/0x0213&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Manufacturer = "TDKMedia"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Product = "CDC&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Serial Number = "12345"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Bus-powered device (max. 200mA) with 1 interface(s)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Mass Storage Class : Sub-class = 0x06 interface protocol = 0x50&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Endpoints:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;2 = BULK IN with size 64&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;2 = BULK OUT with size 64&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;3 = INTERRUPT IN with size 2 (polling interval = 1ms)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Enumerated (1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;LUN = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI INQUIRY -&amp;gt; Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI REQUEST SENSE -&amp;gt; Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI FORMAT CAP. -&amp;gt; (3:512:16777216) Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;UFI READ CAP. -&amp;gt; (16785408:1016575) Status transport - Passed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Mem-Stick mounting...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 12px;"&gt;Non-formatted Memory stick&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;whereby the endpoint 0 transmissions during the enumeration phase are:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x00 0x02 0x00 0x00 0xFF 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x00 0x03 0x00 0x00 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x01 0x03 0x09 0x04 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x02 0x03 0x09 0x04 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x80 0x06 0x03 0x03 0x09 0x04 0x21 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0xA1 0xFE 0x00 0x00 0x00 0x00 0x01 0x00 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier\ new, courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DATA1] ZERO-DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you use the open source version as reference you can either cut out the parts of the enumeration state-machine that you don't want or copy its operation to your environment.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;The minimal frames that you are sending would be :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 &lt;BR /&gt;and&lt;BR /&gt;SETUP&amp;nbsp;&amp;nbsp; [DATA0] 0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN&gt;Kinetis: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis.html&lt;/A&gt;&lt;BR /&gt;Kinetis K20:&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FFRDM-K20D50M.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/FRDM-K20D50M.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTWR-K20D50M.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/TWR-K20D50M.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTWR-K20D72M.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/TWR-K20D72M.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTEENSY_3.1.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/TEENSY_3.1.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FtinyK20.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/kinetis/tinyK20.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN&gt;Free Open Source solution: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fgithub.com%2FuTasker%2FuTasker-Kinetis" rel="nofollow" target="_blank"&gt;https://github.com/uTasker/uTasker-Kinetis&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;Working project in 15 minutes video: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fyoutu.be%2FK8ScSgpgQ6M" rel="nofollow" target="_blank"&gt;https://youtu.be/K8ScSgpgQ6M&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;For better, faster, cheaper product developments consider the uTasker developer's version, professional Kinetis support, one-on-one training and complete fast-track project solutions to set you apart from the herd : &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fsupport.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/support.html&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Apr 2018 20:00:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756158#M46099</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2018-04-02T20:00:23Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756159#M46100</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mark,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you very much for your response! The only way to generate DATA0 or DATA1 packets is writting the descriptor table just before writting USB0_TOKEN, isn't it? I will attempt to read the uTasker project.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Apr 2018 14:40:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756159#M46100</guid>
      <dc:creator>avelinoherrera</dc:creator>
      <dc:date>2018-04-03T14:40:56Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756160#M46101</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Avelino&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The data token transmitted is controlled by the DATA_1 flag in the BD control word.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Apr 2018 16:08:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756160#M46101</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2018-04-03T16:08:59Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756161#M46102</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mark,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That is what I am doing when sending the SET_ADDRESS(1) setup packet here:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;usbBufferDescriptorTable[0].evenTx.r = (((uint32_t) 8) &amp;lt;&amp;lt; 16) | &lt;STRONG&gt;0x80&lt;/STRONG&gt;;&amp;nbsp;&amp;nbsp; // 8 bytes, &lt;STRONG&gt;data0&lt;/STRONG&gt;, own&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;when receiving the empty ACK DATA1 packet here:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;usbBufferDescriptorTable[0].evenRx.r = (((uint32_t) 0) &amp;lt;&amp;lt; 16) | &lt;STRONG&gt;0xC0&lt;/STRONG&gt;;&amp;nbsp; // 0 bytes, &lt;STRONG&gt;data1&lt;/STRONG&gt;, own&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;when sending the SET_CONFIGURATION(1) setup packet here:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;usbBufferDescriptorTable[0].evenTx.r = (((uint32_t) 8) &amp;lt;&amp;lt; 16) | &lt;STRONG&gt;0x80&lt;/STRONG&gt;;&amp;nbsp;&amp;nbsp; // 8 bytes, &lt;STRONG&gt;data0&lt;/STRONG&gt;, own&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;and when receiving the corresponding empty ACK DATA1 packet here:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;usbBufferDescriptorTable[0].evenRx.r = (((uint32_t) 0) &amp;lt;&amp;lt; 16) | &lt;STRONG&gt;0xC0&lt;/STRONG&gt;;&amp;nbsp; // 0 bytes, &lt;STRONG&gt;data1&lt;/STRONG&gt;, own&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't know what I am doing wrong :-/. Tranks in advance!!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Apr 2018 09:53:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756161#M46102</guid>
      <dc:creator>avelinoherrera</dc:creator>
      <dc:date>2018-04-05T09:53:48Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756162#M46103</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Avelino&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The TX buffers work in an alternating pattern - therefore you need to send the second OUT data in the oddTx buffer and not the even one (unless you specifically reset the buffer usage).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Beware that the ODD and EVEN buffer usage is not the same as the ODD and EVEN data usage. The first is more a software concept and the second is related to the USB protocol (one can send DATA_0 or DATA_1 types in either ODD or EVEN buffers - &lt;EM&gt;it is the buffer descriptor's control word that defines this&lt;/EM&gt;).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have attached a short video showing its operation when just the &lt;EM&gt;address&lt;/EM&gt; and&amp;nbsp; &lt;EM&gt;configuration&lt;/EM&gt; are set (I manipulate the operation to just do these two steps and it is seen that the tx buffer swaps from even to odd).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Apr 2018 23:10:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756162#M46103</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2018-04-05T23:10:32Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756163#M46104</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mark,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The error occurs both when reuse the "even" bank or when using the "odd" bank. In the code I have attached to the question I reuse the "even" bank by inserting this code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// reset to even banks again (the "bus timeout" appears reseting to even banks or not reseting at all)&lt;BR /&gt;USB0_CTL |= 0x02;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Just before transmit second SET_CONFIGURATION(1) setup packet. But the problem persists even if I ommit this line and use the "odd" banks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you!!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Apr 2018 10:17:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756163#M46104</guid>
      <dc:creator>avelinoherrera</dc:creator>
      <dc:date>2018-04-06T10:17:41Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756164#M46105</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Avelino&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Low level USB is fairly tricky (especially with the USB controller in the Coldfire/Kinetis parts) so I think that if you need to develop a new stack it makes sense in investing in a good USB analyser which will aid in working out what is and what isn't working since presently it sounds as though you are working blind.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;If you need a USB application there are existing solution from uTasker or NXP or Segger (low cost professional or free open source/free/expensive professional). If you are developing professionally you can also get support to debug and solve your own code in case this is the solution that is necessary [&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fservices.html" rel="nofollow" target="_blank"&gt;http://www.utasker.com/services.html&lt;/A&gt;&lt;SPAN&gt;]&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Apr 2018 15:31:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756164#M46105</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2018-04-06T15:31:54Z</dc:date>
    </item>
    <item>
      <title>Re: Bus timeout on K20 USB host transfers</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756165#M46106</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for your help!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Apr 2018 15:33:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Bus-timeout-on-K20-USB-host-transfers/m-p/756165#M46106</guid>
      <dc:creator>avelinoherrera</dc:creator>
      <dc:date>2018-04-06T15:33:21Z</dc:date>
    </item>
  </channel>
</rss>

