기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.

유저 어플단에서 I2C 디바이스를 오픈했습니다.

ioctl() 을 사용하여 I2C 어드레스를 지정했고 문제 없이 지정되었습니다.

이제 I2C 디바이스의 레지스터를 읽고 쓰고 하고 싶은데 open()을 했으니까 read(), write() 시스템 콜을 그대로 사용하면 될 거란 생각을 하고 있습니다.

예를 들어 레지스터 0x00, 0x10을 읽거나 쓸때 read(), write() 함수를 사용하려면 어떻게 레지스터의 어드레스를 지정해 줄 수 있을까요? 혹시 lseek() 를 사용해야 하나요?

우선은 무한루프 돌리면서 read(fd, buf, 1) 이런식으로 읽어 보았는데 어떤 레지스터의 정보인지는 알 수 없지만 계속 읽어 오긴 합니다. ㅎㅎㅎㅎ

도움글 부탁 드립니다.

고현철

2008.02.22 20:21:38
*.70.26.43

ioctl로 쓸겁니다....거의

드라이버 소스를 봐야하겠습니다만, 제 기억으로는 주로 ioctl만 사용했던것 같네요.

문철민

2008.02.22 22:29:36
*.234.26.181

eeprom의경우 ioctl로 read, write를 하고요, 인자에서 주소를 지정해줍니다. /linux/driver/i2c/i2c-eeprom.c를 보시면 쉽게 알수있을듯하네요

이종창

2008.02.25 23:15:39
*.136.171.200

드라이버 소스 및 해당 ic의 datasheet를 꼭 확인해야 합니다.
1. 해당 드라이버를 확인하시어,
static struct file_operations xxx_fops=
{
write : xxx_write,
read : xxx_read,
ioctl : xxx_ioctl,
};로 되어 있는 부분의 xxx_해당함수를 확인하세요.
그리고, i2c가 규격이므로 같은 방식으로 read/write 할수 있지만

2. 해당 chip의 datasheet를 보시면 read/write시 어떻게 해야하는지 나와있을 것입니다.
addresss / register 가 1byte 혹은 2byte일수 있으니 꼭 확인해야 합니다.

강효민

2008.02.26 20:54:50
*.5.254.223

제가 하는 방식인데 쩝..
커널에 Documentation/i2c/smbus-protocol 문서를 참조로 작업하시면 편하실겁니다.

- i2c open
sprintf(filename,"/dev/i2c-%d",adapter_nr);
if ((file = open(filename,O_RDWR)) < 0)
{
printf("nFile Open Error");
exit(1);
}

if (ioctl(file,I2C_SLAVE, addr) < 0) {
printf("nError : Slave Address...");
exit(1);
}
open & address 지정뒤
읽고자하는 레지스터를 아래와 같은 방식으로 읽으시면 됩니다.

t_reg = 0x83; //register address
t_value = 0x00; //register value

i2c_smbus_write_byte( file, t_reg );
t_value = i2c_smbus_read_byte( file );

printf("TVP5150 Rom Ver = 0x%xrn", t_value);

ic마다 address / register 가 틀리니 Documentation/i2c/smbus-protocol 의 문서를 참고로 하셔서 쓰시면 됩니다.
List of Articles
번호 제목 글쓴이 날짜sort 조회 수

u-boot 컴파일 에러 입니다.==>[완료] [2]

SMDK2440에 호환되는 PCMCIA Card질문! [2]

JTAG관련 질문입니다...[완료] [2]

사운드 sample rate 관련 질문입니다. [1]

리눅스 커널 쓰레드 어플리케이션 설계관련자료 구합니다 ... [완료... [4]

매크로 선언에 관한 질문입니다 [완료] [2]

2440에 16C550 붙여보신분.... [5]

jffs2 마운트시 용량이 이미 사용중 <= 완료 [3]

혹시 Video 스위칭 IC쪽 아시는분 있나요... [1]

[긴급]I2C Interface [9]

TFT-LCD 프레임버퍼 드라이버를 수정할때 [3]

saa7111 을 이용해..[완료] [5]

GUI toolkit 선택 고민중...[완료] [7]

임베디드리눅스 GUI 를 선택해야 하는데 ... [2]

SDL 관련 질문 드립니다. [6]

추가 usb host 질문드립니다. ^^ => [완료] [8]

H/W RESET에 관한 질문입니다. ===> [완료] [3]

u-boot에서의 usb ohci 구현에 대해서 질문드립니다. ==> [완료] [2]

SDL Cross compile 질문 [3]

[완료] SDL Crosscompile 관련 질문

사용자 로그인