GreenPAK(SLG46826)をI2C経由で触ってみる その7 レジスタ書き込み

概要

前回はI2Cアドレスの調査をしていました。今回は書き込みプログラムを調整して、NVMではなくレジスタに直接書き換える方法を調べてみました。

GreenPAKの起動の仕組み

  1. パワーオンリセットで最低限の初期化をする
  2. NVMのフラッシュ領域より回路情報をレジスタに読み出し
  3. 回路情報の初期化をして起動

上記の流れになっています。NVM領域から回路情報を読み込んで動いています。NVM領域は多くのGreenPAKチップは1度しか書き込めない領域です。出荷時に書き込んで利用する用途ですね。

SLG46826は何度も書き換えられるフラッシュを積んでいるシリーズになります。これはIn-System ProgrammabilityでISPと呼ばれる機能になります。現在はSLG46824、SLG46826、SLG47004のチップで対応しています。

SLG46824はSLG46826の廉価版で、若干安くて機能が制限されています。金額差が43円と38円ぐらいで、5円の差がありますが、個人で使う分にはSLG46826でいいと思います。SLG47004はアナログ回路が充実しているチップなのですが、まだ未入手です。

さて、SLG46826はISPの仕組みがありますので最低でも1000回はNVMに書き込みが可能です。ISPを搭載していないチップに関しては1度しか書き込めないので、気軽に動作検証ができません。しかし、NVMではなく起動してからレジスタを直接書き換えることで、実チップでの動作確認が可能となります。

書き換え方法

I2C接続が可能なチップであれば、NVMの書き込みと同じ方法で、レジスタ宛に送信することで書き込みが可能でした。I2C接続できないチップでも方法はあると思いますが、今回はI2C接続用のライブラリを作っているので気にしないことにします。

実験してみる

SLG46826はI2Cアドレスを4つ待ち受けています。0と1がレジスタ、2がNVM、3がEEPROM領域になります。NVMではEraseしてからでないと書き込めないですが、レジスタ領域にはそのまま書き込めが大丈夫でした。

実装してみた

読み出しと書き込みをレジスタとNVMを選択できるようにしてみました。まずはWebブラウザで画面を拡張しました。

レジスタの状態です。GPIOなどの状態も表示されているのでNVMとは表示が異なりますが、今動いている回路の情報になります。

こちらはNVM領域です。前回と同じですが、表示形式がIntel HEXフォーマットに変更されています。ここの情報をコピーして、書き込むことでかんたんに回路を変更できると思います。ほぼゼロで:100Cの行がちょっと設定されているのが出荷直後の状態になります。

前回まで単独のリセットがなかったので追加しました。それほど使うことがないのでEraseとまとめて表示する形になっています。

書き込みはプルダウンで書き込み場所を選択できます。現状はレジスタを標準にしました。

まとめ

ISPで何度も書き込めるチップでも、ちょっとしたテストはレジスタ領域に書き込んだほうが便利そうでした。自作基板の動作確認も複数種類の回路を気軽に書き込んでテストできるので、出荷状態が残った状態でテストが可能になりました。

EEPROMアクセスが残っていますが、あまり使わない機能なので後回しになっています。そろそろ調べようかな。。。レジスタ書き込みが気軽にできるようになったので、他のチップも試してみたいところではあります。とはいえSTQFN-24とかの実装は難しそうだな、、、

続編

コメント