내가 ATmega128로 어떤 IC소자랑 I2C통신을 하고 싶어


근대 데이터시트고 뭐고 다 뒤져봐도 Device Address를 모르겠는거야


보통 EEPROM이랑 통신할 때는 0xA0~8에 해당하는 아이디가 보통인데 이런식으로 명시가 안되어 있었어


그래서 Broadcase하듯이 모든 주소에다가 임으의 데이터값을 보내봤어


void findSlave(void)

{

    uint8_t cnt = 1;

    unsigned char Add,Data;

    >

    Add = 0x00;

    while(1){      

        if(Add == 0x80)      //주소 끝까지 감

        { 

            sprintf(Buffer, "No available address ");

            puts_USART0(Buffer); 

            break;

        }

            

        TWCR = ((1<<TWINT) | (1<<TWSTA) | (1<<TWEN)); // TWI 시작       

        while(!(TWCR & (1<<TWINT))); // TWINT 클리어될 동안  

        sprintf(Buffer, "%d st_TWSR : 0x%x ", cnt, TWSR);         

        puts_USART0(Buffer);   

        if(TWSR == 0x08)        //START 컨디션 확인

        {

            sprintf(Buffer, "Start Condition OK ");         

            puts_USART0(Buffer);      

        }     

        else

        {

            sprintf(Buffer, "Start Condition Fail ");         

            puts_USART0(Buffer);         

        }                

        cnt++;    

        

        TWDR = ((Add<<1)& 0xfe); // 슬레이브 주소         

        TWCR = ((1<<TWINT) | (1<<TWEN));    

        //delay_ms(1);         

        while(!(TWCR & (1<<TWINT))); // TWINT 클리어될 동안  

        if(TWSR == 0x18)                //주소보낸 후 반응 확인

        {

            sprintf(Buffer, "Write OK, Address : 0x%x ",Add);

            puts_USART0(Buffer);

            break;              

        }  

        else{

            sprintf(Buffer, "Write error, TWSR : 0x%x ",TWSR);

            puts_USART0(Buffer);            

        }

        TWDR = Data; // 데이터 송신

        TWCR = ( (1<<TWINT) | (1<< TWEN));

        while(!(TWCR & (1<<TWINT))); // TWINT 클리어될 동안

        TWCR = ((1<<TWINT) | (1<<TWSTO) | (1<<TWEN)); // 정지  

        sprintf(Buffer, "tried ADD : 0x%x ", Add);

        puts_USART0(Buffer);         

        delay_ms(1);

        Add++;            //주소 올려서 반복

    }         

}


이런식으로 말이지,


그랬더니 0x00번부터 0x7F(address는 7비트짜리니까 7F가 마지막이지)까지 싹다 보내봤는데


일단 Start 신호가 문제없이 갔고, 주소가 안맞는지 0x20이라는 I2C통신상태(주소+W 보냈는데 슬레이브로부터 NACK 수신)


신호가 왔어. 그것도 모든 주소에서 말이지. 이런 경우는 어떻게 해야함? 모든 주소가 먹통인데, 이거 하드웨어가 문제인 걸까?