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