1 |
9 |
rudi |
|
2 |
|
|
OpenCores.Org USB1.1 Function Controller Success Story
|
3 |
|
|
|
4 |
|
|
As part of the undergraduate program in Computer Engineering at the
|
5 |
|
|
University of Waterloo, all students must participate in a fourth year
|
6 |
|
|
design project. Our team created a PC Oscilloscope, since we had
|
7 |
|
|
frequently encountered problems with a lack of access to oscilloscopes
|
8 |
|
|
when working on our own personal projects. Real oscilloscopes are
|
9 |
|
|
expensive, and definitely outside our student budgets. Our concept was
|
10 |
|
|
to create a cheap, full featured oscilloscope by harnessing a PC’s
|
11 |
|
|
computing power and display ability.
|
12 |
|
|
|
13 |
|
|
When designing the oscilloscope, we quickly concluded that we needed a
|
14 |
|
|
relatively high bandwidth, common and affordable connection between a
|
15 |
|
|
PC and our device. USB was the natural choice. Our school had provided
|
16 |
|
|
us with an Altera Excalibur FPGA development kit, so we began by
|
17 |
|
|
searching for USB Core IP. After a few promising leads, none of the
|
18 |
|
|
companies were willing to donate a USB function controller to our
|
19 |
|
|
project.
|
20 |
|
|
|
21 |
|
|
At this point, Evan Jones remembered hearing about OpenCores, and
|
22 |
|
|
immediately discovered the USB1.1 function controller. We began by
|
23 |
|
|
reading the little documentation that was available. Since the author
|
24 |
|
|
of the component used a Phillips USB tranceiver and Philips does not
|
25 |
|
|
provide samples of that particular part, we ordered samples of a
|
26 |
|
|
nearly pin USB tranceiver from Fairchild Semiconductor. Meanwhile, we
|
27 |
|
|
compiled the component with the Altera Quartus tools.
|
28 |
|
|
|
29 |
|
|
Once the trancievers arrived, we soldered up a quick circuit to connect
|
30 |
|
|
the USB cable to our prototype board. The very first time we connected
|
31 |
|
|
the device to our PC, the PC crashed. We assumed that this was a good
|
32 |
|
|
sign, as at least the PC was seeing the USB device. After some more
|
33 |
|
|
debugging using another computer running Linux, we determined that
|
34 |
|
|
while the device and the PC were communicating, something was going
|
35 |
|
|
wrong. The PC was reporting that the device was sending “babble”.
|
36 |
|
|
|
37 |
|
|
We spent the next few days debugging. First we resoldered our USB
|
38 |
|
|
interface circuit to reduce noise. We manually decoded the signals on
|
39 |
|
|
the USB bus using an oscilloscope. We were stumped. It looked like the
|
40 |
|
|
beginning of the USB enumeration was working correctly, but it would
|
41 |
|
|
still fail and reset the bus.
|
42 |
|
|
|
43 |
|
|
We took a break and returned to it in a few days and redid absolutely
|
44 |
|
|
everything from scratch. This time the PC detected an unknown USB
|
45 |
|
|
device. It turns out that our problem was that we set an incorrect
|
46 |
|
|
setting in the VHDL header for our particular FPGA. With the default
|
47 |
|
|
settings and a recompile, the device worked.
|
48 |
|
|
|
49 |
|
|
It took us a few more weeks until we worked out our software device
|
50 |
|
|
driver and the remainder of the device logic, but that was all
|
51 |
|
|
relatively straightforward. The OpenCores USB function controller
|
52 |
|
|
worked as advertised. If we were to do the project again, we would
|
53 |
|
|
easily be able to get it up and running in a few hours.
|
54 |
|
|
|
55 |
|
|
Evan Jones http://www.eng.uwaterloo.ca/~ejones/
|
56 |
|
|
Mauro Loconsolo 4ydp_waterloo@rogers.com
|
57 |
|
|
Evan Robinson e2robins@uwaterloo.ca
|
58 |
|
|
Sahand Sojoodi sahands@hotmail.com
|
59 |
|
|
|
60 |
|
|
|
61 |
|
|
|
62 |
|
|
|