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

센서를 하나 제어하려고 하는데요.
센서 값의 출력(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
번호 제목 글쓴이 날짜 조회 수
1548 [질문]Freeing init memory 이 후 멈추는 문제 2 [3] 박성우 2008-02-27 909
1547 [re] [질문]Freeing init memory 이 후 멈추는 문제 2 박성우 2008-02-28 2229
» i2c 요놈이 저를 괴롭혀요~~ [1] 김승규 2008-02-26 850
1545 I2C read, write 방법 질문입니다. [4] 김유석 2008-02-22 3748
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 588
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 1382
1529 BANK6 SDRAM 초기화 질문 입니다. [4] 김영수 2008-01-31 599

사용자 로그인