データフラッシュの運用

データフラッシュについて

まずは、以下のブログをご覧ください。

ここ数週間、一番ホットなブログですね。

データフラッシュを運用することで、以下のことが可能になります。

  1. 既存のRAM領域以上の領域を扱える
  2. 電源を落としても迷路情報を保持できる
  3. プログラムを書き換えても継続できる

上記のリンクから、1と2の実現が可能だと思います。

が、しかし。 一部トラップ(事故設置型)の回避と、
3のを行うためには、 リンク先には含まれていない情報があるため、それを補完します。

RX631のFCK指定

RX631では、外部クロックの利用のため、いくつかのコードを記述する必要があります。
クロックの起動後、CMTやMTUのタイマーで使用する分周比を設定するのですが、ここで引っかかりました。

SYSTEM.SCKCR.BIT.PCKB = 1;
SYSTEM.SCKCR.BIT.PCKA = 1;
SYSTEM.SCKCR.BIT.BCK = 1;
SYSTEM.SCKCR.BIT.FCK = 1  //ここ
SYSTEM.SCKCR.BIT.ICK = 1;

ノリと勢いで、とりあえず1にしてしまったせいで、誤動作し、

  • 書き込みが不安定
  • 削除が不安定
  • 読み取りした値にffが混じる。

といったことがありました。

SYSTEM.SCKCR.BIT.PCKB = 1;
SYSTEM.SCKCR.BIT.PCKA = 1;
SYSTEM.SCKCR.BIT.BCK = 1;
SYSTEM.SCKCR.BIT.FCK = 4;  //今は4で運用してます。2でもいけるはず?
SYSTEM.SCKCR.BIT.ICK = 1;

どうやら、FCKが早すぎたらしいです。
細かいことは各自よろしく。とりあえず、お気を付けください。

書き込み後にデータフラッシュ領域の値が書き換わる

以下の記事は、検証が雑です。
皆さん頑張ってください。

皆さんmotファイルをマイコンに書き込み時には、ツールから、指定した領域に対して書き込むことになります。
このとき、データフラッシュ格納領域にも改変が行わる場合があります。

そのため、ログは取ったけど、出力するコードがないため、全部やり直しということになります。
そんなことは嫌ですよね? このとき必要なものが、IDコードプロテクトです。

詳しくは各自!

RX631のデータシートでIDコードで検索してもらえれば、どんなものかわかると思います。
自分の用途では、p.1908に書いてあるコードをvecttbl.cで修正するだけでした。

さて、コードも書いた。書き込んだ。これでいける!!
と、思うじゃないですか。
先ほどのIDコードが書き込みツール上で必要になります。 値はデータシート丸コピです。

const unsigned long id_code[4] = {
    0x45010203,
    0x04050607,
    0x08090A0B,
    0x0C0D0E0F
};
//  上位8byte = 0x4501020304050607
//  下位8byte = 0x08090A0B0C0D0E0F
//  全体連結  = 0x450102030405060708090A0B0C0D0E0F

書き込みツール(Resesas Flash Prgrammer)で以下の操作が必要になります。

  • 操作設定タブ > ベリファイのチェックを外す。
  • ブロック設定タブ > DataFlash 1 のEraseチェックを外す。
  • 接続設定 > IDコードの設定 で連結したIDコードを入れる。

以上です。
Renesas Flash ProgrammerFDT2倍の速さで書き込みができることと、 IDコードの保存できるため、おすすめです。

昔は操作しにくかったのですが、V3にもなり、使い勝手がFDT以上になったと思います。
Windows10環境でFDTを使うとIDコードあたりの動作がかなり不安定でした。
アプリ落ちるし、毎回IDコードを問われるし。イラついたため、消えてもらいました。

それでは、自分に合った運用を見つけて快適なマウスライフを。