Howto

I2C バスを使用する方法 (Armadillo-IoT ゲートウェイ G4/X2)

この 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,0x620x70のスレーブデバイスを認識(ACKを受信)しています。