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

센서를 하나 제어하려고 하는데요.
센서 값의 출력(low, high byte)이 나오질 않네요. ack 신호는 나오는데..ㅡ,.ㅡ
요센서는 다음과 같은 프로토콜로 동작합니다.

start(1 bit) + slave address(0x39 - 7bit) + wr(1 bit) + ack(1 bit) + command(0xD6) + ack(1 bit) + repeat start(1 bit) + slave address(0x39 - 7bit) + rd(1 bit) + ack(1 bit) + data byte1(low byte) + ack(1 bit) + data byte2(high byte) + ack(1 bit) + stop(1 bit)

오실로스코프로 출력파형을 측정해봐도 이상하게도 다른 신호들은 다 나오는데 data byte1과 data byte2만 출력이 안나오네요.
혹시 제 코드가 잘못 된건 아닌지요..ㅠㅠ

오실로 스코프 파형도 첨부합니다.


int main(int argc, char **argv)
{
        char filename[20];
        int file, i;

        unsigned char slave_addr = 0x72>>1;        //setting slave address
        unsigned char command[1];
        unsigned char receive[2];

        struct i2c_rdwr_ioctl_data         i2c_rwctl;
        struct i2c_msg                i2c_msgs[2];
        __s32 res;


        sprintf(filename, "/dev/i2c-0");

        //port open
        if( (file = open(filename, O_RDWR) ) < 0 )
        {
                printf("File Open Errorn");
                exit(1);
        }
        
        else
                printf("File Open Successn");

        //setting i2c device driver address
        if( ioctl(file, I2C_SLAVE, slave_addr) < 0 )
        {
                printf("Error : Slave Address...n");
                exit(1);
        }
        else
                printf("Success : Slave Address...n");

        printf("nSlave address : %xn", slave_addr);

        i = 0;        
        
        while(1)
        {        
                command[0] = 0xD6;

                //make read 1st packet
                i2c_msgs[0].flags = 0;
                i2c_msgs[0].addr = slave_addr;
                i2c_msgs[0].len = 1;
                i2c_msgs[0].buf = &command[0];

                //make read 2nd packet
                i2c_msgs[1].flags = I2C_M_RD;
                i2c_msgs[1].addr = slave_addr;
                i2c_msgs[1].len = 2;
                i2c_msgs[1].buf = &receive[0];

                i2c_rwctl.msgs = &i2c_msgs[0];
                i2c_rwctl.nmsgs = 2;

                res = ioctl(file, I2C_RDWR, &i2c_rwctl);
                
                printf("this is no start versionn");
                printf("%d is complete. res : %dn", i, res);

                printf("---------------------------n");
                printf("%dth read low byte : %Xn", i, receive[0]);
                printf("%dth read high byte : %Xn", i, receive[1]);
                printf("---------------------------n");

                sleep(1);
                i++;
        }

}

김승규

2008.02.26 20:30:42
*.247.144.149

바쁘시겠지만 혹시 시간나시면 잠깐만 봐주시면 안될까요? ^^;;;
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
6368 Apple TV 온보드 메모리 변경 가능할까요? [1] 당그니 2011-01-20 94770
6367 android pwm backlight 밝기 제어 [4] 김태영 2011-07-28 55502
6366 com.google.android.maps.jar는 어디서 얻는 것인가요??? [2] 천동이 2014-09-02 52372
6365 USB bluetooth dongle on jellybean [4] 신현호 2014-02-21 50350
6364 우분투 리눅스 ip 변경 도중에 "No such process" [5] 이세종 2009-04-01 46566
6363 OpenOCD 0.2.0 [1] 김광준 2009-10-24 45321
6362 [질문]memset, mmap, memcpy에 대해서 질문 있습니다. [5] 이태간 2007-05-22 45282
6361 libpcap 설치 [1] Apostasy 2011-04-12 44459
6360 램디스크 파일 시스템 만들기 [4] sinwho 2015-08-19 44078
6359 USB 포팅관련 질문드립니다. [1] 김승한 2010-01-07 33344
6358 android에 libusb porting 해보신 분?? [2] 꿈의사람 2014-02-13 29617
6357 오드로이드 배터리 패치 문의 [1] 이종문 2010-07-01 29094
6356 ODROID-T 2.2 셧다운 후 부팅이 안됩니다. [2] shkim 2010-10-02 26924
6355 오드로이드 디버깅이 안되네요... [2] 현쓰 2010-02-01 26632
6354 [질문]wince 이미지 다운로드시 에러 [3] 이태간 2008-04-06 26266
6353 Andorid ALSA에 관해서...2 [1] 꺼북이 2011-05-18 24830
6352 slide event에 따른 landscape & portrait mode 전환 [1] 나영찬 2010-03-25 24749
6351 wm1811 드라이버를 찾아요 [9] 김민욱 2016-11-01 18800
6350 이더넷 핀에서 값을 읽어 오고 싶은데요... [2] rubio 2013-07-09 13051
6349 usb host api 가 리눅스단에서도 사용가능한가요? [1] biokk 2014-02-07 11392

사용자 로그인