0. MPU6050 I2C 주소
MPU6050의 I2C 주소는 7비트로 이루어져 있으며 b110100X이다.
X는 AD0핀의 전압 레벨에 따라 결정된다.
X | Address | Hex(16진수) |
Low | b1101000 | 0x68 |
High | b1101001 | 0x69 |
여러개의 센서를 사용하면 중요하겠지만 이번 프로젝트에서는 한 개만 사용했고 AD0핀을 GND에 연결했으므로 MPU6050의 주소는 0x68이 된다.
hal로 짜여진 MPU6050 라이브러리를 찾아보면 보통 MPU6050 의 주소를 0x68 << 1 또는 0xD0 (0x 68 << 1이나 0xD0나 같은 의미이다)으로 선언되어 있는데 I2C 프로토콜을 공부해 보면 알지만 0x68 << 1 으로 선언하면 데이터를 읽기만 하는 거 아님..? 쓸 때는 어떡함? 이라는 의문이 들었다.
master가 slave에 read 할 때는 11010001인 0xD1을 사용하는 게 맞고
master slave에 write 할 때는 11010000인 0xD0을 사용하는 게 맞다.
하지만 전지전능한 hal 라이브러리는 7bit인 slave를 8bit 형식으로만 보내주면 r/w 모드를 알잘딱 해주기 때문에 그냥 0x68 << 1인 0xD0를 사용하면 된다.
실제로 HAL_I2C_Mem_Read함수 선언부를 가면 저렇게 설명되어 있음 ㅇㅇ
'Balancing robot > FW&SW' 카테고리의 다른 글
MPU6050 레지스터 (0) | 2024.12.31 |
---|