BIOSが壊れてしまった、BIOS Flashbackに対応していないジャンクマザーボードを購入したがCPUを認識しない状況ではBIOSが起動しません。そのような場合、基本的にはマザーボードのspeaker端子に接続したビープ音スピーカーからビープ音すら鳴らないです。こういった現象が起きた場合は、強引に直接BIOSを書込み、BIOSを起動させます。直接BIOSを更新する場合は「ROM焼き」とも言われています。このROM焼きを行うために道具として「CH341A」を使用します。今回は一例としてこの道具「CH341A」を利用して、マザーボード「Prime A320M-k」を修復方法を紹介します。
マザーボード「Prime A320M-k」はBIOS Flashbackに対応していないマザーボードで「通電はするが起動しない」ということでジャンクコーナーにあったので購入しました。実際に通電はしましたが、画面に何も表示されなかったです。
マザーボードのLEDなどは光っており通電しているが、起動してもモニターに何も表示されない、ビープ音が鳴らない、CPUファンは回っている状況です。
準備するもの
- BIOSが起動しないマザーボード
- CH341A ROMライター
- 最新BIOSファイル
- windows
- FD44Editor
BIOSが起動しないマザーボード
BIOSが起動しない要因は色々ありますが、一般的にジャンクで購入してきたマザーボードの場合はBIOSが立ち上がらないことが多いです。手持ちのCPUが新しく、BIOSが古い場合やBIOS自体が壊れている場合が多いです。
CH341A ROMライター
これはCPUなし、電源なしの状態でマザーボードについているBIOSチップを直接、読み込んだり、消去、書込みなどを行うことができる道具です。DIPとSOP8ピンに対応しています。SOP8ピンのBIOSチップの場合は、ICテストクリップを使用します。ICテストクリップは非常にシビヤで、なかなか認識しない場合があります。少しずつずらしながら挟むとうまくいきます。ソフトとドライバ、説明書は購入元に問い合わせるともらえます。作業時、私はボタン電池も外しています。BIOS更新中に停電してBIOSを壊してしまった、BIOS Flashbackがない時などに非常に役に立ちます。PCを自作している方は一つ持っておくとよいでしょう。
最新のBIOSファイル
BIOSが起動しないマザーボードのBIOSを公式ページからダウンロードしておきます。そもそも起動しないマザーボードのBIOSをダウンロードできなければ始まりません。
windows
正常動作しているPCが必要です。CH341AのUSBを接続し、起動しないマザーボードのBIOSを「読込み」、「保存」、「削除」、「書込み」等、実施するためです。
FD44Editor
CH341Aから読込保存したBIOSファイルを読込みしたり、BIOSファイルのバージョンを調べる、マザーボードのシリアルナンバーやIDを追記して保存するために使用します。FD44Editorで編集しないとASUSのマザーボードはBIOSが起動しないので必須となります。FD44Editorはこちらからダウンロードできます。Zipなので任意の場所に解凍すると実行ファイルがあるので立ち上げます。windowsですと「FD44Editor_0.9.2_win_zip」をダウンロードすることになります。
ファイルの拡張子が「.bin」と強制的に変更となる仕様です。
BIOSの読込み
CH341Aの専用ソフト「CH341Aプログラマー」を立ち上げます。
マザーボード「Prime A320M-k」はSOP8ピンなのでICテストクリップで接続します。赤枠「検出」をクリックすることによりSOP8ピンの型番が認識されるようになります。接続がうまくいっていない場合は「Unknown」と表示されます。その場合はICテストクリップを接続し、赤枠「検出」をクリックします。
認識された状態から「読み込み」をクリックすると起動しないマザーボードのBIOSを読み込みが開始されます。読込時間は5分程度かかります。
読み込まれるとよくわからない文字列が赤枠のように表示されますので、任意のフォルダに「保存」をクリックして保存します。
保存したBIOSファイルの参照
CH341Aで読み込んで保存したBIOSファイルが壊れているのか、バージョンを調べるのにFD44Editorを使用します。起動したFD44Editorに保存したBIOSファイル「XXXX.bin」をドラックアンドドロップで持っていき、開きます。BIOSファイルが壊れている場合はエラーが起きます。
正常にFD44Editorで保存したBIOSファイルが読み込まれるとバージョンが見れます。また、MAC、UUID、S/Nなどの番号が見れます。ジャンクコーナーにあったマザーボード「Prime A320M-k」のBIOSのバージョンは「0217」でした。公式ページを調べたら一番最初のバージョンでScoket AM4で良いCPUはほとんど認識しないバージョンでした。BIOSは壊れてなかったので推測ですが、認識するCPUを持っていなかったのでBIOSを立ち上げられなかったということになり、起動しないジャンクという流れでジャンクコーナーにあったのかもしれません。
最新のBIOSを編集する
FD44Editorを二つ立ち上げます。ひとつはCH341Aで読み込んで保存したBIOSファイルと、最新のBIOSをダウンロードしたBIOSをFD44Editorで開きます。
ASUSのマザーボードの場合は、マザーボード固有のIDやMac、シリアルナンバー等がないBIOSは起動しないです。BIOSにそれらが記載されていないとPOSTの時点で起動しなくなります。そこでFD44Editorを使用して直接BIOSファイルに固有のIDやMac、シリアルナンバー等を書き込みます。
赤枠「Primary card Mac」、「System UUID」、「MotherBoard S/N」を読み込んだBIOSファイルからコピーし、新しいBIOSの方へペーストし「Save to BIOS image file…」をクリックして保存します。補足ですがこのソフトは同じファイルに上書き保存しかできないです、新しいBIOSを読み込む際は拡張子「.CAP」ですが、同じファイルに保存することにより拡張子「.bin」に書き換わります。
BIOSのファイルサイズを比較する
新しく作成したBIOSとマザーボードから読み込んだBIOSのサイズを比較します。ほとんどの場合はファイルサイズは一致しますが、ASUSのBIOSは一致していない場合があります。その場合、バイナリーエディターで比較しながら削除していくほかないです。今回のマザーボード「Prime A320M-k」のBIOSと最新のBIOSを編集したファイルサイズは一致しています。
BIOSを書込み
新しいBIOSを書き込む前に、マザーボード「Prime A320M-k」のBIOSを削除します。
赤枠「消去」をクリックし完了後、「ブランク」をクリックしBIOSが削除されていることを確認します。
新しいBIOSを赤枠「開く」をクリックし、赤枠「書き込み」をクリックします。書込みも5分程度かかります。
BIOS起動確認
BIOSの書込み後、CPUや電源などセットし起動させてみます。ビープ音をなるようになり無事に起動できるようになります。ここでは最新のBIOSを書き込みましたが、最新よりひとつ前のバージョンを書込みし、BIOS起動後に最新バージョンのBIOSを更新するといった方法もあります。
まとめ
マザーボードのBIOSを「CH341A」を使用して直接BIOSを書き込むことで、起動しなかったマザーボードを復活させる方法を説明してきました。PCを自作する人には大変役に立つ道具です。またBIOSを更新するのは非常に不安になりますが、この道具があると自信につながり安心してBIOSを更新することができるようになります。とても安価なので助かります。
【補足】CH341Aプログラマーの日本語化
CH341Aプログラマーはデフォルト、英語になっていますので日本語化することもできます。
「CH341A.exe」と同じ場所に「Languages」のフォルダがありますのでそこにファイル名「Japanese.ini」を作成し、下記の文字列をコピーして保存することに日本語化することができます。
!LanguageID=1041
!LanguageName=Japanese
!TranslationAuthor=
!TranslationAuthorEmail=
!TranslationDefaultFont=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
[TFrmMain]
!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
Caption=P1119 CH341Aプログラマー
mFile.Caption=ファイル(&F)
mOpen.Caption=開く(&O)
mSave.Caption=保存(&S)
mExit.Caption=終了(&X)
mBuffer.Caption=データバッファ(&B)
mFill.Caption=バッファを埋める(&F)
mSwap.Caption=上位バイトと交換(&S)
mCopy.Caption=コピー(&C)
mCopyAsHex.Caption=hexコピー(&H)
mFind.Caption=検索(&F)
mFindNext.Caption=次を検索(&N)
mGoto.Caption=移動(&G)
mSelectAll.Caption=全て選択(&A)
mOpter.Caption=実行(&P)
mOpterOption.Caption=動作設定(&O)
mAuto.Caption=自動書き込み(&A)
mChkEmpty.Caption=ブランクチェック(&B)
mRead.Caption=読み込み(&R)
mWrite.Caption=書き込み(&P)
mVerify.Caption=ベリファイ(&V)
mClean.Caption=消 去(&E)
mAbort.Caption=中 止(&T)
mDetect.Caption=検 出(&T)
mlanguages.Caption=言語(&L)
mHelp.Caption=ヘルプ(&H)
mHelpContent.Caption=ヘルプ(&H)
mLicense.Caption=ライセンス情報(&L)
mAbout.Caption=このソフトについて(&A)
pCopy.Caption=コピー(&C)
pCopyAsHex.Caption=hexコピー(&H)
pSelectAll.Caption=全て選択(&A)
BtnOpen.Caption=開く
BtnOpen.Hint=ファイルを開く
BtnSave.Caption=保存
BtnSave.Hint=ファイルに保存
BtnFill.Caption=フィルデータ
BtnFill.Hint=バッファを指定数値で埋める
BtnSwap.Caption=スワップ
BtnSwap.Hint=上位バイトと交換
BtnAuto.Caption=自動
BtnAuto.Hint=自動書き込み
BtnChkEmpty.Caption=ブランク
BtnChkEmpty.Hint=ブランクチェック
BtnRead.Caption=読み込み
BtnRead.Hint=ROM読み込み
BtnWrite.Caption=書き込み
BtnWrite.Hint=ROM書き込み
BtnVerify.Caption=ベリファイ
BtnVerify.Hint=ROMとバッファを比較
BtnClean.Caption=消去
BtnClean.Hint=ROM消去
BtnAbort.Caption=中止
BtnAbort.Hint=中止
BtnAbout.Caption=About
BtnAbout.Hint=このソフトについて
BtnExit.Caption=終了
BtnExit.Hint=終了
lbChipType.Caption=タイプ :
lbManuName.Caption=メーカー:
lbChipName.Caption=型番:
lbChipSize.Caption=サイズ :
BtnChipFind.Caption=チップ検索(&S)
BtnDetect.Caption=検出(&D)
spStatus.!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
RzToolbar.CustomizeCaptions.Close=閉じる(&C)
RzToolbar.CustomizeCaptions.MoveDown=下へ移動
RzToolbar.CustomizeCaptions.MoveUp=上へ移動
RzToolbar.CustomizeCaptions.NoTextLabels=No text labels
RzToolbar.CustomizeCaptions.SelectiveTextOnRight=Selective text on right
RzToolbar.CustomizeCaptions.ShowTextLabels=Show text labels
RzToolbar.CustomizeCaptions.TextOptions=Text Options
RzToolbar.CustomizeCaptions.Title=Custom Toolbar
OD.DefaultExt=Bin
OD.Filter=対応ファイル (*.bin;*.hex)|*.bin;*.hex|バイナリファイル (*.bin)|*.bin|Hexファイル (*.hex)|*.hex|全てのファイル (*.*)|*.*
SD.DefaultExt=Bin
SD.Filter=対応ファイル (*.bin;*.hex)|*.bin;*.hex|バイナリファイル (*.bin)|*.bin|Hexファイル (*.hex)|*.hex|全てのファイル (*.*)|*.*
sCH341_Status=Device state: %s.
sUseTime=%s – Time: %s
sRW_UseTime=%s – Speed: %d Byte/Sec, Size: %d Byte, Time: %s
sEditorOffset=Offset: %s, %d
sNoCH341=CH341プログラマーが接続されていません!
sIgnoreLengthRange=アドレス範囲を超えたファイル長は無視されます。
sRangeAddress=アドレス範囲(0x%s-0x%s)
sNoChipEmpty=このチップは空ではありません。
sWriteOperTimeout=書き込み操作に失敗しました。(タイムアウト)
sChipContentDifferent=チップとバッファの内容が不一致です。
sEraseOk=チップの消去に成功しました。ブランク確認してください!
sChipBlank=チップは消去されています!
sChipVerfyOK=チップ内容とバッファは同一です!
sAllOperCompleted=すべての操作が完了しました。
sBeginRange=開始アドレスが範囲外です
sEndRange=終了アドレスが範囲外です
sNotExit=プログラマ作業中、終了できません。
sFindNotWords=”%s”は見つかりません。
sGoto=アドレス移動
sUserAbort=中止しました
sConnectionStatus0=未接続
sConnectionStatus1=接続中
sInsertMode0=上書き
sInsertMode1=挿入
sWorkStatus0=確認中…
sWorkStatus1=読み込み中…
sWorkStatus2=書き込み中…
sWorkStatus3=検証中…
sWorkStatus4=消去中…
[TFrmFill]
!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
Caption=データバッファを埋める
Btns.CaptionCancel=取消(&C)
Btns.CaptionOk=実行(&O)
GB1.Caption=データ
GB2.Caption=範囲(0x0-0x0)
rbbit1.Caption=定数バイト (8bit)
rbbit2.Caption=定数ワード (16bit)
rbbit3.Caption=乱数値
rbbit4.Caption=連続バイト (8bit)
rbbit5.Caption=連続ワード (16bit)
RzLabel1.Caption=HEX:
RzLabel2.Caption=HEX:
RzLabel3.Caption=開始アドレス:
RzLabel4.Caption=終了アドレス:
[TFrmFind]
!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
Caption=Find
lbFind.Caption=内容検索(&N):
cbNoCase.Caption=大文字と小文字を区別(&C)
cbHex.Caption=16進形式(&H)
BtnFind.Caption=次を検索(&F)
BtnClose.Caption=取消(&C)
[TFrmOperOption]
!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
Caption=動作設定
GB1.Caption=一般設定
ChkWriteCompleteVerify.Caption=書き込み後ベリファイ(&W)
ChkWriteWaitTime.Caption=書き込み前に待機(&R)
ChkLastDir.Caption=最後に使用したフォルダを記憶(&M)
ChkWinStatus.Caption=ウインドウ位置とサイズを記憶(&E)
lbSec.Caption=秒
GB2.Caption=25 SPI FLASH
ChkUseFastRead.Caption=高速読込モードを使用(&U)
ChkUseAAI.Caption=SSTとESMT製チップに
AAIプログラムモードを使用(&A)
GB3.Caption=自動書き込み設定
CL.!GroupFont=MS UI Gothic,8,B,,clHighlight,DEFAULT_CHARSET
CL.Items.Text=消去
ブランクチェック
書き込み
ベリファイ
Btns.CaptionOk=OK(&O)
Btns.CaptionCancel=取消(&C)
[TFrmChipSel]
!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
Caption=チップ検索
lbChipName.Caption=チップ型番:
lbChipFindInfo.Caption=大文字小文字を区別せずワイルドカード文字“*”に対応(例:EN25*80)
DBGrid.Columns.Item0.Title.Caption=チップ型番
DBGrid.Columns.Item1.Title.Caption=チップサイズ
DBGrid.Columns.Item2.Title.Caption=メーカー
DBGrid.Columns.Item3.Title.Caption=タイプ
Btns.CaptionCancel=取消(&C)
Btns.CaptionOk=選択(&S)
sChipFindCount=Find %d Chips.
[TFrmLicense]
!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
Btns.CaptionOk=&OK
Caption=License Info
lbAddr.Caption=Address:
lbEmail.Caption=Email:
lbID.Caption=ID:
lbName.Caption=Name:
lbNickName.Caption=Nick Name:
lbPhone.Caption=Phone:
[TFrmAbout]
!Font=MS UI Gothic,8,,0,clWindowText,DEFAULT_CHARSET
sAboutCaption=About
sVerCaption=Version:
sAuthorCaption=Author:
sClose=&Close
sLicenseCaption=License:
sAuthor=SkyGz