Guide: Flash Bios with CH341A (macos/linux)

Tutorial:

  1. Orion-O6 SPI Flash is 1.8v (source) so make sure your CH341A setup includes the 1.8v adapter
  2. Connect everything (see image below)
  3. On macos / linux install flashrom via brew / apt. You need to run this with sudo
  4. Get cix_flash_all.bin for the bios you want to flash.
  5. We need to make this padded for the spi flash rom’s size by executing this command where chip_size is 8388608 (B) and whatever your image_size in (B) is:
dd if=/dev/zero bs=1 count=$((chip_size - image_size)) >> /path/to/cix_flash_all.bin
  1. Now you can flash it via:
sudo flashrom -p ch341a_spi -w /path/to/cix_flash_all.bin

If you’ve done it successful you should have this output (on macos):

flashrom v1.5.1 on Darwin 24.4.0 (arm64)
flashrom is free software, get the source code at https://flashrom.org

libusb: info [darwin_detach_kernel_driver] no capture entitlements. may not be able to detach the kernel driver for this device
Found Winbond flash chip "W25Q64.W" (8192 kB, SPI) on ch341a_spi.
Reading old flash chip contents... done.
Updating flash chip contents... Erase/write done from 0 to 7fffff
Verifying flash... VERIFIED.

How I connected it:

2 Likes

… And if you accidentally broke a leg off while trying to insert it back in: This is the part Nr. Winbond W25Q64JWSSIQ. It is the SOIC-8 208mil variant.

On Digikey (better spec sheet on the website):
https://www.digikey.de/de/products/detail/winbond-electronics/W25Q64JWSSIQ/11584729

On Mouser: https://www.mouser.de/ProductDetail/Winbond/W25Q64JWSSIQ?qs=YwPsRIUVAOfs3jrAZG2yJQ%3D%3D

Also available on AliExpress.

1 Like

With the correct socket it’s as easy as ever to insert the SPI chip correctly (picture has the broken one since the new one is being delivered, if the AliExpress vendor is good I’ll link to that too since they had 10x for 6€ with shipping)

Edit: Here is the Link to the AliExpress seller I ordered from (out of Germany so probably at least available for all of EU) - 10 pcs W25Q64JWSSIQ https://a.aliexpress.com/_EwvArUe
Since my board is now working again and shipping was fast I can recommend them

Sort of bricked my UEFI by installing the BTRFS driver today and i don’t have a programmer on hand (Waiting for one to arrive), Is there another way to flash UEFI?
Some motherboards support plugging in a flash drive and holding a key combo, Highly doubt the orion supports such feature…

Nope that’s why they have the socketed SPI at least. Also using the correct SPI socket makes this really easy so it’s not that bad. Basically only thing you have to look out for is having the 1.8v down converter plugged in too

Bummer, Oh well guess i’ll wait.
Thanks!

Why couldn’t you perform the BIOS update from USB? You can EFI boot from USB and navigating the EFI shell to a folder on an EFI parition is the same as USB vs nvme on this board.
What does a BTRFS driver have to do with messing up your BIOS installed on the SPI flash anyway?

Because the UEFI crashes and the whole system hangs (Does not POST)
And as for BTRFS?
No clue, The moment i installed it and rebooted it stopped booting, Wanted to collect some logs but apparently it decided to boot today? No clue, Either way i removed the driver.

Here are the logs from yesterday:

Cix UEFI firmware (version 9.0.0 built at 17:16:49 on Apr  7 2025)
[01.532] [UEFI] E007 PrePiEnd
[01.772] [UEFI] E3C1 XspiInitDxeStart
[01.773] [UEFI] E400 XspiInitDxeEnd
[01.777] [UEFI] E119 PlatformConfigParamsManageDxeStart
[01.787] [UEFI] E11A PlatformConfigParamsManageDxeEnd
[01.789] [UEFI] E117 ConfigParamsManageDxeStart
[01.793] [UEFI] E118 ConfigParamsManageDxeEnd
[01.798] [UEFI] E115 PlatformDxeStart
Farm Function Disable.
[FarmFunctionControl] [641]Get Farm Enable Flag Variable StatusNot Found.
[01.856] [UEFI] E116 PlatformDxeEnd
[01.862] [UEFI] E2C1 PcieInitDxeStart
Root Port 0: Enable
Root Port 0: Link Up Success
Root Port 1: Enable
Root Port 1: Link Up Success
Root Port 2: Enable
Root Port 2: Link Up Fail
Root Port 3: Enable
Root Port 3: Link Up Success
Root Port 4: Enable
Root Port 4: Link Up Success
[02.136] [UEFI] E300 PcieInitDxeEnd
[02.142] [UEFI] E201 I2cInitDxeStart
[02.144] [UEFI] E240 I2cInitDxeEnd
[02.146] [UEFI] E241 SpiInitDxeStart
[02.149] [UEFI] E280 SpiInitDxeEnd
[02.160] [UEFI] E6C1 PdDxeStart
Update Pd Device 0 state, Mode: TYPEC_STATE_DISCONNECT, Orientation: TYPEC_ORIENTATION_NONE
Update Pd Device 1 state, Mode: TYPEC_DP_STATE_E, Orientation: TYPEC_ORIENTATION_NORMAL
Update Pd Device 2 state, Mode: TYPEC_STATE_USB, Orientation: TYPEC_ORIENTATION_NORMAL
Update Pd Device 3 state, Mode: TYPEC_DP_STATE_E, Orientation: TYPEC_ORIENTATION_NORMAL
[02.192] [UEFI] E700 PdDxeEnd
NOTICE:  Send CMD: 0x82000002
NOTICE:  Send CMD: 0x82000002
NOTICE:  Send CMD: 0x82000002
NOTICE:  Send CMD: 0x82000002
NOTICE:  Send CMD: 0x82000002
NOTICE:  Send CMD: 0x82000002
NOTICE:  Send CMD: 0x82000002
NOTICE:  Send CMD: 0x82000002
------Begin firmware version dump------
 SE:beta2.0-958a7bfced44
 PM:00.10.002-ab61f5573749
 PBL:v2.7-39211b3b31af
 ATF:v2.7-a12404c66371
 TEE:Beta_2.0.7_release-3.17-4cfe2cd3de07
 UEFI:9.0.0
 EC:V1.07-f4c3ada6e90d
 Board Id:94(PHECDA-Rev A)
 PD:0.0 1.0
 PMIC: 0x00 0x00 0x00 
------End firmware version dump------
E/TC:?? 00 cix_get_key_info:121 Get device key:
One display device is found on typec port1!
Update Platform Config Param GopDisplayPort=0x1
total 4 modes (current pixel clock 4900, width 1024, height 600)
[03.118] [UEFI] E1FF DxeMainEnd


Synchronous Exception at 0x0000000000000000

  X0 0x00000007FCC95018   X1 0x0000000000000032   X2 0x0000000000000000   X3 0x0000000000000030
  X4 0x00000007FCC90B18   X5 0x0000000000000000   X6 0x00000007FE061000   X7 0xC2CD91F4FF2CD380
  X8 0x45F8A56FA6FDAD2A   X9 0x45F8A56FA6FDAD2A  X10 0x0000000085F0B090  X11 0x0000000000000000
 X12 0x00000007FFFFF7A0  X13 0x0000000085F0A0A0  X14 0x0000000085F0A0A0  X15 0x00000007FE810100
 X16 0x00000007FE3D1A90  X17 0x0000000000000037  X18 0x00000000EB0501EB  X19 0x00000007FCC90F18
 X20 0x0000000000000000  X21 0x00000007FE061060  X22 0x00000007FE061040  X23 0x00000007FE061000
 X24 0x00000007FE061000  X25 0x00000007FCC8ED20  X26 0x00000007FCC8ED18  X27 0x0000000000000000
 X28 0x0000000000000000   FP 0x00000007FFFFF870   LR 0x00000007FE05EE3C  

  V0 0x0000000000000000 000000002375EECB   V1 0x0000000000000000 000000001C54794E
  V2 0x0000000000000000 000000008A8F29C3   V3 0x0000000000000000 000000004EB0F93A
  V4 0x0000000000000000 000000006E60661B   V5 0x0000000000000000 00000000EE63BAC5
  V6 0x0000000000000000 00000000F2114E0B   V7 0x0000000000000000 00000000BE33FC92
  V8 0x0000000000000000 0000000000000000   V9 0x0000000000000000 0000000000000000
 V10 0x0000000000000000 0000000000000000  V11 0x0000000000000000 0000000000000000
 V12 0x0000000000000000 0000000000000000  V13 0x0000000000000000 0000000000000000
 V14 0x0000000000000000 0000000000000000  V15 0x0000000000000000 0000000000000000
 V16 0x0000000000000000 000000000DAD7372  V17 0x0000000000000000 00000000F8CFF24A
 V18 0x0000000000000000 000000003B2A3EE0  V19 0x0000000000000000 00000000A67C1019
 V20 0x0000000000000000 000000008A170838  V21 0x0000000000000000 00000000C076547D
 V22 0x0000000000000000 0000000080002000  V23 0x0000000000000000 0000000099F04066
 V24 0x0000000000000000 00000000E16937D8  V25 0x0000000000000000 00000000273B8263
 V26 0x0000000000000000 00000000D4B61049  V27 0x0000000000000000 00000000138CBCA6
 V28 0x0000000000000000 00000000D3EEC2C2  V29 0x0000000000000000 000000004E32F298
 V30 0x0000000000000000 00000000016B5A67  V31 0x0000000000000000 0000000068E9E2F9

  SP 0x00000007FFFFF870  ELR 0x0000000000000000  SPSR 0x80000B09  FPSR 0x00000000
 ESR 0x8600000D          FAR 0x0000000000000000

 ESR : EC 0x21  IL 0x1  ISS 0x0000000D

Instruction abort: Permission fault, first level

Stack dump:
  00007FFFFF770: 00000000A67C1019 0000000000000000 000000008A170838 0000000000000000
  00007FFFFF790: 00000000C076547D 0000000000000000 0000000080002000 0000000000000000
  00007FFFFF7B0: 0000000099F04066 0000000000000000 00000000E16937D8 0000000000000000
  00007FFFFF7D0: 00000000273B8263 0000000000000000 00000000D4B61049 0000000000000000
  00007FFFFF7F0: 00000000138CBCA6 0000000000000000 00000000D3EEC2C2 0000000000000000
  00007FFFFF810: 000000004E32F298 0000000000000000 00000000016B5A67 0000000000000000
  00007FFFFF830: 0000000068E9E2F9 0000000000000000 00000007FE3D1700 0000000022000308
  00007FFFFF850: 0000000000000000 000000008600000D 0000000000000000 0000000000000002
> 00007FFFFF870: 00000007FFFFF8D0 00000007FECE5BC8 0000000000000003 00000007FC53D698
  00007FFFFF890: 00000007FCC90F18 00000007FCCBC718 0000000000000001 00000007FCC90F30
  00007FFFFF8B0: 0000000000000002 0000000000000002 00000007FCC8EE98 00000007FCC8ED20
  00007FFFFF8D0: 00000007FFFFF960 00000007FE1A6D08 00000000000000CE 00000007FE1B6000
  00007FFFFF8F0: 00000007FCAD3E98 0000000000000001 0000000000000000 0000000000000001
  00007FFFFF910: 0000000000000001 0000000000000018 00000007FE1B390C 00000007FE1B51E8
  00007FFFFF930: 00000007FCAD3E98 00000007FECFB0C0 0000000000000000 0000000000000000
  00007FFFFF950: 00000007FC53C040 00000007FE061060 00000007FFFFF9D0 00000007FE1ABED8

Agreed, I’ve flashed mine at least 50 times now, among which maybe 15 were using the external adapter :slight_smile:

1 Like