LinuxでZynq 7000 PSのI2cコントローラをスレーブコントローラとして設定する方法

LinuxでZynq 7000 PSのI2cコントローラをスレーブコントローラとして設定する方法

私はZynq 7000でzedボードを使用しています。究極の目標は、Zynq7000の物理PS上のI2c-0コントローラがI2cスレーブとして機能することです。

私のデバイスのLinuxイメージを生成するためにyocto / bitbakeを使用しています。これまで、I2c-0デバイスのSDAおよびSCKラインをzedボードの物理ピンにマッピングできました。 i2c0デバイスを有効にするために、独自のデバイスツリーでzynq-7000.dtsiを上書きしました。

マイボードのLinuxシェルで「i2cDetect -l」を使用すると、次の出力を提供するi2cデバイスを表示できます。

root@zed-board:~# i2cdetect -l
i2c-0   i2c             Cadence I2C at e0004000                 I2C adapter

単純なhello.cプログラムで利用可能です。

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

i2c マスターを使ってデータを書き込むと、ピンから出てくるデータを見ることができます。

しかし、このデバイスをスレーブとして設定する方法がわかりません。ケイデンスi2cドライバコードで見ることができます。https://github.com/torvalds/linux/blob/master/drivers/i2c/busses/i2c-cadence.c スレーブモードをサポートします。私はyoctoのカーネル設定メニューを使ってi2cスレーブサポートを有効にし、その設定を自分の画像に追加して有効にしました。

ユーザースペースアプリケーションでデバイスをスレーブモードにし、スレーブイベントのコールバックを登録するために何をすべきかわかりません。

どんな助けでも大変感謝します。

ベストアンサー1

おすすめ記事