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;