Pred nedávnom mi doniesol kolega NTB, že nefunguje. Na otázku, čo sa stalo, odpovedal, že po aktualizácii Win 11 prestal fungovať. Po zapnutí tlačidla ON/OFF na NTB sa rozsvietila kontrolka ON/OFF a roztočil sa ventilátor, ktorý odvádza teplo z chladiča CPU. Obrazovka zostala čierna. Skúsil som základne možnosti ako napr. vytiahnutie RAM, M.2 NVMe disku, reset BIOS, napojenie na ext. monitor, ale nič nepomohlo a všetko nasvedčovalo tomu, že je poškodený BIOS.
Klasická aktualizácia BIOS/UEFI funguje tak, že si od výrobcu NTB stiahneme exe súbor, ktorý spustíme z prostredia OS Win. Ďalšia možnosť je uložiť exe súbor na USB kľúč, nabootovať BIOS a aktualizáciu spustíme priamo z BIOSu. V každom prípade má výrobca na webe postup ako BIOS aktualizovať.
V mojom prípade štandardná aktualizácia nebola možná, pretože NTB sa nespustí. Začal som teda vyhľadávať informácie ako naflashujem BIOS externým spôsobom (nikdy som to nerobil a nemal som s tým praktické skúsenosti). Na internete je však množstvo návodov a videí ako BIOS flashovať.
Čo budeme potrebovať
- Programátor CH341A
- Software na prácu s programátorom
- Hex Editor
- Originál BIOS
- Innoextract (extrahovanie BIN z EXE)

Na obrázku v spodnej časti na ľavo je samotný programátor s čipom CH341A (mne predajca doručil CH341B, zrejme sa jedná o novší typ). Tento programátor dokáže pracovať s IC serie 24 a 25. Vedľa programátora na pravo je prevodník 1,8V. Staršie BIOS čipy fungovali na 3.3V, ale novšie fungujú na 1.8V. Tento programátor pracuje s 3.3V, preto potrebujeme adaptér na 1.8V. V strednom riadku je z ľavej strany adaptér, ktorý sa zasunie do programátora a na pravej strane sú klieštiky (clip), ktoré sa zasunú do adaptéru. V strede je ďalší adaptér, do ktorého je možné vložiť priamo BIOS čip. V hornom riadku je adaptér na ktorý môžeme BIOS priamo prispájkovať aby sme si boli na 100% istý, že kontakty budu pri čítaní a zápise v poriadku. Ja som použil clip, čo je najmenej spoľahlivé, ale chcel som sa vyhnúť vyberaniu BIOS čipu so základnej dosky. Síce clip sa mi podarilo správne nasadiť na čip až na 5-6 krát, no potom to už fungovalo spoľahlivo.
Programátor CH341A je jeden z najlacnejších a veľmi sa neodporúča, ale najviac návodov na flash BIOSu bolo práve s týmto programátorom. Cena programátora bola cca 15€. Kupoval som to cez podobný eshop ako je aliexpress a niektorí predajcovia ho mali v ponuke za 2€ + 13€ poštovné, iný ho mali za 13€ + 2€ poštovné. Neviem aká je za tým politika, ale koncová cena pre mňa bola 15€.
Software a Hex editor existujú pre Windows, ale tiež pre Linux. Mne je bližší Linux, tak som to skúsil v Linuxe, ale niečo som robil aj vo Windowse.
Ešte si povieme ako ma byť správne zapojený programátor. Konektor z clipu zasunieme do adaptéru (na obr. č.1) a adaptér do prevodníku. (na obr. č.2). Prevodník zasuneme priamo do programátora (na obr. č.3). Na obr. som tiež vyznačil ktorú časť pätice použijeme. Vyznačená časť je pre IC 25xx (vedľa je 24xx). Programátor môžeme zasunúť do USB portu PC/NTB a mala by sa rozsvietiť červená LED dióda, ktorá indikuje napájanie programátora.

Identifikácia zariadenia pod Linuxom
Bus 003 Device 004: ID 1a86:5512 QinHeng Electronics CH341 in EPP/MEM/I2C mode, EPP/I2C adapter
Ak budeme pracovať pod MS Win. 10/11 potrebujeme stiahnuť ovládač (je súčasťou softvéru).
Z BIOSu musíme vytiahnuť DUMP odkiaľ budeme potrebovať Desktop Management Interface (DMI). Čiže pod Linuxom nainštalujeme nástroj na získanie DUMP z BIOSu
sudo apt update
sudo apt install flashrom
Notebook na ktorom som flashoval BIOS je LENOVO 330S-15ARR Laptop. Veľmi dôležité je nájsť na základnej doske ten správny čip? 😀 Jedna sa väčšinou o malý čierny IC s 8, alebo 16 vývodmi. V mojom prípade išlo o čip Winbound 25Q64FWSIG, kde si môžeme všimnúť, že sa jedna o IC serie 25 a tiež napätie 1.8V.

Ďalšou vecou na ktorú by sme nemali zabudnúť je odpojenie batérie NTB a tak isto odpojenie gombíkovej batérie, ktorá napája BIOS.
Klieštiky teraz pripneme k čipu. Musíme však dávať pozor aby sme to pripli správne. Keď si všimneš na čipe v ľavo dole je mala dierka, ktorá identifikuje vývod číslo 1. Na klieštikach nám predstavuje číslo 1 červený káblik. Na tej fotografii to nie je veľmi vidieť, ale komunikácia funguje, takže je to pripojené správne.

Ako som už spomínal, musíme sa veľmi snažiť aby sme klieštiky na čip správne zacvakli, inak programátor s čipom nebude komunikovať. Ak by sa nám nedarilo pripojenie clipu k čipu, tak ďalšou alternatívou by bolo odspájkovanie čipu a použitie adaptéru v strede na obrázku (viď. prvý obrázok). Teraz môžeme skúsiť vyčítať DUMP. Čiže otvorime terminál
sudo flashrom --programmer ch341a_spi --read read01.bin
Po tomto príkaze začne programátor čítať data z čipu. Tento proces by mal byť indikovaný blikajúcou zelenou LED diódou a mal by trvať radovo desiatky sekúnd.
flashrom v1.2 on Linux 5.15.0-124-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Winbond flash chip "W25Q64.W" (8192 kB, SPI) on ch341a_spi.
Reading flash... done.
DUMP z čipu je teraz uložený v súbore read01.bin v aktuálnom adresári. Aby sme sa ubezpečili, že dáta boli vyčítané správne, môžeme tento proces opakovať viac krát. Ja som to spravil ešte 2x
sudo flashrom --programmer ch341a_spi --read read02.bin
sudo flashrom --programmer ch341a_spi --read read03.bin
Pre každý súbor spravíme checksum aby sme zistili, že súbory sú identické
md5sum read01.bin read02.bin read03.bin
8479fc54c5ae84397bebfbfad6966876 read01.bin
8479fc54c5ae84397bebfbfad6966876 read02.bin
8479fc54c5ae84397bebfbfad6966876 read03.bin
Keďže checksum je pre každý súbor rovnaký, máme istotu, že DUMP sme vyčítali z BIOSu správne. Takýto DUMP si vieme hneď zobraziť v HEX editore napr. xxd
xxd read01.bin
Mohli by sme vidieť niečo podobné (to je začiatok DUMPu)
00000000: 0100 003e ffff ffff ffff ffff ffff ffff ...>............
00000010: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000020: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000030: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000040: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000050: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000060: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000070: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000080: ffff ffff ffff ffff ffff ffff ffff ffff ................
00000090: ffff ffff ffff ffff ffff ffff ffff ffff ................
000000a0: ffff ffff ffff ffff ffff ffff ffff ffff ................
000000b0: ffff ffff ffff ffff ffff ffff ffff ffff ................
000000c0: ffff ffff ffff ffff ffff ffff ffff ffff ................
000000d0: ffff ffff ffff ffff ffff ffff ffff ffff ................
000000e0: ffff ffff ffff ffff ffff ffff ffff ffff ................
000000f0: ffff ffff ffff ffff ffff ffff ffff ff0f ................
00000100: 5048 434d 0007 0002 0000 0e00 9503 0e00 PHCM............
00000110: 9003 0000 8000 0000 0000 0000 0000 0000 ................
00000120: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000140: 37f4 50b9 456a 82bf 44cf 1024 35f5 af3b 7.P.Ej..D..$5..;
00000150: 9397 2339 2ba1 212d 9943 4b36 f4e3 874e ..#9+.!-.CK6...N
Teraz sa musíme dostať k BIOSu od výrobcu NTB. Každý výrobca má na webe sekciu support, ktorej súčasťou sú ovládače pre rôzny HW. Zvyčajne tam nájdeme aj BIOS. Ak sme BIOS našli, tak ho stiahneme. S najväčšou pravdepodobnosťou to bude exe súbor. My potrebujeme z exe súboru vyextrahovať len bin BIOSu a v Linuxe na to použijeme innoextract. Najprv ho nainštalujeme.
sudo add-apt-repository ppa:arx/release
sudo apt-get update
sudo apt-get install innoextract
Stačí nám použiť prepínač -d s cestou, kde chceme vyextrahovať súbory a cestu k exe súboru z ktorého chceme BIOS vyextrahovať
innoextract -d /cesta_k_vyextrahovanemu_bin /cesta_k/original_bios.exe
Vo vyextrahovaných súboroch už vidíme BIOS.cap a to je to, čo potrebujeme
- "app/SctWinFlash64.exe" - overwritten
- "app/SctWinFlash64.exe"
- "app/BIOS.cap"
- "app/default.rsp"
- "app/DosFlash.exe"
- "app/WinFlash64.exe"
V predošlej časti blogu sme vyčítali z čipu DUMP pod názvom read01.bin a teraz sme z originál exe od výrobcu vyextrahovali BIOS.cap. Aby sme mohli BIOS upravovať potrebujeme nejaký HEX editor. Jeden z najznámejších HEX editorov je HxD, ale ten je určený pre MS Windows. Mal by fungovať v Linuxe pod wine, ale osobne som to neskúšal. Pre Linux je množstvo iných HEX editorov a ja som sa rozhodol pre Okteta (ide o GUI hex editor). Inštaluje sa tradične z repozitárov Ubuntu
sudo apt update
sudo apt install okteta
Po inštalácii Okteta ho spustíme a načítame pôvodný a originál BIOS (read01.bin a BIOS.cap). Súbory si dáme veľa seba. Na ľavú stranu som dal BIOS.cap a na pravú stranu read01.bin.

V súbore na pravej strane sú prvé 4 bajty reprezentované v HEX 01 00 00 3E ASCII kód ( …>). Na ľavej strane sa tieto 4 bajty nachádzajú na offset 0000:031C To znamená, že to čo je označené na obrázku región 0000:0000 – 0000:0317 (792 bajtov) musíme odstrániť. V programe okteta som celkom dole, červeným rámčekom označil dôležité informácie.
- Offset – pozícia bajtu v súbore
- Selection – rozsah označených bajtov
- INS/OVR – Insert/Overwrite mód
- Kódovaná interpretácia hodnôt aktuálneho náhľadu
- Dekódované znaky aktuálneho náhľadu
Ja som si ich nastavil ako mi to vyhovuje, ale dôležité je prepnúť INS/OVR na INS, inak nepôjde vybranú sekvenciu bajtov odstrániť. Po odstránení vidíme, že súbory sú v HEX formáte identické (samozrejme ide len o začiatok súboru).

Ďalej prejdeme v obidvoch súboroch na offset 001E:E000 (na vyhľadanie offsetu použijeme klav. skratku Ctrl+G) a označíme ho až po 001E:E230. Na pravej strane označenú sekvenciu skopírujeme Ctrl+C a na ľavej strane to do súboru vložíme Ctrl+V (nahradíme).

Teraz prejdeme na pravej strane úplne na koniec súboru a zistíme. že koncový offset je 007F:FFF0. Ten istý offset vyhľadáme aj v súbore na ľavej strane a od nasledujúceho offsetu všetko až do konca odstránime

Súbory môžeme porovnať veľkosťou a zistíme, že sa rovnajú
-rw-r--r-- 1 jany jany 8388608 nov 22 19:10 BIOS.cap
-rw-r--r-- 1 jany jany 8388608 okt 29 08:11 read01.bin
BIOS.cap uložíme a teraz je pripravený na zápis (flash) do BIOSu. Príkaz na zápis bude vyzerať následovne
sudo flashrom --programmer ch341a_spi --write BIOS.cap
BIOS bude vymazaný a nahrajú sa nové dáta.
flashrom v1.2 on Linux 5.15.0-124-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Winbond flash chip "W25Q64.W" (8192 kB, SPI) on ch341a_spi.
Reading old flash chip contents... done.
Eresing and writing flash chip...
Erase/write done.
Verifying flash... VERIFIED.
Flashing completed successfully.
Ak sa chceme ubezpečiť, že dáta boli nahrané korektne, tak znova čip prečítame a môžeme ho porovnať so súborom, ktorý sme do čipu zapisovali a MD5SUM by mali dávať rovnaké hodnoty
sudo flashrom --programmer ch341a_spi --read read04.bin
md5sum read04.bin BIOS.cap
eb026cfbae25c56a0f544c6af753f768 read04.bin
eb026cfbae25c56a0f544c6af753f768 BIOS.cap
Ak sa čísla zhodujú, tak dáta sa do čipu nahrali správne. NTB môžeme poskladať (predtým nezabudnúť zapojiť konektory pre hlavnú batériu a taktiež batériu pre BIOS) a zapneme ho. Keď som NTB zapol, tak všetko fungovalo správne, číže úprava a následne prepálenie BIOS FW pomohlo.
Záver
Proces flashovania BIOSu sa zdá byť nie až tak zložitý, ale každý koná na vlastné riziko. Pre servismana je flash BIOSu väčšinou rutina, ale ak to človek robí prvý krát, tak vždy je tam obava, či sa to podarí. Ja som šťastlivec, ktorému sa to podarilo. Avšak musel som si prečítať mnoho návodov a prelúskať množstvo príspevkov na rôzných diskusných fórach.