この Howto では、Armadillo-IoT G4 を使用し、様々な電圧レベルの I2C デバイスと接続する方法を紹介します。
特定の I2C デバイスに関してはこの HowTo では触れません。
Armadillo-IoT G4をベースにした内容になっていますが、Armadillo-X2でも動作確認しています。 Armadillo-X2はArmadillo-IoT G4の機能を一部減らして小型にした製品で、基本的には同じソフトウェアで動作します。 また、拡張インターフェース(CON11)の仕様も同じですので、CON11用に作った拡張ボードは両方の製品で動作します。
Armadillo-IoT G4 の I2C バス仕様
Armadillo-IoT G4 の CON11 には以下の 3 つの I2C バスがあります。
信号レベルはすべて 1.8V となっています。
I2C4 (/dev/i2c-3)
Armadillo-IoT G4 上で 4.7kΩ で VDD_1V8 にプルアップされています。
CON11 ピン番号 | 信号名 | I2C の信号名 |
---|---|---|
5 | I2C4_SCL | SCL |
7 | I2C4_SDA | SDA |
I2C5 (/dev/i2c-4)
Armadillo-IoT G4 上でプルアップされていません。
また、後述する Device Tree のカスタマイズが必要です。
CON11 ピン番号 | 信号名 | I2C の信号名 |
---|---|---|
19 | SAI5_RXD0 | SCL |
27 | SAI5_MCLK | SDA |
I2C6 (/dev/i2c-5)
Armadillo-IoT G4 上でプルアップされていません。
また、後述する Device Tree のカスタマイズが必要です。
CON11 ピン番号 | 信号名 | I2C の信号名 |
---|---|---|
17 | SAI5_RXC | SDA |
29 | SAI5_RXFS | SCL |
必要な回路
スレーブデバイスに応じてレベル変換回路と電源回路が必要になります。
レベル変換回路
Armadillo-IoT G4 の 信号レベルは 1.8V なので、
1.8V 以外のスレーブデバイスと通信するためにレベル変換回路が必要です。
使用可能と思われるレベル変換モジュールの例を以下に示します。
- 秋月電子 AE-FXMA2102
- 秋月電子 AE-PCA9306
- Switch Science SSCI-023757
- SparkFun BOB-15439
この HowTo では、秋月電子 AE-FXMA2102 を使用しました。
また、製品マニュアル内「14.4.6. 回路設計」で紹介されているように、LSF0204RUTR などの IC を使用してもよいでしょう。
MOSFET によるレベル変換回路もありますが、Armadillo 側が 1.8V と低電圧であるため、安定動作しない可能性があるのでおすすめしません。
電源回路
CON11 に出ている電源は 1.8V と 5V なので、 3.3V デバイスなどを使用する場合は電源回路も必要です。
3端子レギュレータなどを使用してください。
Armadillo-X2の場合は、CON16の3.3Vを利用することが可能です。
この HowTo では、LT1117 互換 IC を使用しました。
接続方法
5V デバイスを使用する場合の接続
レベル変換回路が必要です。
I2C4 (/dev/i2c-3) を使用する場合、Armadillo-IoT G4 側のプルアップは不要です。
CON11 ピン番号 | 信号名 |
---|---|
30 | VDD_1V8 |
32 | VDD_5V |
34 | GND |
3.3V デバイスを使用する場合の接続
電源回路・レベル変換回路が必要です。
I2C4 (/dev/i2c-3) を使用する場合、Armadillo-IoT G4 側のプルアップは不要です。
CON11 ピン番号 | 信号名 |
---|---|
30 | VDD_1V8 |
32 | VDD_5V |
34 | GND |
1.8V デバイスを使用する場合の接続
そのまま接続し、プルアップするだけで使用できます。
I2C4 (/dev/i2c-3) を使用する場合、プルアップも不要です。
CON11 ピン番号 | 信号名 |
---|---|
30 | VDD_1V8 |
34 | GND |
Device Tree のカスタマイズ
I2C5,I2C6 を使用する場合、製品マニュアル内「9.9.3. Device Tree をカスタマイズ」の方法で I2C バスを割り当て、生成された DTB を Armadillo-IoT G4 に書き込んでください。
コンテナの作成・ログイン
コンテナをイメージをダウンロード・起動します。
I2C4 (/dev/i2c-3) を使用する場合の例です。
[armadillo ~]# podman run -it --rm --device=/dev/i2c-3 docker.io/alpine /bin/sh
また、 --device=/dev/i2c-3:/dev/i2c-0
とすると /dev/i2c-3
をコンテナ内で /dev/i2c-0
として扱えます。
確認
準備
i2cdetect
を使用するため、 I2C Tools
をインストールします。
[container /]# apk update && apk upgrade
(省略)
OK: 5 MiB in 14 packages
[container /]# apk add i2c-tools
(1/1) Installing i2c-tools (4.3-r0)
Executing busybox-1.34.1-r5.trigger
OK: 6 MiB in 15 packages
疎通確認
以下のように i2cdetect
を実行すると、Armadillo-IoT G4 がスレーブデバイスを認識できるか確認できます。
I2C4 (/dev/i2c-3) を使用する場合の例です。
[container /]# i2cdetect -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- 62 -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
この例ではアドレスが0x3e
,0x62
と0x70
のスレーブデバイスを認識(ACKを受信)しています。