[TriEmbed] USB RNDIS enumeration help needed

Glen Smith mrglenasmith at gmail.com
Thu Feb 27 17:32:16 CST 2025


Did you write the driver or is this another one of those times where you
spend a fair bit of time pulling your hair out checking your own work only
to discover it was someone else that caused the problem?

On Thu, Feb 27, 2025, 2:45 PM Trampas Stern via TriEmbed <
triembed at triembed.org> wrote:

> I figured out that my driver was not sending a zero length packet after
> receiving the RNDIS Initialize message.  This fixed the problem above, and
> now I am on to debugging the next issue.
>
> Thanks
> Trampas
>
> On Thu, Feb 27, 2025 at 9:50 AM Trampas Stern <trampas at gmail.com> wrote:
>
>> I am trying to do USB RNDIS enumeration and having issues.  I have
>> googled and read everything I can find and keep running into issues.   I
>> get the enumeration working and it will work for days on my PC, then at
>> some point it will not work.   I switch hubs, ports and it might work again
>> for days, then stop.
>>
>> I have been using Saleae logic analyzer as well as USB protocol analyzer
>> (Total Phase Beagle device) and have been unable to figure out the issues.
>>
>>
>> My initial thoughts were that Microsoft was doing some
>> predictive analysis on device timing.  That is, I noticed that if the USB
>> request from the host came in too quickly it would cause issues.   I
>> figured that based on the packet NAKs that Microsoft might dynamically
>> change request timing to compensate for slower devices.  I figure this
>> would maximize the bus bandwidth utilization by not sending packets that
>> most likely would be NAK'd.  I am not sure if this is true or not, but
>> sounded reasonable?   I since changed my device to be all interrupt driven
>> for fastest response.  This addressed some issues, but not all of my
>> problems.
>>
>> Now I seem to have hit another issue.  The host sends an RNDIS Initialize
>> message, after which I setup device's USB peripheral to send the
>> RESPONSE_AVAILABLE message, however the host never seems to poll for the
>> RESPONSE_AVAILABLE  and then timeout on the RNDIS Initialize message.
>>
>> I have previously seen this behavior and found that if I delayed setting
>> up the RESPONSE_AVAILABLE message it would sometimes work.  Specifically, I
>> would send the REPONSE_AVAILABLE using main loop verses right away in the
>> interrupt handler and it would work most of the time.  This did not make
>> any sense as that as I understand it the host has to poll for the
>> RESPONSE_AVAILABLE so the timing of configuring peripheral to send message
>> should not matter, since it is all host driven system.  As I understand it
>> the host does an interrupt polling messages to the RNDIS command end point
>> to request the RESPONSE_AVAILABLE.  I am not seeing and polling message
>> from host (Windows) on the RNDIS interrupt end point.  I do see EP0
>> polling, but not ones on the RNDIS command endpoint.
>>
>> I was wondering if anyone had experience with USB and  possibly could
>> offer some advice, education, or help.  I do have all kinds of data
>> captures and logs etc..
>>
>> Thanks!
>> Trampas
>>
>> _______________________________________________
> Triangle, NC Embedded Interest Group mailing list
>
> To post message: TriEmbed at triembed.org
> List info: http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
> TriEmbed web site: https://TriEmbed.org
> To unsubscribe, click link and send a blank message: mailto:
> unsubscribe-TriEmbed at bitser.net?subject=unsubscribe
> Searchable email archive available at
> https://www.mail-archive.com/triembed@triembed.org/
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.triembed.org/pipermail/triembed_triembed.org/attachments/20250227/a3345925/attachment.htm>


More information about the TriEmbed mailing list