RX24Tで内臓データフラッシュの読み書き

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;

データ・フラッシュ・サンプル