by FHuettig » Wed Jul 16, 2014 6:55 pm
Hi all,
First, I want to assure everyone that we do take this issue seriously and are not trying to sweep anything under the rug. The hardware design was based on the zedboard which seemed like the best reference available. We have spent quite a bit of time on this and have also involved the author of the USB driver, he hasn't been able to help either. When the boards are built every one is tested by connecting it to a USB keyboard, mouse, and flash drive, every one of those peripherals must work or the board will not be shipped. Obviously we can't test every possible device nor can we take the time to make sure every board works a large number of times in a row, but USB is a standard plus we're using a PHY that comes from a reputable manufacturer and has been used with the Zynq in other systems, so it -should- work. Please understand we are as bothered by this as you are and if we could fix it with a simple change we would.
Here's my take, and I use these boards every day in different configurations plus I've looked at boards that have been sent back but seem to work when we get them. I don't think this has anything to do with "long" vs. "short" cables or any special "just right impedance" etc., I use different cables from 6" to 15' and they all work. When it fails the driver does not find the PHY at all, it's not just that it can't find a particular external peripheral. What I DO see consistently is that if you use the reset button OR power-cycle the board without waiting long enough then the OS will not be able to initialize USB and it won't work. I've tried this a lot and my experience is if the power has been off for at least 15 seconds then USB will come up every time. I say this as a recommendation not an official edict, but before you give up on your board please try it from power-on, using the latest SD image, and do not use the reset button. My guess is that something in the PHY or in the Zynq's USB module does not get reset properly from the reset signal, but it does come up as long as the power has been off long enough. That's as far as I can debug it for now, we'll see if there are changes in behavior with the upcoming new kernel & drivers and at that point I may have more visibilty into just what goes on during initialization.
One thing that made this problem much more prevalent in the past (by which I mean a month ago!) was that the OS used to often stall during initialization (the "Parallella perpetual penguin problem") which we tracked down to something not liking the default state of the UART RX line. When that line was pulled low (which it should be when nothing is connected, to indicate a "break" condition), and the UART was enabled as the default TTY, the OS would often hang during boot. The natural reflex in that case is to hit the reset button, which would then cause the USB failure when the OS did boot. We have since fixed that in the devicetree by removing the UART as the default console, and now I never see the PPPP any more. Since there is now rarely a need to reset the system (in my experience) then I dont' see USB problems any more. Other users have confirmed this, YMMV.
Again, just my $.02.
-- Fred -- Hardware Guy --