We are trying to use the TUSB1210 controller as a USB host. The controller will interface with a High-speed (HS) USB slave device. We are getting the following consistent issue during the HS negotiation (Chirp):
When setting the TUSB1210 device to XCVRSelect = 00, TermSelect=0 and OpMode = 10 (by writing 50h into FuncRegister 4), the DIR line goes high for 3 clock cycles and then sits low at 1 clock cycle. This happens constantly as long as the FuncRegister is configured for Chirp with the slave connected. The data value is 0C/0D.
Here is what this looks like:
As a result the chirp sequence is corrupted. 50% of the time it works correctly (we are seeing squelch after K chrip) as shown below:
You can see Value "0C" which is the squelch we expect after K chirp "0E". But half the time this happens:
So instead we are getting "01" instead of the "00" we expect to see from the peripheral. Also you notice that in this case DIR is high for 3 clock cycles instead of 2.
We have tested this with two different HS peripherals and the issue persists. These peripherals work fine on a PC so the issue seems to be caused by the TUSB1210. There is no visible traffic on the USB bus that may be causing this. Furthermore, normal RX commands on the ULPI interface are only 2 clock cycles long (DIR is high for 2 clock cycles) - not 3 clock cycles.
Anyone have any idea what is going on?
Another question I have, after completion of the K chirp, the host (we) are now supposed to send alternating K J chirps to the peripheral as part of the protocol. Does that mean we are sending data byte "11" for a period and then data byte "00" or are we supposed to send binary 01010101 which would translate into data byte "55"? So are we supposed to send TXCMD NOPID data "11", TXCMD NOPID data "00" or instead TXCMD NOPID data "55" ?