私は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スレーブサポートを有効にし、その設定を自分の画像に追加して有効にしました。
ユーザースペースアプリケーションでデバイスをスレーブモードにし、スレーブイベントのコールバックを登録するために何をすべきかわかりません。
どんな助けでも大変感謝します。