Dell/Wyse have 'packaged' updates for their systems and a management infrastructure for deployment of upgrades and/or re-installation of system firmware and BIOS updates. For those of us who are just repurposing a thin client the tool of choice is the stand-alone USB firmware update tool, various versions of which can be found on Dell's support pages.
The tool will let you pull an image (and/or BIOS) from one thin client and push it onto another, or push a new firmware update. The former depends on you having an existing thin client with the required firmware installed whilst for the latter you need a properly packaged update file.
With the transition from 'Wyse' to 'Dell' and the retirement of the old Wyse support site things have become more problematic for those of us trying to breathe new life into old thin clients.
However I had one surprise when I visited the new Dell support site and that was that, amongst the update files on offer for the Dx0D (aka 5010), was a raw BIOS image file (D10G_bios.bin). This was for BIOS 3.0U.
I did have a play with various releases of the USB Firmware Tool to see if I could extract/modify/alter the Dell/Wyse reprogramming environment to achieve my ends but gave up. However I thought it worthwhile to record the following observation with respect to v3.1.0:
Having installed the tool, when run the first thing you have to do is to select the the USB drive you want to configure. On a 64-bit Windows 10 system I found that I could not select any of the various USB pen drives I have. All I ever got was the error message:
However, when I ran it on a Windows 7 (32-bit) installation, it worked perfectly and recognised every USB pen drive I plugged in.
As a straight BIOS image was available I now moved on to the Linux tool: flashrom. It was a work of moments to download the source and build a version for Tiny Core V10. (Download here). Unfortunately I found that, whilst it recognises the CPU fitted to the D10D and does support the BIOS chip (a MX25L1606E), it just hung whilst trying to find it.
A quick search of the Internet revealed that there was a cheap USB programmer available that supported the MX25L1606E BIOS chip - the CH341A. This was available in a number of configurations and, not really knowing what I was up to, I bought a complete set for just under £10. This comprised:
CH341A 24 25 Series EEPROM Flash BIOS USB Programmer (Essential!)
1.8V adapter for iPhone or motherboard 1.8V SPI Flash Memory SOP8 DIP8 (Not needed)
SOP8 to DIP8 EZ Programmer Adapter Socket Converter Module 150mil (Not needed)
SOP8 Flash Chip IC Test Clip socket adapter BIOS/24/25/93 Programmer (Needed)
You can get just the programmer and test clip for under £5.
What turns up in the post is just the hardware. There are no instructions or software, but this isn't a problem. A quick google will find you documentation including a circuit diagram. As to software, support for the programmer is already built into flashrom
Note: One set of the documentation I found pointed out that the CH341A programmer chip is running off 5V whilst the BIOS EEPROM is a 3.3V device (and is powered at 3.3V). The implication is that the clock and data signals from the programmer may be overdriving the inputs on the EEPROM. The article goes on to show how to modify the programmer so that it runs off 3.3V as well. I, as many others have, just used the board as supplied without any problems. I haven't yet waded through the various data sheets or dug out my old oscilloscope to see exactly what is going on and whether the mod is advisable.
The BIOS chip is located on the D10D motherboard close to the heat sink and to the Display Port socket on the rear panel. 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 location is marked CN4700. The white arrowhead (top right in the photo) marks pin 1.
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 towards the back panel.
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.
The blob of red paint is something to do with Dell's manufacturing process and does not mark pin 1!
This is straight forward:
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.
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.
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.
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 (many?) 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. 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.
In my case I programmed the BIOS using another thin client (actually a Zx0) that was running Tiny Core v10. I created a subdirectory into which I copied the flashrom binary and the new BIOS file (D10G_bios.bin).
Flashrom needs the following parameters:
--programmer ch341a_spi to identify the programmer that's being used.
-c "MX25L1605A/MX25L1606E/MX25L1608E" to identify the chip that is being programmed.
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 (and verify) ~18 seconds; Write ~90 seconds.
From the opening BIOS screen from a Dx0D I did this on:
Before the BIOS update.
After the BIOS update.
...and 'no' I wasn't doing this in the middle of the night. The clock on the Dx0D was not set correctly.
Any comments? email me. Added May 2019