The need to pre-program the Flash on DLPC350 adds a step in manufacturing process, which is especially annoying for fine-pitch Flash BGA packages.
Being able to program the DLPC350 Flash through JTAG would simplify the manufacturing process, provide the ability to "rescue" devices with accidentally erased Flash and make smaller DLP4500 designs possible.
There is little information on boundary scan implementation on DLPC350. The following has been recovered through reverse-engineering and tested a number of times.
The target (device being programmed) will require the full boundary scan connection; this includes a ground reference, the four mandatory JTAG pins (TCK, TMS1, TDI, TDO1), and the TRST# pin. Additionally, the ICTSEN pin must be connected to TRST#, and they should be pulled down to ground through a 3.3k resistor.
This connection allows ICTSEN to be pulled high when JTAG boundary scan is being used, preventing the ARM9 core inside DLPC350 from attempting to control Flash pins. If the board design does not allow access to ICTSEN, JTAG programming may be impossible.
The programming process uses urJTAG, an open source platform for JTAG boundary scan manipulation; Linux platform is recommended for this. First, the most recent (r2039 at time of writing) snapshot should be downloaded from http://sourceforge.net/p/urjtag/svn/HEAD/tree/. Afterwards, patch urjtag-dlpc350-c232hm.diff should be applied, adding support for the DLPC350.
A JTAG pod supported by the urJTAG is required. Tests were performed using the FTDI C232HM-DDHSL-0; it is necessary to use FTDI software to switch its I/O pins to slow slew rate, otherwise JTAG is not reliable. The TRST#/ICTSEN pin should be connected to GPIOL0. Other pods may work if they are supported by urJTAG and provide TRST# control.
The first 32kB from the TI Flash image for DLPC350 should be written to a new file, which we'll call bootloader.bin. This can be achieved, for instance, using the following command: dd if=DLPR350PROM_v1.1.0.bin of=bootloader.bin bs=1024 count=32.
If the HEARTBEAT and FAULT_STATUS LEDs are present on the target, a quick test of the whole JTAG setup can be performed by blinking them. Download dlpc350-led-blink.script and execute the following command: jtag dlpc350-led-blink.script. This should blink both LEDs, then the Flash information should be printed to standard output.
To program the DLPC350 Flash, download dlpc350-program.script and run jtag dlpc350-program.script. If everything goes well, the target can be power-cycled and the DLPC350 will show up on USB. The whole process takes about 5-10 seconds once set up.
At this point the DLPC350 is in the bootloader mode and ready to accept Flash images over USB, for instance from the LightCrafter tool software. Note that not all Flash chips that work with DLPC350 are supported by the LightCrafter PC software; to support the (otherwise highly recommended for its ultra short erase time and small physical size) SST38VF6404 chip, the software had to be modified.