topmenu

トップコンピュータカメラ雑記プロフィールこのページについて

2022/03/10

起動しない BIOSTAR B660GTN UEFI/BIOS の更新方法

ことのはじまり

PC を新調するため、はじめて1から部品を選定して組んだのだが、マザーボードの UEFI/BIOS をアップデートしたらマザーボードの POST LED が CPU から進まず、起動しなくなってしまった。
数日、紆余曲折を経てから、USB フラッシュメモリに入れていた更新データのハッシュ値を調べてみると、元のファイルと違う値が返ってきた。USB フラッシュメモリにコピーしたデータがもともと壊れていたのであった!
 

購入店の保証を読むと、BIOS 更新によるトラブルは補償対象外となっていた。保証対象外の修理代を払うのも癪なので、自分で書き込むことにした。

あの一度しか起動画面を見ることができなかった悲しみを、消し去ろう。

(すべて自己責任にて行ってください)


----
(愚痴:更新データをダウンロードするときにもサイトにハッシュ値がないから、ベリファイができない。よって破損もしくは改ざんされてた場合に確認できない。
BIOSTAR の場合、アップデート時にチェックサムとして文字列が4文字表示されてるけれど、それを確認する方法は記載されない。windows から書き込みできるソフトにはあるのかもしれないけども実行したことはない。
他社のウェブページを見ても基本的にベリファイ用の文字列は表記されてないので、ベリファイはしないのが一般的みたい。
他社製品では BIOS とはおそらく独立してアップデートできる機能が組み込まれてるから、今回のような破損したデータを書き込んで起動しなくなった場合の復帰が楽なんだろうけど、容易に更新できることとファイル整合性の確認とはまた別の問題である。)
----


マザーボードの物理ポート調査

BIOSTAR B660GTN のフラッシュメモリ IC は 25Q256JVEQ であった。ver.500(品番により IC の変更があるかもしれません)
フラッシュメモリ IC に接続が行える JSPI1 端子は CMOS リセットの近くにある。
JSPI1 端子はシルク印刷で数字が振ってあるのでピン番号はそれに従うことにする。端子のサイズは 2x5、ピッチ 2.0mm が適合する。
JSPI1 端子と、JSPI1 端子のピンアサインとその先につながっているフラッシュメモリ IC からの機能は、それぞれ以下のとおりである。

+----------+
|2 4 6 8 X |
|1 3 5 7 9 |   X:No pin.
+----------+
JSPI1 connector on motherboard (BIOSTAR B660GTN).


Table of pin number of JSPI1 and its function from flash memory IC.
P.N | Pin fnc.
1   | N.C
2   | /WP
3   | VCC
4   | GND
5   | /CS
6   | CLK
7   | DO
8   | DI
9   | /HOLD or /RESET


どんな書き込みソフトがあるのか?

CUI ベースでは flashrom (https://www.flashrom.org/Flashrom)、GUI ベースでは UsbAsp-flash(AsProgrammer) が有名?それぞれのソフトにおいて、多数のデバイスがサポートされている。
比較的入手しやすい Arduino を ROM ライターとして使うことできるようなので、今回は Arduino を対象として記述することにした。

Arduino を書き込みデバイスにする方法

https://github.com/nofeletru/UsbAsp-flash から最新リリース版の AsProgrammer_x.y.z.zip ファイルをダウンロードし、ファイル展開後、
github にある arduino -> asprog のソースコードをコンパイルし、書き込むことで通信デバイスとして使用することができる。
コンパイル、書き込みついては検索したら多くの情報が出てくるので省略する。arduino-cli でコンパイルして Arduino nano に書き込み、通信デバイスとして使用した。


Arduino と JSPI1 との接続方法
今回、書き込み対象の IC では、配線図は AsProgrammer に含まれている以下の画像を参考にした。
また、SPI 以外にも I2C、MicroWire のそれぞれの接続方法が画像(scheme*.gif)としてあるので、他の IC の場合でも参考にするとよい。


配線図(https://github.com/nofeletru/UsbAsp-flash/blob/master/schemeSPI25.gif

JSPI1 <--> Arduino nano (Pin)
-----------------------------
  /CS <--> RST (D10)
  DI  <--> MOSI (P11)
  DO  <--> MISO (P12)
  CLK <--> SCK (P13)

書き込みに使用する Arduino のポート端子は、asprog ファイルの define.h に記述されている。

Asprogrammer の使い方

1. IC品番検索  IC -> Search -> IC 品番を入力する。
2. 書き込み機器選択  Hardware -> Arduino を選択する。
3. 書き込み設定  Options -> Arduino COMPort -> 「COM数字」を入力[*]してOKをクリックする。 [*]・・・必ずCOMも入れてタイピングすること。数字だけでは認識しません(v2.0.3)。
4. 書き込み ROM 選択  アイコンから Open file -> ROM(BIOS) ファイルを選択する。
(5. 元 ROM の削除  アイコンから Erase IC を選択し、実行する。) → これはなくてもよいかもしれません。
6. ROM 書き込み  Program IC を選択し、実行する。
7. ROM ベリファイ  Verify IC を選択し、実行する。 → これはしなくてもよい。


結果
起動したら CPU POST コードで止まることなくなったが、接触不良で DRAM エラー。刺しなおして、今度は無事起動し復帰完了。


Execution time (Write, 32MB): about 43 min.(No verify) @ Arduino nano clone (328p) + CH340 (USB to Serial conveter), Typical SPI protcol 8 MHz,
12.4 kB/s
別の書き込みライターなら(桁違いに)速いだろう。


P.S コピーしたデータが壊れる USB メモリは破壊後、破棄しました。

Thank for Asprogrammer developer and supporters.