retrage.github.io

文鎮化した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さん,情報をどうもありがとうございました.