Please note that User Registration has been temporarily disabled due to a recent increase in automated registrations. If anyone needs an account, please request one here: RequestAccount. Thanks for your patience!--Wmat (talk)
Please email User:Wmat if you experience any issues with the Request Account form.

LeapFrog Pollux Platform: FTDI JTAG How To

From eLinux.org
Revision as of 21:52, 3 August 2010 by Nirvous (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Background

When I started experimenting with Didj, I had been curious about JTAG, and 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 (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 they 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).

Pin type DLP-USB1232H pin # Didj Test Pad label LX Test Pad label
TRST 17 TP9 RST
TDI 16 TP10 TDI
TMS 5 TP11 TMS
TCK 18 TP12 TCK
TDO 2 TP13 TDO
(S)RST 13 n/a nRST
GND Either 1 or 10 TP14 GND

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 into your openocd /usr/share/openocd/scripts/interfaces directory:

#
# DLP Design DLP-USB1232H USB-to-UART/FIFO interface module
#
# http://www.dlpdesign.com/usb/usb1232h.shtml
#
interface ft2232
ft2232_device_desc "Dual RS232-HS"
ft2232_layout usbjtag
ft2232_vid_pid 0x0403 0x6010


Place the file (originally described here) into your home directory:

telnet port 4444
source [find interface/dlp-usb1232h.cfg]
jtag_khz 15000
reset_config trst_only
if { [info exists CHIPNAME] } {
  set  _CHIPNAME $CHIPNAME
} else {
  set  _CHIPNAME pollux
}
if { [info exists ENDIAN] } {
  set  _ENDIAN $ENDIAN
} else {
  set  _ENDIAN little
}
if { [info exists CPUTAPID ] } {
  set _CPUTAPID $CPUTAPID
} else {
  # force an error till we get a good number
  set _CPUTAPID 0x07926f0f
}
#jtag scan chain
jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm926ejs -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm926ejs 

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 <address>' command. In this example we are reading the MLCCONTROL0 register:

>halt
>mdw phys 0xc0004024
0xc0004024: 86534024

To write registers, use 'mww phys <address> <value>' 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:

>halt
>mww phys 0xc0004024 0x46534024
>mww phys 0xc0004028 0x00000003
>mww phys 0xc000402c 0x000003c0
>mww phys 0xc0004024 0x4653d034


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.

References

Didj JTAG How To

DLP-USB1232H_and_OpenOCD_based_JTAG_adapter

To do

Photos