前提・実現したいこと
VS2019+PlatormIOでESP32を使ったシステムを作成しています。
FlashROMの余った領域(例えば3F0000番地から256バイト程度)をパラメータ領域として使用することを考えています。
具体的にはプログラムをFLashに書き込んだ後、esptoolを使い装置毎に異なる個別パラメータを書き込んで使用することを考えています。
どなたかご存じの方、アドバイスをいただけないでしょうか ・・
発生している問題
esptoolで書き込んだ場合、FlashROMのセクション単位での書き込みになるようです。
(0x1000番地単位の領域を消去~書き込みを行う)。
そのため一部だけ書き換えるなどを行うと、プログラムがほぼ暴走してしまいます。
このようなことを実現することは可能なのでしょうか?
試したこと
(1) 以下のようにsectiondef.csvを作成しました。
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x130000,
app1, app, ota_1, 0x150000,0x140000,
spiffs, data, spiffs, 0x290000,0x160000,
eeprom, data, 0x99, 0x3f0000,0x10000,
(2) またplatformio.iniに以下の定義を追加。
board_build.partitions = sectiondef.csv
(3) ソースコードには以下の定義を追加(テスト用として1024バイト)。
typedef struct {
char dat[ 1024 ] = { 0x00, 0x01, 0x02, ... };
} ESPPARAMS;
const PROGMEM ESPPARAMS espParams;
(4) ソースコードのsetup関数内には以下の処理を追加。
char *p = ( char * )&espParams; Serial.printf( "=> %x (%d)\r\n", p, sizeof( ESPPARAMS ) ); Serial.printf( "=> %x \r\n", p[ 0 ] ); Serial.printf( "=> %x \r\n", p[ 1 ] ); Serial.printf( "=> %x \r\n", p[ 2 ] ); Serial.printf( "=> %x \r\n", p[ 3 ] );
実行結果
このプログラムを実行すると以下のような実行結果になりました。
=> 3f400b60 (1024)
=> 0
=> 1
=> 2
=> 3
esptoolを使ってESP32の内容を読み出すと、該当データは 0x10b60番地からに存在していました。
試しに10b60番地を指定してパラメータを書き込むと、0x10000番地から0x10b5f番地までが消去(=0xff)されるので、プログラムが暴走してしまいます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/16 23:46
2021/08/17 14:49