いっぺーちゃんの いろいろやってみよ~

EspruinoのオンボードストレージをLinux上で作成する

「まずはLチカやろ?」というツッコミを覚悟の上で、いきなりオンラインストレージです。

 

ESP32のEspruinoはオンボードのSPI-Flash上にオンボードストレージを持っています。

オンボードストレージはSPI-Flashのアドレス0x300000 から1Mバイトに配置されています。

 

通常は以下のような手順で使用します。

フォーマットする

E.flashFatFS({format:true});

 

ファイルを書き込む

var fs   = require("fs");
var dat = "hogehoge";
fs.writeFileSync("/hoge.txt", dat);

 

ファイルを読み出す

var read_data=fs.readFileSync("/hoge.txt");

 

これだと、大きなファイルを書き込むのにはちょっと不便です。

 

以下は、このディスクイメージをLinux上で作成し、SPI-Flashに書き込む方法です。

モジュールファイルなどをあらかじめ書き込んでおくのに有効です。

(Linux上での操作です)

 

まず、空のバイナリファイルを作成し、FATでフォーマットします。

dd if=/dev/zero bs=1K count=1024 | tr "\000" "\377" > esp_diskimage.bin
mkfs.fat -f 1 -F 12 -s 1 -S 4096 -M 0xF0 esp_diskimage.bin 

 

ディスクイメージファイルをマウントします。

mkdir mnt
sudo mount -o loop esp_diskimage.bin mnt

 

書き込みたいファイルをコピーします。パーミッションの関係で、sudoで実行する必要があります。

sudo cp 《コピーするファイル》 mnt/

 

書き込みが終わったらマウント解除します。

sudo umount mnt

 

出来上がったディスクイメージファイルをESP32に書き込みます。

/work2/esp/Espruino/esp-idf/components/esptool_py/esptool/esptool.py \
--chip esp32 --port /dev/ttyUSB0  --baud 921600 \
write_flash --flash_mode "dio" --flash_freq "40m" \
0x300000 esp_diskimage.bin

 

 

ちなみに、現在のオンボードストレージをバッグアップしたい場合は以下のように実行します。

/work2/esp/Espruino/esp-idf/components/esptool_py/esptool/esptool.py \
--chip esp32 --port /dev/ttyUSB0  --baud 921600 \
read_flash 0x300000 0x100000