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 슬레이브 지원을 활성화한 다음 해당 구성을 내 이미지에 추가하여 활성화되도록 했습니다.

사용자 공간 애플리케이션에서 장치를 슬레이브 모드로 전환하고 슬레이브 이벤트에 대한 콜백을 등록하기 위해 무엇을 해야 하는지 모르겠습니다.

어떤 도움이라도 대단히 감사하겠습니다.

관련 정보