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」カテゴリの記事
- LUT-Networkの蒸留とMobileNet風構成とセマンティックセグメンテーション(2020.03.09)
- LUT-Networkの蒸留(Distillation)について(2019.12.29)
- FPGAでのDNN(Deep Neural Network)の整理(LUT-Netまとめ)(2019.12.15)
- LUT-NetのFPGAリソースについて(2019.12.08)
- MNIST認識のリアルタイム動作環境更新(2019.09.02)
この記事へのコメントは終了しました。
« ZyboでLinuxからUIOアクセス(備忘録) | トップページ | Zybo Z7 への Raspberry Pi Camera V2 接続(MIPI CSI-2受信) »
コメント