Flash API

概要

Flash API は、内蔵フラッシュメモリへのデータ書き込みおよびメモリマップアクセスを提供する低レベル API です。

xmc::flash::init() で初期化した後、write() でデータを書き込み、mmap() / munmap() でメモリマップ読み出しを行います。

情報取得

xmc::flash::getSectorSize

size_t xmc::flash::getSectorSize();

フラッシュメモリのセクターサイズをバイト単位で返します。 書き込み・消去の最小単位として使用します。

xmc::flash::getRange

void xmc::flash::getRange(size_t *base, size_t *size);

フラッシュメモリの読み可能な領域のベースオフセットとサイズを取得します。

basenullptr でない場合はベースオフセット [バイト] を書き込み、 sizenullptr でない場合は領域全体のサイズ [バイト] を書き込みます。

RP2350 版ではプログラムデータを含む Flash 領域全体の空間を返します。 書き込みを行う場合、通常は使用されていない末尾から使用します。

ESP32S3 版では SPIFFS パーティションの領域を返します。 書き込みを行うと、既存のファイルシステムは破壊されます。

書き込み・マップ

xmc::flash::erase

XmcStatus xmc::flash::erase(uint32_t offset, size_t size);

フラッシュメモリの指定領域を消去します。

offset には消去開始オフセット [バイト] を指定します。 size には消去するバイト数を指定します。実際にはセクターサイズに切り上げて消去されます。

戻り値は XmcStatus で、成功時は XMC_OK です。

xmc::flash::write

XmcStatus xmc::flash::write(uint32_t offset, const void *data, size_t size);

フラッシュメモリにデータを書き込みます。

offset には書き込み先のオフセット [バイト] を指定します。 data には書き込むデータのポインタを指定します。 size には書き込むバイト数を指定します。

書き込み前に対象領域を消去する場合は erase() を別途呼び出してください。

戻り値は XmcStatus で、成功時は XMC_OK です。

xmc::flash::mmap

XmcStatus xmc::flash::mmap(uint32_t offset, size_t size, void **handle, const uint8_t **outPtr);

フラッシュメモリの指定領域をメモリマップします。

offset にはマップ開始オフセット [バイト] を指定します。 size にはマップするサイズ [バイト] を指定します。 handle にはマップ解除時に munmap() へ渡すハンドルが書き込まれます。 outPtr にはマップ後のアドレスが書き込まれます。

戻り値は XmcStatus で、成功時は XMC_OK です。

xmc::flash::munmap

void xmc::flash::munmap(void *handle);

mmap() でマップした領域を解除します。 handle には mmap() で取得したハンドルを指定します。