<?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>topic MQX 4.0 USB HID Interrupt Polling Interval in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-0-USB-HID-Interrupt-Polling-Interval/m-p/698024#M17525</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi-&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Our K20D72M based USB HID host has been working fine until recently we noticed that the HID host adds ~100ms delay (100 SOFs as shown in attached) if host sees a NAK for an IN transfer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is it requested to use the 1ms(or 10ms) polling interval (got from ENDPOINT descriptor) for interrupt transfer to keep polling USB HID device instead of waiting for 100ms&amp;nbsp;so that the delay will be minimized.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Digging a bit into host driver,&amp;nbsp;inside _usb_khci_task() of&amp;nbsp;khci.c, there is a 100ms delay if the message queue is empty&lt;/P&gt;&lt;P&gt;&amp;nbsp;// look for interrupt transaction&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; if ((_usb_khci_get_hot_int_tr(usb_host_ptr, &amp;amp;msg) != 0) || (!seq_ints--)) {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; seq_ints = 10;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_lwmsgq_receive(usb_host_ptr-&amp;gt;tr_que, (uint_32 *) &amp;amp;msg, LWMSGQ_RECEIVE_BLOCK_ON_EMPTY, &lt;STRONG&gt;USBCFG_KHCI_WAIT_TICK&lt;/STRONG&gt;, 0) == MQX_OK)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (msg.pipe_desc-&amp;gt;G.PIPETYPE == USB_INTERRUPT_PIPE)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _usb_khci_add_int_tr(usb_host_ptr, &amp;amp;msg, msg.pipe_desc-&amp;gt;G.INTERVAL);&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; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Questions are:&lt;/P&gt;&lt;P&gt;1. If the interrupt polling interval is respected in MQX 4.0 USB host driver?&lt;/P&gt;&lt;P&gt;2. Why the 100ms wait above is added if there is no pending message? Is it the reason we see 100ms delay?&lt;/P&gt;&lt;P&gt;3. If the polling interval is not respected, how to fix it?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thanks and regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hui&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 03 Oct 2017 22:24:49 GMT</pubDate>
    <dc:creator>huishao2</dc:creator>
    <dc:date>2017-10-03T22:24:49Z</dc:date>
    <item>
      <title>MQX 4.0 USB HID Interrupt Polling Interval</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-0-USB-HID-Interrupt-Polling-Interval/m-p/698024#M17525</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi-&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Our K20D72M based USB HID host has been working fine until recently we noticed that the HID host adds ~100ms delay (100 SOFs as shown in attached) if host sees a NAK for an IN transfer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is it requested to use the 1ms(or 10ms) polling interval (got from ENDPOINT descriptor) for interrupt transfer to keep polling USB HID device instead of waiting for 100ms&amp;nbsp;so that the delay will be minimized.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Digging a bit into host driver,&amp;nbsp;inside _usb_khci_task() of&amp;nbsp;khci.c, there is a 100ms delay if the message queue is empty&lt;/P&gt;&lt;P&gt;&amp;nbsp;// look for interrupt transaction&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; if ((_usb_khci_get_hot_int_tr(usb_host_ptr, &amp;amp;msg) != 0) || (!seq_ints--)) {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; seq_ints = 10;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_lwmsgq_receive(usb_host_ptr-&amp;gt;tr_que, (uint_32 *) &amp;amp;msg, LWMSGQ_RECEIVE_BLOCK_ON_EMPTY, &lt;STRONG&gt;USBCFG_KHCI_WAIT_TICK&lt;/STRONG&gt;, 0) == MQX_OK)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (msg.pipe_desc-&amp;gt;G.PIPETYPE == USB_INTERRUPT_PIPE)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _usb_khci_add_int_tr(usb_host_ptr, &amp;amp;msg, msg.pipe_desc-&amp;gt;G.INTERVAL);&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; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Questions are:&lt;/P&gt;&lt;P&gt;1. If the interrupt polling interval is respected in MQX 4.0 USB host driver?&lt;/P&gt;&lt;P&gt;2. Why the 100ms wait above is added if there is no pending message? Is it the reason we see 100ms delay?&lt;/P&gt;&lt;P&gt;3. If the polling interval is not respected, how to fix it?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thanks and regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hui&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Oct 2017 22:24:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-0-USB-HID-Interrupt-Polling-Interval/m-p/698024#M17525</guid>
      <dc:creator>huishao2</dc:creator>
      <dc:date>2017-10-03T22:24:49Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.0 USB HID Interrupt Polling Interval</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-0-USB-HID-Interrupt-Polling-Interval/m-p/698025#M17526</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Hui:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If there is no pending messages, khci task will be blocked for &lt;STRONG&gt;USBCFG_KHCI_WAIT_TICK&lt;/STRONG&gt; time (100ms by default). then CPU will be released from KHCI usb task to serve other tasks.&amp;nbsp; This is an multi-task environment .&amp;nbsp; Of course, you can modify this value. The minimum is 1， but that will result in too much overhead.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Daniel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 30 Nov 2017 07:53:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-0-USB-HID-Interrupt-Polling-Interval/m-p/698025#M17526</guid>
      <dc:creator>danielchen</dc:creator>
      <dc:date>2017-11-30T07:53:52Z</dc:date>
    </item>
  </channel>
</rss>

