RX24Tの内臓データフラッシュの読み書きが出来たので、関係クラスと
サンプルを追加した。
RX24Tでは、内臓データフラッシュは8Kバイトあり、1Kバイト毎の
ブロックに分かれている。
※消去は、1Kバイト単位で行う。
以前、RL78では、内臓データフラッシュへのアクセスは、情報が公開さ
れておらず、使う事が出来なかった。
※操作ラブラリーだけが公開されており(gcc 版は無い)ソースコードや、
関係レジスターの説明等は未公開となっている為、実装をあきらめた。
※「公開できない」理由について、色々考えたりもしたが、それが、トリガー
となって、RL78からは疎遠になってしまった。
RXマイコンでは、アクセスが多少面倒ではあるものの、内蔵データフラッ
シュを使う事が出来る。(常識でもある)
また、ROMフラッシュ領域も、書き込みなどが行えるものの、操作が面倒
なのと、当面必要では無いので、実装していない。
データフラッシュは、消去が1バイト単位で出来ない(1Kバイト毎)ので、
汎用的なメモリーとして扱うようにするには、巧妙なマネージメントを必要
とする、これは、フラッシュの書き換え可能回数制限や、ブロック・イレー
スに、時間が多少必要など、フラッシュメモリーの特性が起因している。
データフラッシュの扱いは、RXマイコンで共通なら、問題は無いが、デバ
イスによって異なるようだ・・
今回、RX24T専用となったので、
RX24T/flash.hpp RX24T/flash_io.hpp
専用のクラスを用意した。
ただ、データフラッシュに対する操作は同じ仕様とする。
//-----------------------------------------------------------------//
/*!
@brief 開始
*/
//-----------------------------------------------------------------//
void start() const;
//-----------------------------------------------------------------//
/*!
@brief 読み出し
@param[in] org 開始アドレス
@return データ
*/
//-----------------------------------------------------------------//
uint8_t read(uint16_t org) const;
//-----------------------------------------------------------------//
/*!
@brief 読み出し
@param[in] org 開始アドレス
@param[in] len バイト数
@param[out] dst 先
*/
//-----------------------------------------------------------------//
void read(uint16_t org, uint16_t len, void* dst) const;
//-----------------------------------------------------------------//
/*!
@brief 消去チェック
@param[in] bank バンク
@return エラーがあれば「false」
*/
//-----------------------------------------------------------------//
bool erase_check(data_area bank) const;
//-----------------------------------------------------------------//
/*!
@brief 消去
@param[in] bank バンク
@return エラーがあれば「false」
*/
//-----------------------------------------------------------------//
bool erase(data_area bank) const;
//-----------------------------------------------------------------//
/*!
@brief 書き込み
@param[in] src ソース
@param[in] org 開始オフセット
@param[in] len バイト数
@return エラーがあれば「false」
*/
//-----------------------------------------------------------------//
bool write(const void* src, uint16_t org, uint16_t len) const;
//-----------------------------------------------------------------//
/*!
@brief 書き込み
@param[in] org 開始オフセット
@param[in] data 書き込みデータ
@return エラーがあれば「false」
*/
//-----------------------------------------------------------------//
bool write(uint16_t org, uint8_t data) const;