Unofficial (Simplified) Libreboot Documentation

Do not use CH341A!

Contents

NOR flashes on libreboot systems run on 3.3V DC or 1.8V DC, and this includes data lines. CH341A has 5V logic levels on data lines, which will damage your SPI flash and also the southbridge that it’s connected to, plus anything else that it’s connected to.

These CH341A programmers are unfortunately very popular. DO NOT use it unless you have fixed the issue. You CAN fix it so that the data lines are 3.3v, if you follow these notes

In practise, most people will not fix their CH341A and instead just risk it, so no documentation will be provided for CH341A on this website. It is best to discourage use of that device.

Not covered on that eevblog page: the WP/HOLD pins (pins 3 and 7) must be held high via pull-up resistors, but on CH341A dongles, they are directly connected to 3.3V DC (continuity with pin 8). It is advisable to cut these two connections, to the WP and HOLD pins, and jump the cuts using pull-up resistors instead. A value between 1k to 10k (ohms) should be fine.

In the event of a surge, like for example you connect the clip wrongly and cause a short circuit between two pins, lack of pull-up resistors on WP/HOLD could cause a direct short between VCC/ground, which would cause a lot of heat build up and possibly fire (and definitely damaged circuitry). On SOIC8, pin 3 is WP and 4 is GND, so a direct 3.3v connection there is quite hazardous for that reason; all the more reason to use a pull-up resistor.

The mainboard that you want to flash (if using e.g. pomona clip) will probably have pull-up resistors on it already for WP/HOLD, so simply cutting WP/HOLD on the CH341A would also be acceptable. The pull-up resistors that you place (in such a mod) on the CH341A are only useful if you also want to flash chips in the ZIF socket. If pull-up resistors exist both on e.g. the laptop mainboard and on the CH341A, it just means the equivalent series resistance will be of the two resistors (on each line) in parallel. If we assume that a laptop is likely to have a resistor size of ~3.3k for pull-ups, then a value of ~5.6k ohms on the CH341A side seems reasonable.

Alternatively, you might work around the voltage issue by using an adapter with logic-level converter, making sure to have matching vcc going into the flash. Use of a logic level converter would be quite flexible, in this scenario, and you could use it to set many voltages such as 1.8v or 3.3v.

In case it’s not clear:

Please do not buy the ch341a! It is incorrectly engineered for the purpose of ROM flashing on systems with 3.3v SPI (which is most coreboot systems). DO NOT USE IT! This issue still isn’t fixed by the manufacturer, and it doesn’t look like they will ever fix it.

If you see someone talking about CH341A, please direct them to this page and tell them why the CH341A is bad.

These photos show both modifications (3.3v logic and WP/HOLD pull-up resistors) performed, on the black CH341A:

The green version (not shown above) may come with 3.3v logic already wired, but still needs to have pull-up resistors placed for WP/HOLD.