나는 I2C를 통해 ST 마이크로컨트롤러와 통신하기 위해 Kontron 임베디드 컴퓨터를 사용하고 있습니다. 설명된 간단한 read() 및 write() 함수를 사용하여 I2C와 인터페이스하기 위해 개발 어댑터를 사용하고 있습니다.여기.
문제는 슬레이브가 어떤 이유로 바이트를 승인하지 못하면 I2C 버스가 멈추고 마스터는 아무 것도 보내거나 받을 수 없다는 것입니다(프로그램이 닫히고 다시 시작되더라도!). 현재 I2C 버스를 재설정하는 유일한 방법은 재부팅하는 것인데 이는 이상적이지 않습니다. 내가 할 수 있는 일에 대해 제안할 사람이 있나요?
답변1
저는 DesignWare I2C 컨트롤러를 사용하여 UpBoardX86 작업을 해왔습니다. 커널을 바인딩 해제하고 /dev/i2c-5
장치를 다시 바인딩하는 방법을 찾았습니다 .
ls -al /dev/i2c-5
echo -n "808622C1:01" > /sys/bus/platform/drivers/i2c_designware/unbind
ls -al /dev/i2c-5
echo -n "808622C1:01" > /sys/bus/platform/drivers/i2c_designware/bind
ls -al /dev/i2c-5
이름 /dev/i2c-*
과 장치 트리 경로 이름은 사용 중인 하드웨어에 따라 다릅니다. 바인딩 해제 후에는 ls -al 명령이 실패하여 장치가 더 이상 존재하지 않음을 나타냅니다. 다음 기사에서 이 작업을 수행하는 방법을 배웠습니다.https://lwn.net/Articles/143397
이것이 당신이 겪고 있는 문제가 해결될지는 확신할 수 없지만 아마도 재부팅과 관련해 할 수 있는 가장 가까운 방법일 것입니다.