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

안녕하세요.

유저 어플단에서 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
번호 제목 글쓴이 날짜 조회 수
1548 [질문]Freeing init memory 이 후 멈추는 문제 2 [3] 박성우 2008-02-27 909
1547 [re] [질문]Freeing init memory 이 후 멈추는 문제 2 박성우 2008-02-28 2229
1546 i2c 요놈이 저를 괴롭혀요~~ [1] 김승규 2008-02-26 850
» I2C read, write 방법 질문입니다. [4] 김유석 2008-02-22 3745
1544 [완료]I2C address 관련 질문입니다. [2] 김유석 2008-02-22 819
1543 [완료] USB 무선랜카드 관련 질문입니다. [6] 신재곤 2008-02-21 807
1542 [완료]uboot에서 2cycle column Address의 NAND인식 [3] 허남수 2008-02-21 723
1541 [해결] lowlevel_init.S(구 memsetup.s)에 질문입니다. [2] 조현철 2008-02-20 884
1540 이솝 커널 2.6.13에서 죽는 현상 [4] 김정훈 2008-02-19 900
1539 [완료] aesop memory map 질문입니다. [3] 조현철 2008-02-19 587
1538 [완료]I2C test app 컴파일 에러 [5] 김유석 2008-02-16 874
1537 [질문]Freeing init memory ~ 이후에 멈추는 현상... [8] 박성우 2008-02-13 1319
1536 i2c 관련 질문 드립니다. [3] 김승규 2008-02-04 1463
1535 2440에서 영상켑쳐 [1] 이학남 2008-02-04 790
1534 CS8900 베이스 어드레스 설정 질문 입니다. [3] 김영수 2008-02-03 1148
1533 [완료] DirectFB에 tslib라이브러리로 h3600터치를 사용하려고합니다... [5] 김창연 2008-02-02 732
1532 [완료][log 추가]NFS Kernel panic: VFS: Unable to moun... [8] 조현철 2008-02-01 1091
1531 Interrup 질문.... [4] 이학남 2008-02-01 670
1530 [완료] #if 0 #endif 구문의 의미에 대해서.. [7] 이세종 2008-01-31 1348
1529 BANK6 SDRAM 초기화 질문 입니다. [4] 김영수 2008-01-31 599

사용자 로그인