Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No SetAddress() recovery interval observed in enumeration.cpp #87

Open
liudr opened this issue Apr 20, 2022 · 0 comments
Open

No SetAddress() recovery interval observed in enumeration.cpp #87

liudr opened this issue Apr 20, 2022 · 0 comments

Comments

@liudr
Copy link

liudr commented Apr 20, 2022

case 0: // read 8 bytes of device desc, set max packet, and send set address

This is the case that enqueues SET_ADDRESS request and returns to the caller (ISR). I didn't see an observation of the 2ms SetAddress() recovery interval, per USB 2.0 page 246 9.2.6.3

What I've clocked with my analyzer is as short as 0.25ms between the SET_ADDRESS request and the next request to get the full device descriptor. This may not cause issues on some newer devices but I've just seen an older USB 2.0 device having trouble responding to the get-full-dev-desc request that was immediately issued after set_addr. Its response was a bit slow, taking some time to accept the ZLP OUT after the INs of get-full dev-desc and produced "unexpected PINs" according to my analyzer. I glanced at other devices, more recent ones. They never issue NAK or NYET to a ZLP OUT after sending IN data to host. So is it possible to either add a delay such as delayMicroseconds() or else an extra state to wait out the 2ms? This older device takes a couple of ms to accept the ZLP OUT after transmitting some IN data. It's 10-yr old.

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant