인프런 커뮤니티 질문&답변
EEPROM 디바이즈 장치 주소 변수 수식 질문입니다.
작성
·
287
답변 1
1
ChrisP
지식공유자
안녕하세요!

이 그림을 보시면, Device Address의 맨 하위 비트(bit0)는 I2C의 읽기/쓰기를 표현하는 비트이고, 페이지 주소의 상위 두 비트는 bit1과 bit2에 쓰여져야 합니다.
만약 우측으로 8비트 시프트 후에 좌로 1비트 시프트를 하지 않는다면 그 값이 위의 P1과 P0에 쓰여지는게 아니라 P0와 R/W 에 쓰여지겠죠.
(만약 devAddress = (page*16)>>8 | 0xA0; 이렇게 작성한다면요)
그럼 엉뚱한 주소에 접근하게 되므로 좌로 1비트를 시프트 하는 겁니다.
참고로 강의에서는
devAddress = ((page*16)>>8)<<1 | 0xA0;
이렇게 작성했는데, HAL드라이버를 쓴다면
devAddress = (page*16)>>7 | 0xA0;
이렇게 그냥 우로 7비트만 시프트 하는 방식으로 해도 문제는 없을 것 같네요!
혹시 이해가 안되시면 답글 부탁드립니다~





저의 질문을 찰떡 같이 알아들으시고 답변 주셨네요. 처음부터 7비트 시프트 하면 되는 거 아닌가 라는 생각이 들었거든요. 답변 감사합니다.