HaLake Magazine

コワーキングスペースHaLakeの技術情報発信サイト!IoT,AR,VRなど最新技術情報をお届け!

超小型SBC『LicheePi Nano』を触る! その4 〜SPIフラッシュ内蔵OSバックアップ編〜

f:id:takumishinoda:20200217174526j:plain 今回はLicheePi nanoボードに搭載されたSPIフラッシュメモリに内蔵されたOSのバックアップの取り方を紹介します。 普通の用途であれば、microSDにOSを書き込んで使用すれば容量も確保できて良いですが本格的な組込み用途にはSPIフラッシュからの起動が必須になってきて、バックアップが欲しくなったのでまとめてみました。

記事シリーズ


注意事項

今回の記事の内容を実践した場合、最悪LicheePi nanoが起動できなくなることがあるので実践は自己責任でお願いします。
機器の破損等で記事筆者及び当社は一切の責任を負い兼ねます。
また、筆者の開発環境はMacBookなのでWIndowsLinuxでの方法は説明しません。


学習内容

  • SPIフラッシュの読み書きをできるようにする
  • LicheePi nanoOSのバックアップをとる


事前実践準備


本記事で利用するソフトウェア


目次

  1. w25q128(SPIフラッシュ)について
  2. 機材準備
  3. ドライバ・ソフトウェア準備
  4. バックアップを取る


1. w25q128(SPIフラッシュ)について

シリーズ記事第一回のハードウェア構成でも説明しましたが、LicheePi nanoにはw25q128(Winbond 25Q128FVSG)というSPIフラッシュが搭載されており、OSが書き込まれています。
このSPIフラッシュはJEDECという半導体規格に基づいているため、調べるといくらか情報が見つかります。
今回はこのJEDEC規格に対応したリードライタを見つけたので、利用していきます。


2. 機材準備

前章で紹介したリードライタ及びクリップは以下のリンクから購入できます。

https://www.amazon.co.jp/dp/B07W7RQ53X

リードライタ本体は500円程で購入できますが、今回SPIフラッシュが基盤に実装されているので接続するためのクリップが必要です。
このクリップが本体より高いので他に方法があればと思います...

f:id:takumishinoda:20200217162821p:plain
基盤実装されていても書き込める

まずはクリップとリードライタを接続します。
下の写真の部品を接続してからリードライタに接続します。

f:id:takumishinoda:20200217162924j:plain
クリップと接続部品

この二つが接続できたら次はリードライタ本体に接続します。
この接続は絶対に間違えないようにしましょう。
リードライタ本体の背面にも接続例が載っているので確認して接続します。

f:id:takumishinoda:20200217164024j:plain
リードライタとの接続

次に、クリップがどのピンにつながっているかを確認します。
筆者は以下の写真のようにテスターの導通確認モードで確認しました。
クリップには番号や目印がないので、1番の場所に目印をつけています。

f:id:takumishinoda:20200217164913j:plain
印をつけた!

ここまでできたら、LicheePi nanoボードとの接続です。
ボードのSPIフラッシュの1番ピンは丸があるところなので、下の写真にクリップの印がくるように接続します。

f:id:takumishinoda:20200217165400p:plain
1番ピンを確認

クリップでの接続は賛否があり、耐久性や接続の安定性に声が上がっているようです。
下の写真を参考にSPIフラッシュとクリップを正しく接続します。

f:id:takumishinoda:20200217170425p:plain
NGな接続

f:id:takumishinoda:20200217170505p:plain
OKな接続

ちゃんと接続できていれば、機器の準備は完了です。


3. ドライバ・ソフトウェア準備

次にパソコンでの作業でリードライタを使用するためのドライバと、ソフトウェアをインストールします。
筆者はMacBookで作業したので、その他のOSでの作業方法を記載しませんのでご了承ください。

まずはドライバのインストールをするために、以下のリンクから自分の環境にあったドライバを選択してインストールします。

kig.re

次にリードライタを使用するためのソフトウェアであるFlashromをインストールします。
MacBookでのインストールは非常に簡単で、Homebrewからインストールできます。
以下のコマンドでインストールしましょう。

$ brew install flashrom
$ flashrom -v

インストールできたら、リードライタをPCに接続して以下のコマンドでリードライタが認識できているか確認します。

$ flashrom -p ch341a_spi

結果:

$ flashrom -p ch341a_spi
flashrom v1.1 on Darwin 19.2.0 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
libusb: info [darwin_claim_interface] no interface found; setting configuration: 1
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.

上の結果のように表示されたらリードライタが認識されている証拠です。
これでソフトウェアのインストールも終了したので、ついにバックアップをしていきます。


4. バックアップを取る

さて、やっと準備ができたのでバックアップを取っていきます。
全ての接続とPCからリードライタが認識されているのを確認したら、以下のコマンドでSPIフラッシュからの読み込みが開始されます。

$ flashrom -p ch341a_spi -r 任意のディレクトリ/rom.bin

結果:

$ flashrom -p ch341a_spi -r ~/Downloads/aaa.bin                           
flashrom v1.1 on Darwin 19.2.0 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
libusb: info [darwin_claim_interface] no interface found; setting configuration: 1
Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on ch341a_spi.
Reading flash... done

コマンドが終了して上の結果のように表示され、指定した任意のディレクトリにrom.binがあるのを確認できたらバックアップが完了です。
しかし、まれに一部のデータが間違えて読み出されている可能性があるようなので複数回バックアップを取って、それらをdiffコマンド等で違いがないかを確認した方がよさそうです。
もしちゃんとバックアップが取れているか気になる場合は、以下のコマンドでSPIフラッシュのデータを消してからバックアップを書き込んでOSが起動するかを確認しましょう。

$ flashrom -p ch341a_spi -e
$ flashrom -p ch341a_spi -w 書き込むbinファイル

筆者環境でのリードライタの読み書き時間を計測してみたので、参考にしてみてください。

読み込み 書き込み 削除
約2分 約7分30秒 約8分30秒

まとめ

  • JEDEC規格のSPIフラッシュからデータを読み書きできた
  • LicheePi nanoの工場出荷時OSのバックアップを取れた
  • 次回はSPIフラッシュ用のOSをビルドしてOSを換装してみる