« ZyboでLinuxからUIOアクセス(備忘録) | トップページ | Zybo Z7 への Raspberry Pi Camera V2 接続(MIPI CSI-2受信) »

2018年4月15日 (日)

ZyboのLinuxからI2Cを使ってみる

引き続き、@ikwzm様の環境でのLinux作業ので備忘録です。

イメージは下記のものを利用させていただいております。
FPGA+SoC+Linuxのブートシーケンス(ZYNQ+Vivado編)
https://qiita.com/ikwzm/items/7e90f0ca2165dbb9a577

作業に先立って、I2Cを有効にした ps7_init_gpl.c/ps7_init_gpl.hを作る必要があります。

ここでは再びベアメタルでI2Cを利用したときの下記のサイトを参考にさせていただきます。

ZYBOのPSでI2Cを動かしてみた
http://todotani.cocolog-nifty.com/blog/2016/09/zybopsi2c-615d.html

これを前回と同じ方法で、U-Boot の SPLに仕込みます。

次に、DeviceTreeです。@ikwzm様の環境の devicetree-4.14.21-zynq-zybo-z7.dts にすでにI2Cの項目があり

i2c@e0004000 のところで

status = "disabled";

となっているので

status = "okay";

とするだけです。
dtc で dtb に変換した後に、boot.bin と dtb をSDカードにコピーして起動したらめでたく

/dev/i2c-0

が見えるようになりました。

#include <sys/ioctl.h>
#include <linux/i2c-dev.h>

を追加して

int i2c = open("/dev/i2c-0",O_RDWR);
ioctl(i2c, I2C_SLAVE, 0x68);
uint8_t    buf[16];

buf[0] = 0x75;
write(i2c, buf, 1);
read(i2c, buf, 1);
printf("WHO_AM_I:0x%02x\n\r", buf[0]);

みたいな感じでとりあえず、MPU9250 の WHO_AM_I レジスタが読めました。

速度は DeviceTreeで

clock-frequency

の項目で指定は出来るようですが、動的に変えられないのかな?
とりあえずDeviTreeの変更で
clock-frequency = <0x61a80>;
とすることで目的の400Hz動作には設定できたようです。

ついでですが、I2Cを有効にした hdf (ハードウェア定義ファイル) を元に petalinuxでもdevice-treeを生成してみましたが、該当部分は

        i2c@e0004000 {
            compatible = "cdns,i2c-r1p10";
            status = "okay";
            clocks = <0x1 0x26>;
            interrupt-parent = <0x4>;
            interrupts = <0x0 0x19 0x4>;
            reg = <0xe0004000 0x1000>;
            #address-cells = <0x1>;
            #size-cells = <0x0>;
            clock-frequency = <0x61a80>;
        };

となっていました。

ちなみに

sudo apt-get install i2c-tools
sudo apt-get install libi2c-dev

とかすると、いろいろツールが入り

bin/i2cdetect -y -r 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

とかも出来ました。

少しづつですが RaspberryPi 的に使えるようになって来ました。まだまだ覚えることが多そうです。

« ZyboでLinuxからUIOアクセス(備忘録) | トップページ | Zybo Z7 への Raspberry Pi Camera V2 接続(MIPI CSI-2受信) »

FPGA」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ZyboのLinuxからI2Cを使ってみる:

« ZyboでLinuxからUIOアクセス(備忘録) | トップページ | Zybo Z7 への Raspberry Pi Camera V2 接続(MIPI CSI-2受信) »