質問: void setup() { Serial.begin(115200); EEPROM.begin(10); Serial.println((String)EEPROM.length()); } void loop() { } ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) arduino core for the esp32 ver1.0.1です。 ボードはSWITCH SCIENCE ESPR DEVELOPER 32です。
回答: まだちゃんと調べられてませんが、回答がつかないようなので取り急ぎ。 ESP-WROOM-32 ( ESP32 ) SPIFFS メモリサイズを大きくする方法 あたりをみると、EEPROMのエミュレーション領域を指定するファイルがあり、ここに指定した名前でEEPROMクラスのコンストラクタを呼んでやらなきゃいけない、のでは。 EEPROMライブラリのデフォルトではこの名前がeeprom0とかになっていて、設定ファイルと合っていないのでEEPROMの領域を取得できず、lengthが0になっている、とかいうことのような気がします。 M5Stackで試してみました。 デフォルトでdefault.csvは ``` # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x140000, app1, app, ota_1, 0x150000,0x140000, eeprom, data, 0x99, 0x290000,0x1000, spiffs, data, spiffs, 0x291000,0x16F000, ``` となっていました。なので、サンプルプログラムのeeprom_writeは書き込みを行えました。 ここで、default.csvのeepromをeeprom0と変えて再度コンパイル、実行してみると、 `failed to initialise EEPROM` となり、プログラムは動作しませんでした。 ということで、default.csvを確認してみて下さい。 ちなみに、ソースを見る限りではEEPROMClass::lengthはEEPROMClassのコンストラクタで与えられた値を返すようですね。その値がなにかに使われている様子もないので、他機種とのコンパチピリティのためのパラメータなのでしょうか。lengthの返す値は意味を持たないようです。