AN-1119 Simple I2C IO Controllers with SLG46537V (Japanese)

このアプリケーションノートは、SLG46537VのI2Cマクロセルを使って、I/O制御を行う方法を説明するものです。これにより、図1に示すようなMCUを使うシステムに、容易に入出力端子を増設することが可能になり便利です。

I/O コントローラのシステム構成例

図 1. I/O コントローラのシステム構成例

コントローラ出力端子の増設方法

SLG46537Vの I2C インターフェースは、出力状態を含む全ての回路構成ビットの読み書きができるという意味で、非常に強力なものとなっています。 しかしながら、回路構成情報のビットに直接書き込みを行うことは、面倒になる場合も考えられます。というのは、それらのビットは2kのアドレス空間に散在する場合があるからです。これを単純な1バイトの制御にするために、SLG46537VではI2C のマクロセルが、他のセルにGUIを使って簡単に接続できるようにしました。図2は、I2C マクロセルの出力が単純に出力端子に接続された例を示しています。このようなI2C マクロセルの状態を、仮想入力と呼んでいます。入力は、レジスタビットアドレス1952から1959までに連続して書き込まれ、SLG46537Vのデータシートの Appendix A に記載されています。

GUI による I2C マクロセルと端子との結線

図 2. GUI による I2C マクロセルと端子との結線

レジスタビットをI2C write に対応されるには、単純にレジスタビットアドレスを8で割ることで、ワードアドレスが得られます。そして、モジュロ8の余りの値から、データバイト中のビットの位置を判別します。例えば、レジスタビット1959 はI2Cのコマンドでは、ワードアドレス 0xF4のビット位置 7 に該当します。図1に、全仮想入力の対応表を示します。

Word Address Data Bit Position Register Bit Definition SLG46531V Register Bit
244 0xF4 0 Virtual Input 0 1952
1 Virtual Input 1 1953
2 Virtual Input 2 1954
3 Virtual Input 3 1955
4 Virtual Input 4 1956
5 Virtual Input 5 1957
6 Virtual Input 6 1958
7 Virtual Input 7 1959

 

表 1. 仮想入力 レジスタビットアドレス

I2C write は、以下のように構成されます:

1. Start

2. Control Byte (含デバイスアドレス, R/W bit=0)

3. Word Address

4. Data

5. Stop

図2に、 I2C writes による仮想入力を示します。以下の点にご注意下さい。

1. オープンブラケット ‘ [‘ は START、そして クローズブラケット ‘]’ は STOPを意味します。

2. 最初のバイト(the Control Byte)の上位4ビットはデバイスアドレスに利用され、SLG46537Vのデバイス毎にプログラムできます。

これにより、同じバス上にSLG46537Vを16個まで個別にアドレスすることが可能です。次の3ビットは、 SLG46537Vでは000に固定されています。 Control byteの最後のビットはR/Wに対応し、write では 0 です。例えば、“0011”にプログラムされたデバイスは、Control Byte に0x30と設定することでwrite が行えます。

I2Cコマンド 結果
[0x30, 0xF4, 0xFF] プログラムアドレスビットとして “0011” を書き込み、ワードアドレス ”0xF4” のレジスタに ”0xFF” のデータを書き込む。その結果、仮想ビットは全てHIGHとなる。
[0x10, 0xF4, 0x00] プログラムアドレスビットとして “0001” を書き込み、ワードアドレス “0xF4” のレジスタに “0x00” のデータを書き込む。その結果、仮想ビットは全てLOWとなる。

 

表 2. コマンドの例

動作波形 – 仮想ビットの書込み

I2C による仮想ビット書き込み命令の動作波形は、下図のようになります。チャネル 1 と 2 は、それぞれI2C のクロック (SCL) 及びデータ (SDA), です。デジタル信号 D0 から D7 は、図2に示す仮想ビットの接続に対応します。I2C のインターフェースは、400 kHz で動作しており、SDA 及び SCL の信号線は、10kohm の抵抗で3.3 V にプルアップされています。

D0- PIN#12 (OUT0)

D1- PIN#13 (OUT1)

D2- PIN#14 (OUT2)

D3- PIN#15 (OUT3)

D4- PIN#16 (OUT4)

D5- PIN#17 (OUT5)

D6- PIN#18 (OUT6)

D7- PIN#19 (OUT7)

Channel 1 (yellow/second bottom) - PIN#8 (SCL)

Channel 2 (light blue/bottom) - PIN#9 (SDA)

観測された下の波形は、完全な I2C シーケンス: スタート、コントロールバイト、ワードバイト、データバイト、ストップを含みます。見て分かる通り、出力端子(12 から 19) は、データバイトの最後(8ビット目)のSCLの立下りで更新されます。

I2C コマンド [0x00, 0xF4, 0x00] I2C コマンド [0x00, 0xF4, 0xFF]

図 3. I2C コマンド [0x00, 0xF4, 0x00]

図 4. I2C コマンド [0x00, 0xF4, 0xFF]

1us 時間軸でのデータバイト 0x00 1us 時間軸での データバイト 0xFF

図 5. 1us 時間軸でのデータバイト 0x00

図 6. 1us 時間軸での データバイト 0xFF

コントローラ入力端子の増設方法

I2C read は、以下のように構成されます:

1. Start

2. Control Byte (R/W=0)

3. Word Address (sets the internal address counter on device)

4. Start

5. Control Byte (R/W=1)

6. Data (from device)

7. Stop

例えば、GPIO 2から 20 (pin11 は GNDのた除く)を読み込みます。それらのデジタル入力ビットは、レジスタビットアドレス <1921:1927> 及び <1968:1976> に格納されます。これは、 SLG46537VのデータシートのAppendix Aに記載された通りです。 下表3には、関連する情報が示されています。

Word Address Data Bit Position Register Bit Definition SLG46531V Register Bit
240 0xF0 1 Pin2 Digital Input 1921
2 Pin3 Digital Input 1922
3 Pin4 Digital Input 1923
4 Pin5 Digital Input 1924
5 Pin6 Digital Input 1925
6 Pin7 Digital Input 1926
7 Pin10 Digital Input 1927
246 0xF6 0 Pin12 Digital Input 1968
1 Pin13 Digital Input 1969
2 Pin14 Digital Input 1970
3 Pin15 Digital Input 1971
4 Pin16 Digital Input 1972
5 Pin17 Digital Input 1973
6 Pin18 Digital Input 1974
7 Pin19 Digital Input 1975
247 0xF7 0 Pin20 Digital Input 1976

 

表 3. GPIO 入力レジスタビットアドレス

表4には、I2Cによる仮想入力の読み込みの例が示されています。ここで、以下の点に注意が必要です。

1. オープンブラケット ‘ [‘ は STARTの意味で、 クローズブラケット ‘]’ は STOPを表します。

2. 最初のバイト(Control Byte)の上位 4 ビットは、デバイスのアドレスに使用されます。これらのビットは、個々のSLG46537Vにプログラムされます。これにより、同一バス上に16個までのSLG46537V を接続可能です。次の3ビットは、SLG46537Vでは000に固定されます。Control Byteの最後のビットはR/Wで、0で書込みです。例えば、“0011” にプログラムされたデバイスは、Control Byte に0x30を入れておくことにより書き込み(Write)が行えます。

3. ‘r’ バイトは、スレーブデバイスから読み出されたデータです。 スレーブデバイスからAck信号を受けると、マスターはSTOPがあるまでスレーブデバイスからその次の1バイトを読みに行きます。

コマンド 結果
[0x00, 0xF0, [0x01, r] アドレスビット “0000” でプログラムされたデバイスからの読み出し。ワードアドレス 0xF0 の内容が読み出される。
[0x30, 0xF6, [0x31, r, r] アドレスビット “0011” でプログラムされたデバイスからの読み出し。ワードアドレス 0xF6 及び次のバイト 0xF7 の内容が読み出される。

 

表 4. コマンドの例

表2の2番目のコマンドは、ピン12から20に対応する2バイトのデータを読む以外は、上の例と同じフォーマットに従います。ここでピン20のデータは、2番目のデータバイトの最初のビットとなります。

ベンチテスト – GPIOの読み込み

このベンチテストのため、I2C経由でブランクチップのGPIO 2 から 10 の読み込みを行います。

最初に、ブランクチップを開発キットに装着します。エミュレータを起動してエミュレーションモードでSLG46537Vに電源を投入します。このとき、ピン8と9(SCLとSDA)の外部コネクタがイネーブル状態であることを確認して下さい。外部コネクタにマスターデバイスのSCLとSDAを接続して、I2Cコマンド送信を始めて下さい。

ブランクチップのI2C マクロセルのアドレスは “0000” です。下表は、ピン2と3をHIGHにした状態で表4の命令を実行した様子を表しています。図7はエミュレータの設定画面で、図8は端末でのプログラムの結果です。結果は予測通りで、読み出したデータバイトは0x06 でした。これは、0xF0 のビット位置3と2が論理レベルHIGHであることを意味しています。表3に依れば、このビット位置がピン2と3に該当することは明らかです。

SLG46537V ブランクチップのエミュレータ設定: ピン 2 と 3 が HIGH

図 7. SLG46537V ブランクチップのエミュレータ設定: ピン 2 と 3 が HIGH

Readコマンドの実行結果

図 8. Readコマンドの実行結果

まとめ

このアプリケーションノートは、SLG46537V のI2CマクロセルをI/Oコントローラとして利用する方法について、説明したものです。この手法を使うことで、ユーザはマイクロコントローラとの間で多くのGPIOを使うことなく、データのやり取りを行うことが可能です。I2C経由で仮想入力7:0 に書き込んだり、GPIOを読み込んだりする能力により、SLG46537Vはより柔軟な設計の可能性を広げます。

About the Author

Name: Yu-Han Sun

Background: Yu-Han attained a BS in Electrical Engineering from the University of Illinois at Urbana Champaign. She is currently working with CMICs as an applications engineer at Silego Technology.

Contact: appnotes@silego.com

 

Files



See full list of Application Notes