前回はとりあえず動かしてみたという程度でしたが、今回は GreenPAK のデータシートを読んで分かったことなどをめもして行きます。個人的な要約も兼ねて。
電気的特性
デバイスを使う上で重要なものです。厳密に書きませんのでざっくりと。
- DC 特性
- 電源電圧(VDD)は 3.3V と 5V の両方に対応。
- VDD2 (特定のマクロ用電源)は VDD 以下である必要あり。
- AC 特性
- SCL 周波数は Fast Mode で 400kHz max., Fast Mode Plus で 1MHz max.
- 不揮発性メモリ(NVM)へのページ書き込み待ち時間は 20msec。
- NVM のページイレース待ち時間は 20msec。
なお僕は評価している際に、出力ピンを LED に繋げて、誤ってそのまま GND に落としたら電流過多で壊れました(それはそう)。注意しましょう。自戒の意味も込めて。
独特なI2C通信
このデバイスはスレーブアドレスが特殊です。このデバイスはスレーブアドレスがコントロールコードとブロックアドレスで構成されます。
コントロールコードは置いておいて、ブロックアドレスはアクセスするメモリ領域の種類を選択するものです。つまり、2つの要因でスレーブアドレスが変化しうるということなのです。
まあ、見かけ上3つのスレーブが接続されているとみなしたほうが気が楽かもしれません。
データシートに書いてありますが、I2C スレーブアドレスを MSB から 8bit 分記述すると以下のような感じです。
bit(s) | データシート上の説明 | 補足 |
---|---|---|
7:4 | Control Code | とあるメモリ(後述)にて書き込まれている値 |
3:1 | Block Address | A10からA8。書き込み先のメモリ領域を選択する |
0 | R/W |
Control Code に関しては 動作めも - Control Code について にて説明します。
メモリ構成
メモリは概ね3つの領域に分かれています。それぞれを示すブロックアドレスも含めて記載します。なお x は Don't care とします。
A10:A8 | 説明 |
---|---|
00x | 揮発性のレジスタ領域 |
010 | 不揮発性メモリ(NVM) |
011 | EEPROM |
揮発性/不揮発性レジスタ領域
00x
と 010
をまとめて説明します。
まず 00x
とした場合。
こちらを用いてデータを書き込むと直接回路の設定が反映されて動作を開始します。もっと直接的に言うと、揮発性メモリ領域であるレジスタ領域に書き込むことによって、回路を直接構成します。
ここには結線情報やデバイス設定を書き込むことになります。ただ、揮発性なので電源を切ると消えてしまいます。RAM と思っていいでしょう。ってか多分構成は RAM です。
続いて 010
とした場合。
このとき、I2C マスターはスレーブに対して不揮発性メモリ(NVM)に書き込みを指示したことになります。この領域は電源を切っても保持され、パワーオンリセット時にレジスタ領域にコピーされます。
回路情報を記憶し次回以降もそのまま使えるようにと値を格納する領域だというわけですね。
パワーオンリセット後、同じワードアドレス(ブロックアドレス以外の部分)のレジスタ領域にコピーされるので、例えば NVM の 0x03
に書き込んだ値はレジスタ領域の 0x03
にコピーされます。意外と単純ですね。
最後に 011
とした場合。
こちらは単に EEPROM として動作します。この領域は実際の回路動作には用いることができず、単なる記憶デバイスとしてのみ動きます。キャリブレーション値とか、自分で決めたデバイスナンバーを入れてマイコン制御する際に使うと言った感じでしょうか。ともかく自由に使える領域です。
動作めも
各種動作に関する挙動と設定をメモしておきます。随時追記するかも。
Control Code について
地味に謎ですが、結局は I2C スレーブアドレスの一部を構成する部分というだけです。こちらのサイトからもわかりますが、デフォルトは 0x01 のようですよ。この値は 0xCA
で定義されているので、これを変えれば良いです。0xCA
のビット構成はこんな感じ。
Bit(s) | 説明 |
---|---|
3:0 | Control Code |
4 | 0ならこのレジスタからControl Codeの 0bit 目を適用 |
5 | 0ならこのレジスタからControl Codeの 1bit 目を適用 |
6 | 0ならこのレジスタからControl Codeの 2bit 目を適用 |
7 | 0ならこのレジスタからControl Codeの 3bit 目を適用 |
一方で書き込みが上手く行かなかったとか、イレースだけしたとかの場合は 0x00 になります。不揮発性メモリを変更した際はパワーオンリセット後に変更されるという点に注意してください(パワーオンリセットをもって、NVM から転送されるから)。
データ書き込みについて
データの書き込み/消去に関してはページ単位で行うものとされていますので、下位ワードアドレス 4bit は 0000 である必要があります。特にデータ書き込み時は 16Bytes ごとにデータを転送するようにしましょう。
パワーオンリセットを起こす
実際に電源を抜き差ししなくても、パワーオンリセットを発行させることが可能です。
それは 0xC8
に 2 を書き込むことで実行されます。