-
카테고리
-
세부 분야
임베디드 · IoT
-
해결 여부
미해결
EEPROM 디바이즈 장치 주소 변수 수식 질문입니다.
22.08.14 22:21 작성 조회수 181
0
안녕하세요.
EEPROM 장치주소 변수 계산식에서 우측으로 8비트 시프트 후 다시 좌측으로 1비트 시프트하는 이유가 궁금합니다.
답변을 작성해보세요.
1
ChrisP
지식공유자2022.08.16
안녕하세요!
이 그림을 보시면, 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비트만 시프트 하는 방식으로 해도 문제는 없을 것 같네요!
혹시 이해가 안되시면 답글 부탁드립니다~
fromSKY
질문자2022.08.16
저의 질문을 찰떡 같이 알아들으시고 답변 주셨네요. 처음부터 7비트 시프트 하면 되는 거 아닌가 라는 생각이 들었거든요. 답변 감사합니다.
답변 1