ブログ

Armadillo-X1: I2C接続の温度センサーを接続して温度を計測する

at_ito
2016年12月5日 5時08分

Armadillo-X1は100ピンのB2Bコネクタが搭載されており、拡張ボードで機能を拡張することが多い製品です。100ピンのB2Bコネクタの各ピンには複数の機能から使用する機能を選択して使用することができます。(ピンマルチプレクス)今回はそのピンマルチプレクスの例として、Armadillo-X1にI2Cで温度センサーを接続してみます。

接続図

Armadillo-X1 ===== 100ピンコネクタ変換基板 ===== 温度センサー

※: 温度センサーは例としてADT7410を使用します。

マルチプレクスの設定(Device Treeの修正)

マルチプレクスを変更するには、Device Treeを修正する必要があります。

今回はArmadillo-X1のCON8の22, 23ピンをI2C2として使用します。

Device Treeは以下にも記述されていますので合わせて参照してください。
(参考: https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manual_ja-1.0.1/ch21.html#sct.howto-dt-brief )

ATDE上に展開したLinuxカーネルのディレクトリで、以下のコマンドを実行し、マルチプレクスを設定するためのパッチを適用してください。

[ATDE ~/linux-3.14-x1]$ wget https://users.atmark-techno.com/system/files/blogs/linux-3.14-x1-at5-con8-i2c2.patch
[ATDE ~/linux-3.14-x1]$ patch -p1 < linux-3.14-x1-at5-con8-i2c2.patch

修正内容は以下の通りです。

diff --git a/arch/arm/boot/dts/armadillo_x1.dts b/arch/arm/boot/dts/armadillo_x1.dts
index aa1a657..c5fba54 100644
--- a/arch/arm/boot/dts/armadillo_x1.dts
+++ b/arch/arm/boot/dts/armadillo_x1.dts
@@ -103,6 +103,13 @@
     };
 };
 
+&i2c2 {
+    clock-frequency = <400000>;
+    pinctrl-names = "default";
+    pinctrl-0 = <&pinctrl_i2c2>;
+    status = "okay";
+};
+
 &i2c4 {
     clock-frequency = <10000>;
     pinctrl-names = "default";
@@ -362,6 +369,15 @@
             >;
         };
     };
+
+    x1_ext {
+        pinctrl_i2c2: i2c2grp {
+            fsl,pins = <
+                MX7D_PAD_I2C2_SCL__I2C2_SCL    0x4000007f
+                MX7D_PAD_I2C2_SDA__I2C2_SDA    0x4000007f
+            >;
+        };
+    };
 };
 
 &iomuxc_lpsr {

上記パッチを当てた後、Linuxカーネルをビルドし、Armadilloに書込んだ後再起動を行ってください。

アプリケーションの作成

I2Cで接続した温度センサーから温度を取得するサンプル(ファイル名: i2c-tsens.tar.gz)をArmadilloでダウンロードし、以下のように実行ファイルを作成してください。

[armadillo ~]# tar zxf i2c-tsens.tar_0.gz
[armadillo ~]# cd i2c-tsens
[armadillo ~/i2c-tsens]# make

動作確認

以下のようにコマンドを実行して、温度センサーから温度を取得してください。

[armadillo ~/i2c-tsens]# ./tsens_adt7410 -d /dev/i2c-1