2023/01/01(Sun)BIOS更新で文鎮化してしまったThinkPad X13 Gen2を自力で直したメモ
2023/01/01 1:04
環境メモ
マシン ThinkPad X13 Gen2 Type Number 20WK-CTO1WW 2021/06製 文鎮化した日 2022/12/28 文鎮化時点のBIOSバージョン BIOS 1.50 (N35ET50W), ECP 1.41 (N35HT41W)を適用しようとした模様 文鎮化時点のIntel MEバージョン 15.0.42.2235を適用しようとした模様 文鎮化直前の状態としては、 ●Lenovo Vantageで、BIOSアップデートとIntel MEアップデートのみがリストされた状態になっていた ●この時、バッテリは8割程度充電済みで、社外製60WのUSB-Cアダプタで充電しながら行っていた ●アップデート適用を実施して、Windowsがリブートしたところ、BIOS書き込みはDOS画面で順調に進行していたものの、最後に成功のメッセージが出る部分は目視できておらず、気がついたときには﹁電源LEDが通常の点灯状態で、LCDバックライトが付いたり消えたりしている﹂状況だった ●電源を投入し直したり、純正の電源アダプタを繋げても、緊急リセットピンホールを10秒長押ししても状況が変わらず、BIOS POST画面が出ない ●キーボードのバックライトLED、F1,F4,CapsLock,FnLock(Esc)のLEDは一切点灯しない 以上のことから、BIOSもしくはIntel MEのアップデート適用時に問題が起こった可能性が高いと判断した次第です。 通常ならメーカーにセンドバックして修理を依頼するしかない、という状況ですよね。 しかし購入から1年ちょっと経過しており、延長保証も付けていなかったため*1、なんとか自力で直らないものか、色々やってみることに。
*1 : あまりノートPCを持ち歩かないので物理消耗・故障も起こりづらく、パーツなら大体自力で交換出来るし、まさか、BIOS生焼けするとか思わないし…
▼CPU上部のアップ … 保護テープにヒートシンクが被さっているので一部だけしか見えませんが
▼チップ部のアップ … "Winbond 25R256JV"が見えます
さて、このチップ、メーカ情報によれば、3.3V, 256Mbit=32MB, SPI interfaceです。︵ググれば更にピンアサインなど、細かいデータシートも出てきます︶
旧3桁型番のThinkpad X260でもWinbond社のW25Q128FV等が使われているようだったので、容量の大きな物へとシフトしているのでしょう。
結局は、先人達のblogにも良く登場していたメジャーなKeeYees CH341AというProgrammerを購入することにしたのですが、実は公表されている互換性ガイドにはこの型番が載っていません。
まあ、似た型番があるし、安いのでダメだったらチップ容量だけソフトに手動設定する等して乗り切ればよいやと買ってしまいました。
Amazonで送料込1400円程。Amazon.co.jp発送で12/28に購入し、通常配送では1/1到着予定だったにもかかわらず、12/30に届きました。
▼商品ページ
他の特性として、電圧が3.3Vだったり、5Vあるいは1.8Vだったり、型番が25xx系と24xx系などあるので、間違った電圧をかけてチップ自体を破壊しないようには気を付けましょう。
![x13gen2-04.png](/pub/mo/image/bios/.thumbnail/x13gen2-04.png.jpg)
▼AsProgrammer
![x13gen2-06.png](/pub/mo/image/bios/.thumbnail/x13gen2-06.png.jpg)
.oOO( サイズとページが埋め込まれるだけっぽいので、ここの値さえ分かればリストに無いチップでもProgramできるのでは…? )
ちなみにAsProgrammerは日本語表記もあるものの、部分的にロシア語に化ける部分もあったので、割り切って英語で使う方が良いかも。
*3 : ブラウザでのダウンロード時に、マルウェア警告が出ましたが、まあ…^^;
修理方法
大まかな修理方法と概算費用をリサーチしたところ メーカ修理 修理サービス - 引き取り修理の修理概算料金 - Lenovo Support JPによれば、作業費18,920 + 送料3,410 + システムボード部品 57,750~ ≒ 8万円~コース 街のPC修理屋さん 場所にもよるものの、成功報酬で1.5万円とか? という感じで、まあ安いPC/中古PCなら買い直しも考える位のお値段がするわけですが、そもそもBIOSはEEPROM ICに実装されているので、ROM Programmer (ROM Writer)と呼ばれる機械を使えば、外︵≒別のPC︶から強制的に書き換えることが出来ます。街の修理屋さんがやっていることは十中八九コレでしょう。*2 *2 : 中にはメーカに部品発注して、交換工賃をメーカよりお安くやってるだけの所もあるかもしれないけどEEPROMの特定とROM Programmerの選定
ROM Programmerを選ぶに辺り、EEPROMの特性にあった機器を選定するのはマストです。 まずはPCを分解し、EEPROMを見つけることから始めます。 以下、毎度書くのは省略しますが、基盤を弄るときは電源のUSB-Cケーブル、内蔵バッテリ、CMOS電池を必ず抜いて作業します。 裏蓋を開けるとCPUからあまり遠くない位置に、8pinで大きめのチップがあるはず…ということで探していきますが、保護テープやフィルムの下に隠れていることもあるので、くまなく見つけます。 ThinkPad X13 Gen2 (20WK-CTO1WW)の場合、Winbond社のW25R256JVというチップがCPU横の保護テープ下に隠れていました。 ▼全景![x13gen2-01.jpg](/pub/mo/image/bios/x13gen2-01.jpg)
![x13gen2-02.jpg](/pub/mo/image/bios/.thumbnail/x13gen2-02.jpg.jpg)
![x13gen2-03.jpg](/pub/mo/image/bios/.thumbnail/x13gen2-03.jpg.jpg)
CH341Aについて
使い方は至ってシンプルで、probeを8pinのEEPROMに配線した後、USBメモリのような本体と繋ぎ、正常動作するWindows PCにUSB-Aコネクタを差し込むだけです。ただ、万人が扱えるシロモノでないのは確かですけど。 デバイスドライバは、Amazon購入後に送られてくるショップからのコメントに添付されたPDFに含まれています。が、GitHubのそれらしいリポジトリにも入っているので、私はこれを使用しました。*3 上のzipには、説明書の他、USBデバイスのドライバ、ソフトウェアが含まれています。 ただ、信用のおけないアプリだったので、これらのツールは全てVM環境内にインストールし、USB機器をVMゲストへbypassして実施しました。 インストール自体はOKだったものの、CH341A添付のソフトには、W25R256JV用の設定が無かったため、別のGitHubに公開されているAsProgrammerを使ってみることに。v2.3.0a時点で、こちらには設定がありました。 ▼CH341A![x13gen2-04.png](/pub/mo/image/bios/.thumbnail/x13gen2-04.png.jpg)
![x13gen2-05.png](/pub/mo/image/bios/.thumbnail/x13gen2-05.png.jpg)
![x13gen2-06.png](/pub/mo/image/bios/.thumbnail/x13gen2-06.png.jpg)
![x13gen2-07.png](/pub/mo/image/bios/.thumbnail/x13gen2-07.png.jpg)
![x13gen2-08.png](/pub/mo/image/bios/.thumbnail/x13gen2-08.png.jpg)
チップへの接続方法
CH341には、接点付きのクリップが付属しているので、これを使ってEEPROMチップを挟むようにすれば良いのですが、X13 Gen2の場合はCPU付近の絶縁シートの下に埋まっているので、ヒートシンク︵+CPUファン︶とシートの両方を一旦取り外す必要がありました。 完全に露出するとこんな感じ。![x13gen2-09.jpg](/pub/mo/image/bios/x13gen2-09.jpg)
![x13gen2-10.jpg](/pub/mo/image/bios/x13gen2-10.jpg)
![x13gen2-11.png](/pub/mo/image/bios/.thumbnail/x13gen2-11.png.jpg)
![x13gen2-12.png](/pub/mo/image/bios/.thumbnail/x13gen2-12.png.jpg)
2023/1/1 14:00 ICパッケージについての追記
twitterで教えて頂いたのですが、CH341Aに付属のクリップはSOP(Small Outline Package)というICの横からガルウィング形のリードが出ているものを挟み込む物で、W25R256JVのようなWSON(Very-Very thin Small Outline Non-leaded package)のようなリード無しで電極パッドのみのIC向けでは無いとのことです。@nvsoftsさんありがとうございます。 なのでX13 Gen2のBIOS修理には、基板に半田付けか、基板から部品を外して変換アダプタ噛ませるか、いずれにせよ半田ごて必須ということになりそうですね。 なので、諦めて半田付けすることに。 適当な電線を8本用意し、予備ハンダをしておいてから、一番細いコテ先に切り替えてEEPROMに半田付けします。隣のゴム製ケーブルガイドを焦がさないように注意。横着して外さずにやりましたが、取った方が安全です。![x13gen2-13.jpg](/pub/mo/image/bios/x13gen2-13.jpg)
![x13gen2-14.jpg](/pub/mo/image/bios/x13gen2-14.jpg)
オリジナルのバックアップ
接続状態を万全にした上で、Readを再実施した︵ツールバーの□→ボタン︶ところ、0xFF以外の意味のある文字が見えました。 他の方の作業スクショとも比べましたが、Eyecatcherが必ずコレというものではないようなので、PHCMから始まっていないからといって失敗ではないと思います。![x13gen2-15.png](/pub/mo/image/bios/.thumbnail/x13gen2-15.png.jpg)
![x13gen2-16.png](/pub/mo/image/bios/.thumbnail/x13gen2-16.png.jpg)
ファームウェアの解析
取り出したデータを目で読んでいくのは大変なので、UEFITool NEを使って中身の構成を確認してみます。 UEFIToolは色々亜種があり、 無印のUEFI Tool 編集できるが、サポートしている形式が限定的 UEFITool NE(New Engine) 編集できないが、サポートしている形式が無印より多い とのことなので、NEの方+適当なバイナリエディタ︵Bzなど︶を使うことにします。 で表示してみるとこのようになります。![x13gen2-17.png](/pub/mo/image/bios/x13gen2-17.png)
ダウンロードデータとの比較
UEFIToolを使って、吸い出したファイルから後半16MBのBIOS regionと、firmware.binから16MBピッタリになるUEFI file(6C60EE00-C316-...の部分)を適当なファイルに切り出します。![x13gen2-18.png](/pub/mo/image/bios/x13gen2-18.png)
![x13gen2-19.png](/pub/mo/image/bios/x13gen2-19.png)
What's next?
ここまでに分かったことは ・EEPROMチップ自体は壊れていない ・焼かれているBIOSはほぼ最新2.50になっていて、Microcode部分は完全一致する︵生焼けではない?︶ 残っている疑念は ・UEFIのその他の領域が壊れている? ・もしかしたらIntel ME領域が壊れた?︵この方の症状と同じ?︶ 最初にIntel MEの方を疑ったものの、Intel マネージメントエンジン 15.0 ファームウェア 15.0.42.2235を展開して出てくるファイルの中で、UEFIイメージっぽい*.capを開いてみるも、3MBだったり10MBだったり、ME regionそのままという感じではなかったので、こちらは断念。 先に、BIOS regionをベタ埋めしてみる作戦をとってみます。Write時の罠
バイナリエディタを使って、吸い出したデータの後半16MBをぶった切り、firmware.binの内容を連結して新しいbinファイルを作ってみました。 それをWriteしてみた︵ツールバーの□←ボタン︶のですが、実はこの操作はちょっと間違っていました。![x13gen2-20.png](/pub/mo/image/bios/.thumbnail/x13gen2-20.png.jpg)
本当に正しく書けたのか?
そういえば、読むときは慎重にやっていたのに、正しくかけたか確認していなかったので、試しにVerifyしてみることに。 すると、なんと先頭に近いoffset=0x00232000でエラー。 内容を読み込んでみると、この領域は0x00ということになっていました。![x13gen2-21.png](/pub/mo/image/bios/x13gen2-21.png)
![x13gen2-22.png](/pub/mo/image/bios/.thumbnail/x13gen2-22.png.jpg)
再書き込み
ということで、再度Unprotect -> erase -> program -> verifyを使って書き込んでみると、今度はVerifyで失敗しなくなり、正しい内容が書き込めた模様。![x13gen2-23.png](/pub/mo/image/bios/.thumbnail/x13gen2-23.png.jpg)
しかし…まだ罠はあった
さすがに何か進展があるだろと期待しつつ電源を入れるも、状況変わらず電源LEDは付かないし、LCDも真っ暗のまま。 さすがにBIOSの故障じゃないのではないかと思いつつ、もう打てる手が無いので、EEPROMから電線を外したところ、これがBINGO! W25Q256JVのデータシートによれば、このEEPROMは133MHzで動作するらしいので、転送時はゆっくりとデータを書くということもあり影響は無さそうでも、Programmerから外して電線を付けたまま宙ぶらりにしてしまうと、アンテナとしてノイズ源になってしまい、ThinkPadが通常のスピードで読み出した場合に影響を及ぼしていると思われます。 リード線を外した後にバッテリーやCMOSを戻し、USB-Cケーブルを接続したところ、勝手に電源が入り、電源LED点灯、そしてキーボードLEDが軽く全点灯して全消灯! おぉ、これは通常の起動と同じと思いながら待っていると、30秒程度画面暗転が続いた後、Lenovoロゴが表示され、BIOS Self Healing backup progressing...と表示が始まりました。![x13gen2-24.jpg](/pub/mo/image/bios/.thumbnail/x13gen2-24.jpg.jpg)
成功か?……ん…?
しばらく待っていると、次のようなメッセージが表示され停止しました。![x13gen2-25.jpg](/pub/mo/image/bios/.thumbnail/x13gen2-25.jpg.jpg)
![x13gen2-26.jpg](/pub/mo/image/bios/.thumbnail/x13gen2-26.jpg.jpg)
晴れて成功!
最後のEsc押下後、BIOSからのメッセージが出なくなり、通常通りの時間でWindowsがbootするようになりました。やったね!固有データの復元は?
UEFIのMain画面を見る限り、S/NやUUID、MACアドレスは保持されたままでした。![x13gen2-27.jpg](/pub/mo/image/bios/.thumbnail/x13gen2-27.jpg.jpg)
C:\Users\Kero>wmic path SoftwareLicensingService get OA3xOriginalProductKey OA3xOriginalProductKey (ここに表示されるはずのプロダクトキーが何も表示されない)Self-healingによりBIOSが復元されたとはいえ、復元する場所はBootGuardの領域直前のEfiSystemNvDataFvGuid\EVSA store以下にLnvActivationVar等が保管されている箇所までは弄らないようなので、ここはオリジナルのまま維持しておくのがベターだったかもです。
![x13gen2-28.png](/pub/mo/image/bios/x13gen2-28.png)