2014-09-22 3 views
3

개발 키트로 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)를 사용할 수있는 간단한 수준에서 :

+0

I2C_SMBUS_BLOCK_MAX이 댓글이 있습니다'/ * 된 SMBus에 지정된대로 표준 * /'당신이 확인하고있는 SAA6752HS가 된 SMBus하지 I2C를 말하는? SMBus와 I2C는 여러면에서 호환되지만 동일한 것은 아닙니다. – nos

+0

예 @nos, 인터넷을 통해 많이 읽었지만 해결책은 아닙니다. 그것은 단지 문제를 확인합니다. 그럼 SAA6752HS와의 거래는 무엇입니까? 그리고 같은 문제가있는 다른 칩 은요? 그렇다면 기본 I2C Linux 드라이버를 사용하여 비 SMBus 표준 I2C 칩과 대화 할 방법이 없습니까? I2C 드라이버가 SMBus로만 제한되는 이유는 무엇입니까? –

+0

@nos SAA6752HS는 SMBus 표준이 아니지만 I2C Linux 드라이버를 사용하는 비 SMBus I2C 인터페이스를 처리하는 방법을 알지 못했습니다. 어떻게 처리 할 수 ​​있습니까? –

답변

5

다음은 리눅스 I2C 인터페이스에 대한 설명서입니다. 같은 뭔가 :

i2c_write(int file, int address, int subaddress, int size, char *data) { 
    char buf[size + 1];    // note: variable length array 
    ioctl(file, I2C_SLAVE, address); // real code would need to check for an error 
    buf[0] = subaddress;    // need to send everything in one call to write 
    memcpy(buf + 1, data, size);  // so copy subaddress and data to a buffer 
    write(file, buf, size + 1); 
} 
+1

감사합니다. 그것은 효과가 있었다. I2C_SLAVE에 대한 직접적인 언급은 나를위한 누락 된 부분이었습니다. 나는 정말로이 주제가 인터넷 주위에 많은 잘못된 정보를 가지고있는 이유를 알지 못한다. 그런 간단한 답이 없어도 많은 포럼 스레드를 찾을 수 있습니다. 나는이 게시물이 다른 사람들을 도울 수 있기를 바랍니다. –

+0

+3000 다른 칩의 동일한 문제에 많은 시간을 낭비했습니다. – gregoiregentil

관련 문제