Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations GregLocock on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

Question about USB Controllers

Status
Not open for further replies.

Noway2

Electrical
Apr 15, 2005
789
I was wondering if anybody here has any experience with the Philips ISP1161A1 USB controller. I am experiencing an odd problem with this device and I am starting to become at a loss for ideas.

The controller is communicated to through a 16 bit data bus, 1 address line that selects between the "command" port and the "data" port, a read strobe, a write strobe, and a chip select line. Communications to the device consist of writing to the command port the index of the desired device register and then reading from or writing to the data port.

I am finding that when I command the controller to turn power on to the USB ports, which is accomplished by writing values to certain registers, that power momentarilly turns on and then shuts off. The behaviour makes me think that there is either a form of timing issue or a metastability issue, such as double clocking from ringing or reflections. If I place very long delays between each read or write access, the problem appears to be rectified.

As far as I can tell with the logic analyzer, I have implemented the timing well in accordance with the published specs, which creates some confusion as to why the very long delays appear to be helping. Also, to the best of my ability to determine, there is no ringing or stair-stepping on the read and write strobes which have been AC terminated to match the board. My equipment to look at the waveforms is a bit limited as I only have a 300Mhz scope. I am however, using a resistive probe, as suggested by Dr. Howard Jonhson in his High Speed Digital Design book so I should be able to see any effects that are on the few ns scale. With this equipment I was certainly able to detect ringing on the RD and WR lines prior to installing the termination circuitry that disappeared subsequently. The delays I am inserting are only between complete read or write bus cycles as opposed to lengthing the address or data bus settling times.

Does anybody have any suggestions or ideas?
 
Replies continue below

Recommended for you

Is it possible that the chip includes some sort of automatic power management feature and that the chips wakes up, sees that there isn't anything connected, and then decides to go back to sleep ?

I've got a USB hub at home that wakes up when I turn on the downstream printer and I'm fairly sure that it isn't a PC software / driver feature.

 
In this case, the problem appears to happen wether or not I have device attached to the port in addition to occuring somewhat intermittantly.

I have done some more investigating, regarding the signal integrity with a logic analyzer and scope combined. I am seeing some bounce on the data / address lines during the setup phases (as is expected) but the lines are solidly stable in the neighborhood of the rising edges of the read and write strobes. I say that the bounce is expected on these lines because they were not terminated with the plan being that enough settling time would be provided before the read and write strobes occur, which are terminated.

I have discovered something that I find to be quite interesting - one of those Heisenberg effects. After the register writes, I placed a command to read the register that was written. My goal was to determine if I were possibly getting corrupted data being written. What is interesting is that in doing so, the problem has apparently also gone away, in addition to reading the correct values.

I am really starting to think that the published timing in the controller datasheet does not equal the real timing as every time I put enough delay in the command sequence (between commands) it works flawlessly.

As I write this I can think of some more experiments such as move the port reads till after all the write sequences are complete, which would restore the problem timing and hopefully let me see if the output matches the register settings...
 
My (general) advice in such cases would be to go back to basics and just 'make the LED blink'. What I mean is strip it down to its basics and gain control of the most basic possible functions. Once you've got it working, then it goes back to being 'just' a software project with a few minor debugs along the way.

Disclaimer - I don't know anything specific about that chip.

Good luck.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor