Open ronyrus opened 2 years ago
IIRC when we discussed this on Discord, we came to the conclusion that it's caused by the ULPI IO not being registered but driven combinatorially.
The LUT input signals doesn't necessarily all have the same propagation delay, so when two or more inputs toggle in the same cycle, the LUT may briefly see a half-old half-new input state causing it to output the wrong value, causing glitches like this. (Picture an XOR gate with the inputs switching from 00 to 11; in either case the output should be 0, but if it briefly sees 01 or 10 in between you'll get a brief 1 on the output.)
This is not really indicative of a problem; as long as the PHY chip's setup and hold times are not violated, the glitch should be harmless.
This happens from time to time. When asserting STP in the end of TX, all the data lines are supposed to be 0x00 (or 0xFF in some cases), but in steady state. Instead, from time to time a short spike can be observed on D4 and/or D7. The pulse is 0.8v-1.9v with the duration of ~2.5 ns
Spike on D7: (red - STP, blue - D7)
Spike on D4
Seems to be not PHY specific. I was able to reproduce it on "host" and "target" PHYs.
To reproduce I've used the 'simple_device' design from the examples. I'm able to trigger it on D7 with a single 'get_descriptor' control transfer. It gets the STALL response, hence the try-except in the code.
Later on was reproduced by @zyp