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

안녕하세요.

유저 어플단에서 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

노트북에서 VirtualBox 네트워크 셋팅 질문입니다 (스크린샷 포함) file [3]

삼성 PV310 관련 MIPI CSI 4 Lane 규격 영상캡춰 문의 .... [7]

메모리 어떻게 빼나요?[완료] [2]

[질문]SDL에서 터치 화면 맞지않는 문제 <= 완료 [5]

안드로이드 PDK 포함 Full Source 받는 방법을 자세히 알고 싶읍... [5]

Aesop S3C6410 에 Android 설치 관련 질문이 있습니다. [3]

6410에 관련 몇가지 질문입니다. [5]

[완료] 완전 초짜의 질문 GPIO는 어디서 뽑을지.. [3]

안드로이드 버전 확인 방법 문의 [1]

Origenboard (S5PV310) u-boot & kernel 다운로드 [1]

  • gudrl
  • 2013-04-17
  • 조회 수 2828

git 서버 구축 하여 IP로 접근 할수 있는 방법? [3]

  • 작두
  • 2010-03-26
  • 조회 수 2823

[완료] LX800 여유분이 남았나요? [2]

USB bluetooth 동글을 Android에서 인식하게 하려면? [2]

RTL8100을 두개 붙이려면? [2]

[완료] Linux CD에 굽는 방법좀 알려주세요.. [6]

busybox compile(Toolchain-aesop6410-090320) [6]

wpa_supplicant에 있어서 문의드립니다. [2]

gtk+-2.12.12 on DirectFB-1.4.9에서 gtk-demo 에러

nand erase error입니다 도움 부탁합니다. [2]

smpeg질문 [1]

사용자 로그인