Posts Tagged ‘minipro’

Using a TL866II+ programmer to update GCDual firmware

Monday, January 20th, 2020

I have a GCDual board, which is a modification for a Nintendo Gamecube to give it HDMI output. Firmware updates for this little PCB come out occasionally and to apply them requires attaching an EEPROM/flash programmer to the various pins and rewriting the chip directly.

I got wind of the latest 3.0a firmware update that actually lays the groundwork for future updates to be applied through software instead and figured it would be good have this.

There is a video that shows how to do the firmware update however I had a few issues with that process:

  1. I haven’t actually installed the PCB yet, (it’s in my TODO pile). This isn’t actually a problem as in the video, the 3.3V is provided by the Gamecube PSU instead of the programmer, but the programmer can supply this. In theory it should also negate taking precautions to ensure that the programmer doesn’t accidentally short something on the main Gamecube board.
  2. The process is using a CH341A programmer which I don’t have, and if I did get one it seems to be poorly supported on macOS. The programmer looks like it just needs to be able write SPI flash devices.

I do have a TL866II+ programmer which has a 6-pin ICSP port and comparing the pinout of that and the CH341A programmer looks like both programmers have the same required pins. The TL866II+ comes with an ICSP harness that is terminated as 6 individual female sockets so with a piece of pin header I arranged the pins in the correct order. Here is how the programmer expects the pins to be arranged logically:

So it was just a case of marrying those up to the header on the GCDual PCB. For reference it was 1-3, 2-2, 3-1, 4-4, 5-6, 6-5 for each pin on the TL866II+ to the GCDual respectively, with pin #1 on the GCDual being GND. This is what it looks like:

You can then insert the pins into the GCDual PCB and use a bit of light pressure to make contact without the need to solder anything:

Note that you need to bridge the two solder pads marked JP2 at the top right of the PCB in order to do anything with the flash chip otherwise the FPGA will fight with your programmer on the SPI bus when power is applied and you’ll read and/or write garbage.

Now we just need to flash the chip. For driving the programmer, I use the open source minipro rather than the provided software. The only bit of required information is the make & model of the flash chip; the original video shows it being programmed as an M25PE40 but my PCB actually has an MX25L4006E. The datasheets show these two chips are mostly identical anyway however minipro likes to check the chip ID. Writing the new firmware is as simple as the following:

$ minipro -i -p MX25L4006E -s -w GCDual_ADV7125_3.0a.bin
Found TL866II+ 04.2.109 (0x26d)
Activating ICSP...
Chip ID OK: 0xC22013
Warning: Incorrect file size: 346144 (needed 524288)
Erasing... 1.71Sec OK
Protect off...OK
Writing Code...  5.19Sec  OK
Reading Code...  2.48Sec  OK
Verification OK
Protect on...OK

The flags used are: use ICSP instead of the ZIF socket (-i), choose the correct flash chip (-p MX25L4006E), don’t complain that the firmware is smaller than the capacity of the chip (-s), and provide the firmware itself (-w ...).

Remember to remove the solder bridge with some wick prior to installing the PCB.