Logo

Wyse Dx0/Zx0 BIOS Update 

Programming a new BIOS

Programming the Wyse D10DP BIOS

This is straight forward but a bit fiddly. If your BIOS chip is socketed then you may find a pair of tweezers may help.

Also the MX25L1606E is inexpensive - less than a pint of beer from an in-country supplier here in the UK. If yours is socketed you might like to buy one in. That way you have an easy way of back tracking should you encounter any problems along the way. Program the new one. If it all goes pear-shaped you can put the old one back.

The Programmer

First you need something to run the programming software on. I used another thin client that was already running Tiny Core linux. You may already have another system running some flavour of Linux, or you can temporarily boot another PC or thin client from a USB pen drive with Tiny Core Linux, flashrom and BIOS files installed on it.

The BIOS

I downloaded the BIOS files from the Dell support site. At the time of writing the BIOS is version 3.0U and the relevant files, found under the 'ThinOS' option, are Z10G_bios.bin for the Z series, and D10G_bios.bin for the D series.

The BIOS chip

With both the D series and the Z series the BIOS chip is a MX25L1606E 8-pin SOIC. In my small sample I have found it may be either soldered to the mainboard or socketed.

Wyse Dx0D BIOS chip

On the D10D motherboard the BIOS chip is located close to the heat sink and by the Display Port socket. It is marked as CN4700. I have a number of Dx0Ds and with a couple of them the BIOS chip is mounted in a socket. With the others it is soldered to the board. The white arrowhead (top right in the photo) marks pin 1.

Wyse Zx0 BIOS chip On the Z90D7 motherboard the BIOS chip is located close to the battery. It is marked as CN33. I have two Z90D7s, in the one manufactured in 2011 it is soldered to the board, with the other, manufactured a year later, it is socketed.

Wyse Dx0D BIOS chip With the socketed version you will need to remove it for reprogramming. The socket has a 'lid' that is keeping the chip in place. To release it use a small screwdriver blade or similar to push the lid from the end away from pin 1.

Wyse Dx0D BIOS chip This will free a couple of lugs and allow the lid to open after which you can remove the BIOS chip from the socket. Do note that the chip package has a small circular depression that marks pin 1. You need to know this for when you connect the programmer and when you replace the chip in the socket.

Any blob of paint on the chip is something to do with Dell's manufacturing process and does not mark pin 1!

 

Connecting the programmer

This is straight forward:

  1. Plug the programmer into the computer with flashrom and the new BIOS file.
  2. Plug the 'clip' cable into the programmer.
  3. Clip the 'clip' onto the BIOS chip.

In the case where the BIOS chip was soldered in place the Dx0D was disconnected from its power supply.

For step 1 I used a USB extension cable rather than plugging the programmer straight into the thin client I was using.

ch341a programmer cable connection For step 2 you need to make sure you have the orientation correct. The 8-pin connector on the end of the 'clip' cable plugs into the ZIF socket at the end furthest from the lever. Pin 1, marked by the red stripe on the connecting cable, needs to be at the end that is closest to the lever.

ch341a BIOS chip in clip With the free BIOS chip you just need to locate it in the clip in the correct orientation. Pin 1 on the BIOS chip, marked by the small circular indentation, needs to be at the end of the clip where the red stripe on the connecting ribbon cable is.

ch341a programmer cable connection With the model where the BIOS chip is soldered to the board you just need to clip on to the BIOS chip - easier said than done. Once again use the red stripe on the ribbon cable to ensure that the clip is orientated correctly - that end of the clip should be closest to the back panel.

In both cases I found that I had to make several attempts to get the clip connected properly. You'll find out how successful you've been when you try and read the BIOS with flashrom:

tc@tinman:~/ch341a$ sudo ./flashrom --programmer ch341a_spi -c "MX25L1605A/MX25L1606E/MX25L1608E" -r bios.img
flashrom v1.0 on Linux 4.19.10-tinycore (i686)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.
tc@tinman:~/ch341a$

Just persevere until you are successful. The third time I did this (having purchased some spare BIOS chips) it took me many attempts to get the chip correctly positioned in the jaws of the clip.

If you're having trouble then one thing to check is exactly where the contacts on the clip are. The piece of metal they are made from is a push/interference fit in the plastic housing and can move a little. I found that in one instance things improved after I pushed one or two down a fraction to improve the alignment of the contacts. Just depending how well it was assembled, a noticeable gap between the plastic clip and the black heat-shrink sleeving may indicate one that has shifted.

Note: I had no problem with the 'in circuit' programming on the Dx0D. I did come across mention of problems arising with in-circuit programming where the circuit design was such that the programmer has had to power a load of other stuff on the circuit board via the 3.3V line (and failed to work due to the high current draw causing the supply voltage to drop significantly). Luckily it looks like we don't have this issue here.

Running flashrom

As mentioned elsewhere I used another thin client (actually a Zx0) as my programmer. It was running Tiny Core v10. I created a subdirectory into which I copied the flashrom binary and the new BIOS files (D10G_bios.bin and Z10G_bios.bin).

See the flashrom tab for an explanation of the command line parameters.

I started by reading out and saving the existing contents in case I had the wrong BIOS image:

tc@tinman:~/ch341a$ sudo ./flashrom --programmer ch341a_spi -c "MX25L1605A/MX25L1606E/MX25L1608E" -r bios.img
flashrom v1.0 on Linux 4.19.10-tinycore (i686)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Macronix flash chip "MX25L1605A/MX25L1606E/MX25L1608E" (2048 kB, SPI) on ch341a_spi.
Reading flash... done.
tc@tinman:~/ch341a$
...and then programming the new BIOS.
tc@tinman:~/ch341a$ sudo ./flashrom --programmer ch341a_spi -c "MX25L1605A/MX25L1606E/MX25L1608E" -w D10G_bios.bin
flashrom v1.0 on Linux 4.19.10-tinycore (i686)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Macronix flash chip "MX25L1605A/MX25L1606E/MX25L1608E" (2048 kB, SPI) on ch341a_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
tc@tinman:~/ch341a$

It does take about two minutes to complete: Read ~18 seconds; Write ~90 seconds; Verify ~18 seconds.