文鎮化したMinnowboardを復旧させる
MinnowboardはIntel Atomを搭載した シングルボードコンピュータである. Minnowboardを使った実験で誤ったファームウェアを書き込んでしまい brick (文鎮化) させてしまったので SPI Flashを外部から書き換えることで復旧させる.
今回対象とするのは
- Minnowboard MAX (MAX)
- Minnowboard Turbot Dual-Core (Turbot)
である. 基本的にはこれらは同じ仕様であるが, 後述するような差異がSPI Flashに存在する.
SPI Flash Programmerを使った書き込み
Updating Firmware via SPI Flash Programmer を参考にする. このチュートリアルではDediProg SF100という 書き込み機を用いているが 手元にないため,他の書き込み機を利用する.
Minnowboardが搭載するSPI Flashには2種類存在する. Issue #98 によればMAXや一部のTurbotでは1.8VをVccとするが 大多数のTurbotではVccが3.3Vであるとのことである. これらの見分け方としてある抵抗が実装されているかで 調べることができるとされている.
- 抵抗R152があり,抵抗R818がない場合: 3.3V
- 抵抗R152がなく,抵抗R818がある場合: 1.8V
Minnowboard Turbot Domumentation によればそれぞれ次のようなSPI Flashが搭載されている.
- 3.3V: WINBOND W25Q64BVSSIG, MICRON N25Q064A13
- 1.8V: WINBOND W25Q64FWSSIG, MICRON N25Q064A11
Minnowboard MAX
MAXは以前にcorebootのバイナリイメージを書き込んだが 失敗したためbrickしていたものである. このボードでは1.8VのSPI Flashが搭載されていた. ここではEZP2010を用いて書き込みを行った.
Minnowboard Turbot Dual-Core
Turbotに対して Intel Architecture Firmware Resource Center のrelease noteにあるように UEFI Shell経由でファームウェアを書き換えた. これはIntelの配布するバイナリイメージでは問題なく動作した. 一方で手元でビルドしたファームウェアを書き込んだ場合, UEFI Shellに入る直前に次のようなAssertion Errorにより ハングするようになってしまった.
OSIndication Variable Value 0
ASSERT_EFI_ERROR (Status = Not Found)
ASSERT [ISPDxe] c:\minnowboard2closesource\Vlv2DeviceRefCodePkg\ValleyView2Soc\NorthCluster\ISPDxe\ISPDxe.c(273): !EFI_ERROR (Status)
ここに書かれているソースコードは公開されておらず, バイナリファイルのみが配布されている. このため原因の特定は容易ではない.
2019/08/05 追記
以上の記事について公開していたところ, Brian Delgadoさんから助言をいただき Assertion Errorについて解決できたので追記する. 問題はファームウェアのビルドに使うiaslである. 新しいiaslでは上記の問題が発生するため, VERSION 20160527 を利用してビルドする. 手元ではこれでDebug, Relaseどちらも動作することを確認した. Brian Delgadoさん,情報をどうもありがとうございました.