I2C 메모리 접근 vs 레지스터 접근

I2C 프로토콜은 슬레이브 장치에서 레지스터 내용을 읽기 전에 레지스터 주소를 먼저 써야 합니다. 주소를 쓰지 않고 레지스터 내용을 읽는 것은 I2C 프로토콜을 준수하지 않는 것입니다.

슬레이브 장치에서 특정 레지스터의 내용을 읽으려면 읽기 작업을 수행하기 전에 읽으려는 레지스터 주소로 슬레이브 장치에 쓰기 작업을 수행해야 합니다.

I2C 프로토콜에서 슬레이브 장치의 레지스터 내용을 읽는 단계는 다음과 같습니다.

START -> 슬레이브 7비트 주소 -> R/W=0 (쓰기 작업) -> ACK -> 레지스터 주소 (1 바이트) -> ACK -> Sr (재시작) -> 슬레이브 7비트 주소 -> R/W=1 (읽기 작업) -> ACK -> 레지스터 데이터 -> NACK (슬레이브에서 더 이상 보낼 데이터가 없기 때문에) -> STOP.

Texas Instruments의 “Understanding the I2C Bus” 문서를 참조하여 I2C 프로토콜에 대해 자세히 알아보세요: Understanding the I2C Bus

readReg 함수는 슬레이브에서 2바이트를 읽도록 설계되었습니다. 1바이트만 읽으려면 크기가 1바이트로 변경되었는지 확인해야 합니다.

Reg0 레지스터는 일반적으로 EN/RESET 레지스터입니다. Reg0을 읽기 전에 수행된 작업, 예를 들어 이 레지스터에 데이터를 썼는지 여부를 확인해야 합니다.

다른 레지스터, 예를 들어 Reg4의 내용에 액세스하여 해당 레지스터에 쓴 내용을 읽을 수 있는지 확인해야 합니다.

RA6M4에서 MCP9808 온도 센서의 원시 온도 바이트를 읽기 위해 주소가 0x05인 레지스터에 액세스하는 예: 먼저 쓰기를 수행하고, 슬레이브 0x05에 읽으려는 레지스터의 주소를 씁니다. 그런 다음 약 100ms(타임아웃을 확인하는 while 루프가 있기 때문에) 후에 이 레지스터에서 내용을 읽는 프로세스를 수행합니다.

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다