JTAG for the LART

Before you can run an operating system on the LART, you have to write a bootloader to the flash. The LART team uses a special external flash board; for most people that's not really a solution because some special hardware is required to (re-)program that board.

Fortunately, Intel has a documented hack to program flash memory through the SA1100 JTAG interface. Nonetheless it took quite some time before everything was ported to Linux and the correct hardware was built.

Nicolas Pitre first ported Intel's Jflash (legal info) utility from Windows to Linux, Steve Wiseman hacked it a bit further so it worked with the LART (Jflash was intended for the Intel Assabet which has an SA1110 CPU). Finally, Holly Gates designed a dongle so you can connect your LART directly to the parallel port.

Pictures

Some pictures courtesy of Holly Gates. JTAG pictures", "left"); lrow('[Click to enlarge] A LART with the JTAG dongle attached.', "", ""); zrow(); lrow('[Click to enlarge] And a close-up of the dongle.', "", ""); erow(); ?>

Download

Usage

Using the JTAG programmer is quite easy:

Connect a parallel cable to you computer's printer port, connect the JTAG dongle to the cable. Connect the other end of the JTAG dongle to the LART. Powerup the LART. Have a copy of blob ready, and use the following command (as root): root@arthur:jflash-linux # ./Jflash-linux blob-1.0.7b using printer port at 378 Seems to be a pair of 28F160F3, bottom boot. Good. Starting erase for da5 bytes Erasing block 0 Erasing done Starting programming Writing flash at hex address 220, 15.57% done Writing flash at hex address 4b0, 34.35% done Writing flash at hex address 750, 53.59% done Writing flash at hex address 9f0, 72.83% done Writing flash at hex address c90, 92.07% done Programming done Starting verify Verifying flash at hex address 7a2, 55.94% done Verification successful! root@arthur:jflash-linux # ', "", ""); erow(); ?>

In our first experiments, we have measured a throughput of 630 bytes/s. If the download is successful, the LART will immediately reset itself and run blob. If you have a terminal (or terminal emulator) connected to the serial port, you will see blob booting: Consider yourself LARTed! Running from internal Flash. Starting the memory tester... Zeroing memory...0xD0000000', "", ""); erow(); ?>

Notes

There is a small chance that the dongle doesn't work. You may get one of the following error messages when using Jflash-linux: error, failed to read device ID ACT: 0000 0000000000000000 00000000000 0 EXP: X001 0001000010000100 00000110101 1 failed to read device ID for the SA-1100', "", ""); erow(); ?> error, failed to read device ID ACT: 1111 1111111111111111 11111111111 1 EXP: X001 0001000010000100 00000110101 1 failed to read device ID for the SA-1100', "", ""); erow(); ?>

If that's the case, put a 100 ohm resistor between pins 6 (+3.3V) and 7 (nTRST) on the JTAG connector. In this way nTRST will be pulled to +3.3V so the JTAG bus won't be able to reset itself.

Credits

This is an external project. The LART team wishes to thank Nicolas Pitre, Steve Wiseman, and Holly Gates for their efforts.