センサや A/D, D/A などは I2C 接続して使用すると市販のものがそのまま使えて便利なので、今回は VisionFive2 で I2C を使ってみます。
接続
VisionFive2 にも RaspberryPi のように GPIO ヘッダがあり、I2C 接続もできるようになっているのでドキュメントの通りに接続します。
今回はスイッチサイエンスで入手できる Grove 用水位センサを接続します。
シリアルやオシロスコープのプローブもあるのでちょっとゴチャゴチャしていますが、Grove 用コネクタからそのまま VisionFive2 のピンに繋げているだけです。
dtsファイルの編集
I2c 接続を使用できるように dts ファイルを設定します。dts ファイルは VisionFile SDK の /linux/arch/riscv/boot/dts/starfive/jh7110-visionfive-v2.dtsi です。今回は 3 番(GPIO58)と 5 番(GPIO57)ピンを使うので、デフォルトのまま i2c-0 として使用可能です。
I2C 情報の確認
はじめに i2c-tools をインストールします
chiyama@starfive:~$ sudo apt install i2c-tools
i2cdetect が使用可能になるので、I2C バスの情報を確認してみます。
chiyama@starfive:~$ sudo i2cdetect -l
sudo: unable to resolve host starfive: Name or service not known
i2c-0 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-2 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-5 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-6 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-7 i2c Inno HDMI I2C adapter
chiyama@starfive:~$
i2c-0 が認識されているので、続いてデバイスの確認をします。
chiyama@starfive:~$ sudo i2cdetect -y -r 0
sudo: unable to resolve host starfive: Name or service not known
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77
chiyama@starfive:~$
製品ページによると I2C アドレスは 0x77 と 0x78 を使用しているとのことで、0x77 は認識できています。しかし、0x78 以上は I2C では 10 ビットアドレスモードでないと認識できないようです。man を見ても i2cdetect では 10 ビットアドレスモードに言及されていないので、対応していないのかもしれません。ひとまず 0x77 が認識できたので良しとしておきます。
データを取得する
i2cget でデータを取得してみます。
chiyama@starfive:~$ sudo i2cget 0 0x77 sudo: unable to resolve host starfive: Name or service not known WARNING! This program can confuse your I2C bus, cause data loss and worse! I will read from device file /dev/i2c-0, chip address 0x77, current data address, using read byte. Continue? [Y/n] y 0x00 chiyama@starfive:~$
このとき、オシロスコープの波形もみておきます。
それっぽい波形が出ているので、ちゃんと動いているようですね。ここまでくれば、プログラムからセンサデータの読み書きはできそうです。