LeapFrog Pollux Platform: FTDI JTAG How To

Background
I had been curious about JTAG ever since I started experimenting with Didj. I had wondered about whether it could be used to investigate our Pollux-based devices.

As we all progressed with our experimentation, Moogle identified the JTAG pads on Didj, and then bcav added a wiki entry on how to use the JTAG port to debug a bootloader on Didj with OpenOCD (Open On-Chip Debugger). We later happily discovered that JTAG pads are clearly labeled on the Leapster Explorer mainboard (in my book, its a Big Win whenever a manufacturer acknowleges our Fundamental Rights!)

I had JTAG experimentation on my list-of-things-to-try for a while, but I didnt want to spend $72 to buy the JTAG dongle bcav used in the wiki entry. (I did have a home-made wiggler cable that I hacked together for use with WRT routers, but I wasn't confident enough that it would fit the bill for this use case. Plus the speed over a parallel port was not great)

Upon learning that that the ftdi2232 chip could be used to bitbang a JTAG connection and that the same part powers many USB-based JTAG cables, I purchased a $30 breakout board that was based on that chip - DLP Design DLP-USB1232H (datasheet).

What follows are the steps I used to make this breakout work with Didj and LX.

Connecting
The table below illustrates how to connect the DLP-USB1232H device pins to Didj and LX. The pinout on the breakout is in the DLP-USB1232H datasheet (pinout is on page 4 and page 7).

IMPORTANT: You also need to connect pins 8 and 9 together on the DLP-USB1232H module in order to configure it to be powered via USB.

Also, the Didj or LX must be powered on.

Software Installation
Install OpenOCD (examples are Ubuntu Lucid)

$ sudo apt-get install openocd

Place this configuration file - name it dlp-usb1232h.cfg - into your openocd /usr/share/openocd/scripts/interfaces directory:

Place the file below, named openocd.cfg (originally described here), into your home directory. (Adjust the srst code for your device, this example is for LX. Didj-specific code is commented):

Usage
To launch OpenOCD from your home directory:

$ sudo /usr/bin/openocd -s /usr/share/openocd/scripts

To access OpenOCD directly, telnet to localhost port 4444:

$ telnet localhost 4444

Usage Examples
Read the registers using the 'mdw phys ' command in OpenOCD. In this example we are reading the MLCCONTROL0 register:

To write registers, use 'mww phys ' In this example we are changing to the MLC to RGB888 mode, setting the H-stride and V-stride appropriately, and then setting the dirty flag:

The reset command will restart the device (Explorer only at this time): >reset To debug bootloaders with GDB, see Didj JTAG How To.

Resources
The DLP-USB1232H is available from various sources, e.g.: Digikey, Mouser, or Saelig.

The module can also be used as a cheap and simple SPI BIOS chip programmer together with the flashrom utility.

To do
Photos