강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

fromSKY님의 프로필 이미지
fromSKY

작성한 질문수

바닥부터 시작하는 STM32 드론 개발의 모든 것

EEPROM 디바이즈 장치 주소 변수 수식 질문입니다.

작성

·

287

0

안녕하세요.
EEPROM 장치주소 변수 계산식에서 우측으로 8비트 시프트 후 다시 좌측으로 1비트 시프트하는 이유가 궁금합니다.
 

답변 1

1

ChrisP님의 프로필 이미지
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비트만 시프트 하는 방식으로 해도 문제는 없을 것 같네요!

 

혹시 이해가 안되시면 답글 부탁드립니다~

fromSKY님의 프로필 이미지
fromSKY
질문자

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

ChrisP님의 프로필 이미지
ChrisP
지식공유자

안녕하세요! 답변이 도움이 되었다니 다행입니다.

그럼 앞으로도 안전하고 즐거운 드론 개발 되시기 바랍니다!

fromSKY님의 프로필 이미지
fromSKY

작성한 질문수

질문하기