개발 키트로 Raspberry Pi를 사용하여 I2C 버스를 통해 SAA6752HS 칩 (MPEG-2 인코더)을 구성하려고합니다. 칩의 주소 0xC2에 쓸 때까지는 케이크 조각이었습니다. 이 작업을 위해서는 크기가 189 바이트 인 페이로드를 예상하는 I2C 명령을 사용해야합니다. 그래서 나는 /usr/include/linux/i2c.h에 I2C_SMBUS_BLOCK_MAX로 정의 된 I2C 드라이버 내부에서 32 바이트 제한을 발견했다. 최대 한계 값을 다르게 설정할 수는 없습니다. I2C lib 주변의 모든 것은 i2c_smbus_access 함수로 끝나고 32 바이트 이상을 요구하면 ioctl은 -1을 반환합니다. 지금까지 디버깅하는 방법을 모르겠습니다. 일 페이로드 이상의 데이터 32 바이트를 요구 장치 (SAA6752HS 그러한 예이다)가있는 것을 고려하면, 이러한 제한은 그래서I2C_SMBUS_BLOCK_MAX가 32 바이트로 제한되는 이유는 무엇입니까?
static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command,
int size, union i2c_smbus_data *data)
{
struct i2c_smbus_ioctl_data args;
args.read_write = read_write;
args.command = command;
args.size = size;
args.data = data;
return ioctl(file,I2C_SMBUS,&args);
}
난 이해할 수 없다.
새 드라이버를 다시 작성하지 않고 이러한 제한 사항을 극복 할 수있는 방법이 있습니까?
미리 감사드립니다. https://www.kernel.org/doc/Documentation/i2c/dev-interface
당신이 슬레이브 주소와 명령을 작성하는 write
시스템 호출을 설정 ioctl(I2C_SLAVE)
를 사용할 수있는 간단한 수준에서 :
I2C_SMBUS_BLOCK_MAX이 댓글이 있습니다'/ * 된 SMBus에 지정된대로 표준 * /'당신이 확인하고있는 SAA6752HS가 된 SMBus하지 I2C를 말하는? SMBus와 I2C는 여러면에서 호환되지만 동일한 것은 아닙니다. – nos
예 @nos, 인터넷을 통해 많이 읽었지만 해결책은 아닙니다. 그것은 단지 문제를 확인합니다. 그럼 SAA6752HS와의 거래는 무엇입니까? 그리고 같은 문제가있는 다른 칩 은요? 그렇다면 기본 I2C Linux 드라이버를 사용하여 비 SMBus 표준 I2C 칩과 대화 할 방법이 없습니까? I2C 드라이버가 SMBus로만 제한되는 이유는 무엇입니까? –
@nos SAA6752HS는 SMBus 표준이 아니지만 I2C Linux 드라이버를 사용하는 비 SMBus I2C 인터페이스를 처리하는 방법을 알지 못했습니다. 어떻게 처리 할 수 있습니까? –