Hardware documentation jornada700 usbhost
From JLiMe.com
Contents |
About
The SA1111 companion chip present in HP Jornada 7xx machines does have USB Host functionality. Unfortunately HP decided not to provide USB connector.
I am currently trying to develop a way to add host USB connector. This page describes progress I make.
Please note that currently this doesnt work, I am working on it! I don't take any responsibility for eventual damages to your hardware. If you attempt to add USB host to your jornada, you are responsible for the result.
Kernel support
TODO. You will need a 2.6.32 kernel from git (Kernel development compiling hp700) or from here.
Finding USB host vias on the mainboard
SA1111 is contained in a 256pin (16 rows of 16 pins) mini-BGA (Ball Grid Array) package. According to SA1111 documentation (page 175) USB host pins are as follows:
- USB_PLUS (green - First wire of USB data link pair): H3
- USB_MINUS (white - Second wire of USB data link pair): G1
- USB_PWRCNTL (red - Output signal enabling power to the usb port): H4
- USB_PWR_SENSE (blue - Input signal indicating overcurrent condition - active low): K5
This is the packaging image with highlighted USB host pins as seen from bottom (PCB side):
and from top (chip side):
I have developed a method to access any pin under the BGA package using thin winding wire and an old toothbrush and found out that USB host signals are indeed present on the board in these places (this is the part of bottom side of the mainboard hidden under black adhesive material placed between pcmcia socket and the board):
and from top side (here you can easily find additional GND - black and 5V - red pads):
Yellow circle in the first photo shows a clamp which needs to be replaced with a ~ 10kOhm resistor if you want to utilize a power control chip like TPS2015.
Modding the device
Getting the mainboard out
First thing you need to do is to disassemble your jornada (be careful with hinge cover latches, they are very fragile) and separate the mainboard from everything else.
Removing the PCMCIA slot
Then you have to carefully remove the metal shield from the pcmcia slot. It is attached to the mainboard with two screws on the back (these are case screws, so you don't need to worry about them now) and two soldering points near the front. To separate them you need to desolder these two points (the other one is in the back, don't mind the supporting bluetooth dongle):
Beware that these pads tend to separate from the board, so you will have to be gentle and push the two sides of a shield pin together.
After disassembling the shield remove the black adhesive cover from underneath it.
Preparing vias
You will need to solder wires to the vias shown above. I have chosen to access USB_PLUS and USB_MINUS points from the top, not bottom. To be able to solder anything to them, you have to scrub protective paint off them (very carefully!). Power pads are available without scrubbing.
Preparing thin wires
You will need to solder wires to prepared vias. These are quite fragile, so I have decided to use thin transformer winding enameled wire (about 0.1-0.15mm in diameter). I have twisted them in pairs and put inside a regular wire coating (coating of a standard solid ethernet wire should do). This way I will rather break the wire than separate via from the mainboard, moreover it fits better between mainboard components. It looks like this:
Building an interface
In theory SA1111 could be attached directly (or almost directly) to the USB port, but it shouldn't be done. I have prepared my interface based on Intel Neponset (SA1111 development module) documentation (page 12). I salvaged needed parts from a fried laptop motherboard. I replaced TPS2015 with TPS2043. This is the final result (resistor values are incorrect, I need to get proper ones):
The absolute minimum you will probably need are four resistors (two in series and two parallel to data lines). But such setup may be dangerous for the SA1111 (surges) and Jornada's internal power supply (overloads).
If you are using a chip like TPS2015 or similar, you HAVE to replace a clamp (surrounded by a yellow circle in one of the images above) on the mainboard with a 10kohm resistor (or similar). This is a pullup resistor for the open-drain output of the power control chip.
Building in an USB connector
To use the USB host you need to have a connector. I have decided to remove the built in phone line interface, because I have never used and probably never will. The USB interface fits nicely in its place:
You can solder the USB connector to the mainboard in a way that it will be available through the hole where the phone jack was. I have desoldered an USB connector from the same fried laptop motherboard:
You need to grind it a bit and remove excess parts so that it fits in place. This is how I have mounted it (right below the serial connector):
Remember to solder it firmly. This connector will have to withstand a lot of force.
All you need for pleasant looks is to craft a piece that will cover the remaining space (phone jack is much bigger than an USB connector):
Note the dents which provide room for springing elements in the connector.
Next step I had to take was to grind the bottom of the case a bit so that the connector would fit (note that the CF slot opener holder had to be cut a bit too):
This is the final look:
Wiring it all together
It should look somewhat like this:
I found plain office sticky tape to be useful when arranging wires.
The problem
Well, it just doesn't work.
Wiring is probably correct, because:
- host is cycling the port power on modprobe ohci-hcd (what means that USB_PWRCNTL is properly located),
- shorting USB_PWR_SENSE to GND prevents host from operating (overcurrent signal),
- system can retrieve idProduct and idVendor from the device - that means that host and device can communicate - USB_PLUS and USB_MINUS lines are ok.
But nothing else works - host times out on any attempt to accessing the device (even binding a driver to it). What is more, ohci-hcd tends to block rmmod. OHCI HCD driver probably needs some Jornada 720 specific additions.
^EDITED at 22.12.'09 by Matthew@CRO
After searching for information’s, I’m sure that drivers need change prior work state of USB host functionality.
On web site [1], some info can be found. These guys has done driver support for SA1111 Audio and USB host. On USB Host part, at ARM section [2], I had mentioned this because maybe some co-work can be done
In sense of driver support one might look at these pages: ARM OHCI support [3]
Config.in change [4]
Use of USB subsystem with SA-1111 as host [5]
Maybe this can be of some help, not for USB host: [6]
