-
Notifications
You must be signed in to change notification settings - Fork 0
UrowNVM
USERROW領域書き換え支援ツール。
- この支援ツールの機能は namespace
UrowNVM
に属するメンバー関数として提供される。
BOOTROW 領域は
<FlashNVM.h>
で支援される。
uint8_t buf[USER_SIGNATURES_SIZE];
UrowNVM::userrow_load(&buf);
Serial.printHex((const void *)&buf, sizeof(buf), ' ', 16).ln().ln();
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
if ( UrowNVM::userrow_clear()
&& UrowNVM::userrow_save(&buf, sizeof(buf))
) Serial.println(F("[success]"));
else Serial.print(F("*failed* 0x")).println(NVMCTRL_STATUS, ZHEX, 2);
}
USER_SIGNATURES_SIZE の定義値は品種により異なる。
NVM領域消去と書換には十分な電力供給が必要で、不足すると不正な結果になりうる。
書換後にはUrowNVM::userrow_verify
で比較検証するのが好ましい。
操作中少なくとも 2.85V 以上は維持されるべきだ。サーボモーターや無線デバイスを操作している最中にこれらを実行するのは危険である。
一部の製品は低電圧下での NVM消去と書き換え結果が保証されていない。eratta情報を確認すること。
依存性:<avr/io.h>
USERROW 領域を消去する。NVM操作に成功すれば真を返す。
- USERROW 領域は全体で1ページのフラッシュメモリ領域である。データ保存専用で、コード実行はできない。
- megaAVR と tinyAVR 系統のみ、一般の EEPROM 領域と同様に 1バイト粒度の書き換えを
<avr/eeprom.h>
EEPROM 操作ライブラリで行える。
USERROW 領域を _data_addr が示すデータメモリに複写する。先頭からのバイト数は _save_size で与える。省略時は USER_SIGNATURES_SIZE 定数の値に従う。NVM操作に成功すれば真を返す。
読み込み開始位置は USERROW 領域先頭(USER_SIGNATURES_START)に固定である。
単に USERROW 領域を読むだけなら、通常のデータ空間メモリ配列と同様に USERROW[n]
が利用できる。
この関数はuserrow_save
を使う事前準備としての、構造体に複写したりするショートカットを提供する。
USERROW 領域へ _data_addr が示すデータメモリ内容で書き換える。先頭からのバイト数は _save_size で与える。省略時は USER_SIGNATURES_SIZE 定数の値に従う。NVM操作に成功すれば真を返す。
書き込み開始位置は USERROW 領域先頭(USER_SIGNATURES_START)に固定である。
この関数はFlashNVM::bootrow_save
関数同様に現在値との論理積を結果として残す。つまり事前にuserrow_clear
関数で USERROW 領域全体を消去しておく前提だが、現在値を変更したくないバイト値には 0xFF
を書くことで追記操作が可能である。
USERROW 領域と _data_addr が示すデータメモリ内容で比較一致を試みる。先頭からのバイト数は _save_size で与える。省略時は USER_SIGNATURES_SIZE 定数の値に従う。一致すれば真を返す。
検査開始位置は USERROW 領域先頭に固定である。
/* 比較ベリファイ */
if (UrowNVM::userrow_verify(&nvm_buffer, sizeof(nvm_buffer)))
{ /* success */ }
Twitter(X): @askn37
BlueSky Social: @multix.jp
GitHub: https://github.com/askn37/
Product: https://askn37.github.io/
Copyright (c) 2022,2023 askn (K.Sato) multix.jp
Released under the MIT license
https://opensource.org/licenses/mit-license.php
https://www.oshwa.org/
multix.jp/てくにかるむ(休眠中)
Multix Zinnia Product SDK [*AVR]
AVR.JP(日本語訳)
AVR-LIBC(日本語訳)