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

안녕하세요.

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

flash를 양산 image로 만들 때... [3]

멀티코어 환경에서 리눅스 IRQ 프로세싱 관련 질문드립니다. [2]

  • Supsupi
  • 2015-03-06
  • 조회 수 241

reloc_library[1453]: 1210 unknown reloc type 19 이 나오면... [1]

  • ice179
  • 2015-03-05
  • 조회 수 432

CodeSourcery에 보면arm-none-linux-gnueabi 라이브러리가 세폴더로 ...

  • biokk
  • 2015-03-05
  • 조회 수 206

sleep 방지 [6]

  • jackson
  • 2015-02-27
  • 조회 수 410

wifi module 문의 [3]

  • gudrl
  • 2015-02-25
  • 조회 수 356

리눅스 드라이버 제작 방법 문의 [2]

ffmpeg 하드웨어 가속기 사용 방법 [3]

rtsp 스트리밍 미디어 재생 관련 질문 드립니다. [2]

Nand Flash 변경 질문드려요. [4]

  • FOLIMM
  • 2015-02-11
  • 조회 수 406

안드로이드 i2c 관한 질문 [1]

카메라 프레임데이터를 안드로이드 어플로 받아올수 있는 방법이 있을... [3]

  • pedor11
  • 2015-01-30
  • 조회 수 589

check_usb_vfs("/dev/bus/usb") 에러 [1]

차량용에서 구글 GMS를 쓰려고 구글에 연락해봤더니... [6]

wifi usb 동글관련 질문 [2]

루트파일시스템에 gcc 기능을 넣어보신분 계신가요? [1]

u-boot 올리는 주소는 어떻게 알수 있나요?

  • sinwho
  • 2014-12-21
  • 조회 수 398

android 에서 mknod 명령을 지원안하면 노드파일은 어떻게 생성시키... [1]

  • ice179
  • 2014-12-17
  • 조회 수 500

부트로더가 날라갔습니다... [1]

nexell 칩을 한번 사용해볼까하는데요... [5]

사용자 로그인