flashromでSPIフラッシュメモリの認識/読み出し/消去/書き込みをするときの操作方法(Raspberry Pi + Raspberry Pi OS環境)

オープンソースの便利なソフト「flashrom」の操作方法

シリアルフラッシュメモリなどの識別、読み出し、消去、書き込みなどができる便利なソフトであるflashrom。私もRaspberry Piで使うことがあるが、たまにしか使わないため操作方法をよく忘れてしまう。今回は自分の備忘録も兼ねて、基本的な操作方法をまとめておく。

前提条件として、Raspberry PiのSPI端子とフラッシュが接続されており、flashromがすでにapt-getコマンドなどでinstallされているという前提で書いていく。ちなみに私はRaspberry Pi 4を使っている。RaspberryPiとの接続についてはflashromの公式Webサイトの以下のページに説明がある。

https://www.flashrom.org/RaspberryPi

また、Raspberry Pi以外のlinux端末からライターなどを使ってflashromを使ってSPIで通信するときも、基本的には同じ方法でできるはず。


デバイスの識別(Identifying)

-pオプションをつけることでデバイスの識別ができる。私はFlashメモリとラズベリーパイが問題なく接続されているか確認するために、まず最初にこのコマンドを実行している。

Raspbery PiのSPIで接続している場合はlinux_spi:dev=/dev/spidev0.0を指定する。また、spispeedで周波数を指定する(単位はkHz)。spispeedを大きくすれば読み出しや書き込みを早く行うことができる。

ただし、Raspbery PiとFlashメモリを接続するジャンパー線の長さが長くなったりすると通信が不安定になる。flashromのページだと1000kHz(1MHz)に設定されているが、私は5000kHz(5MHz)程度に設定することが多い。

以下が5000kHzで認識をする場合のコマンド。問題なく認識できれば、Flashのメーカー名やチップ名が表示される。

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=5000


データの読み出し(Read)

-rオプションをつけて、そのあとに任意のファイル名を書いて実行することで、flashメモリに書かれているデータを読みだしてファイルとして保存することができる。ファイルはコマンドを実行したディレクトリに保存される。

なお、容量が大きいFlashメモリのデータを読み出す場合、spispeedを小さくしすぎるとかなり時間がかかるので、-pコマンドでどの程度の周波数で通信できるか確かめておき、なるべく大きいspispeedで実行することをオススメする。

以下のコマンドでは、readfile.binというファイル名でflashからreadしたデータを保存する。

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=5000 -r readfile.bin


データの消去(Erase)

Flashメモリに書き込みを行うには、ファイルを書き込む前に一度Eraseを行って書き込まれているデータを消去する必要がある。

消去のコマンドは以下のように-Eオプションをつけて実行する。なお、私はEraseを行う前に念のため-rオプションで読み出しを実行し、書かれているデータをファイルにバックアップすることにしている。

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=5000 -E


データの書き込み(Write)

-wオプションをつけて、そのあとにFlashメモリに書きたいファイル名を指定することで、flashメモリにデータを書き込むことができる。なお、このコマンドを実行すると自動的にVerify(ファイルがFlashメモリに正常に書き込まれているか確認すること)も実行される。

以下のコマンドでは、writefile.binというファイルを書き込んでいる。

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=5000 -w writefile.bin


他にも便利なコマンドがあれば追記していきたい。


0 件のコメント :

コメントを投稿