Home » Post » STM » STM32F4 » ADXL345 I2C 설정 및 레지스터 살펴보기

ADXL345 I2C 설정 및 레지스터 살펴보기

ADXL345 I2C 설정 및 코드 작성 프로젝트입니다.

  1. STM32F4 LL I2C 설정 및 ADXL345 레지스터 살펴보기
  2. STM32F4 LL I2C 레지스터 및 코드 작성하기

ADXL345 I2C INTRO

오늘은 내용이 좀 복잡할 듯 하다. I2C에 대한 설명을 먼저 해야할 듯한데, 사용하는 센서가 예제로 들어가야 이해가 좀 더 될 듯하다. 그래서 이번에는 ADXL345 가속도 센서의 데이터시트를 예로 들어 설명 먼저 해야할 듯하다.

참, 하드웨어 이해가 부족하거나, 하기 싫은 사람은 HAL드라이버가 제격이다. HAL드라이버를 참고해주길 바란다.

ADXL345 데이터시트 살펴보기

ADXL345 를 칩으로 사서 사용하는 사람보단 아무래도 보드를 사서 쓰는 사람이 많을 것 같다. 내가 개인적으로 사용했던 보드는 이것으로 CS와 ALT ADDRESS가 접지가 되어 있었다. 따라서 주소는 아래에 제공하는 것처럼 0x53의 주소를 가질 것이다.

I2C는 특정 규칙이 있는데, 통상 주소는 7비트를 가지며 끝에 R/~W비트를 붙인다. 이말인 즉, (0x53<<1 | R/~w bit)의 형태를 띈다는 것이다. 앞의 7비트가 주소이고, 그 뒤에 1을 붙이면 읽기 모드, 0을 붙이면 쓰기 모드가 된다는 것이다. 따라서 I2C는 쓰기와 읽기가 동시에 되지 못하고, 쓰거나 읽거나 둘 중 하나의 동작만 가능하다는 것을 알 수 있다.

제어하는 STM32F4보드가 마스터가 되고, 가속도 센서가 Slave인데, 위에서 제시하는 표처럼 제어를 하면 된다. 경우를 나눠서 보자.

데이터를 쓰는 경우

데이터를 쓰는 경우는 아래와 같은 순서를 가진다.

  1. 마스터가 시작 땅땅 신호를 보낸다
  2. (슬레이브 주소<<1 | 0)를 해 쓰기 동작을 할 것을 알린다
  3. 제어할 레지스터 주소를 호출한다.
  4. 데이터를 써준다.
  5. 동작을 멈춘다.

2.의 경우 슬레이브 주소(가속도 센서)가 0x53의 주소를 가지고 있으므로 1만큼 쉬프트 한 것이 될 것이다. 그럼 가속도 센서 파워 컨트롤을 예제로 실습해보자.

파워 컨트롤에 대한 내용이다. 나는 항상 동작하게 하고 싶고, 지금부터 동작을 시켜보고 싶다. 그렇다고 하면 0x2D를 호출하고, 바이너리 값으로 00001000을 넣어주면 될 것이다. 위의 플로우에 맞게 값을 써본다면 아래와 같을 것이다.

  1. 마스터가 시작 신호를 땅땅
  2. 슬레이브 주소 및 쓰기인 0x53<<1의 값 보내기
  3. 0x2D 써주기
  4. 0x08 써주기
  5. 동작을 멈춘다.

근데, 통상 설정을 이런식으로 하지는 않는다. 기본 설정을 읽어서 Measure 값만 바꿔주는 경우가 있을 수도 있다. 그렇게 하려면 파워 설정을 읽은다음 Measure만 켜주는 일을 해야할 수도 있다.

데이터를 읽는 경우

이경우는 조금 애매하다. 먼저 쓰기 비트를 한다음 읽기 비트를 해야하니 말이다. 아래 순서를 적어두면 이렇게 된다.

  1. 마스터가 시작 신호 땅땅
  2. (슬레이브 주소<<1 | 0)으로 쓰기 신호 땅땅
  3. 읽을 레지스터 주소 땅땅
  4. 다시 마스터가 시작 신호 땅땅(??????)
  5. (슬레이브 주소<<1 | 1)으로 읽기 신호 땅땅
  6. 데이터 읽기
  7. NACK 신호 보내기
  8. 멈추기

4.번이 좀 이상해 보일 수 있다. 중요한건 시작 신호 보내기 전에 Stop신호를 보내지 않았다는 것을 눈여겨 볼 필요가 있다. 여튼 순서를 파워 컨트롤 레지스터에 맞게 다시 적으면 아래와 같다.

  1. 마스터가 시작 신호 땅땅
  2. (0x53<<1 | 0)으로 쓰기 신호 땅땅
  3. 0x2D 주소 땅땅
  4. 다시 마스터가 시작 신호 땅땅(??????)
  5. (0x53 <<1 | 1)으로 읽기 신호 땅땅
  6. 데이터 읽기
  7. NACK 신호 보내기
  8. 멈추기

자 여기까지 잘 따라왔다면 CUBEMX로 초기설정을 해보자. Nucleo보드를 사용한다면 HAL드라이버 설정과 같이 내부 핀 설정을 잘 해줘야한다.

CUBEMX 설정하기

/media/uploads/bcostm/nucleo_f411re_2017_11_14_ard_right.png
Nucleo F411

위에서 보는 것처럼 PB8 PB9번핀으로 설정해주는 것 외에 딱히 CUBEMX에서 다룰 것은 없다.

위처럼 설정이 다 되었다면 Project Manager탭에서 Advanced Settings로 간 후 LL드라이버로 모두 변경해준다.

그리고 Project탭에서 툴체인을 설정해주고 Generate Code 버튼을 누르면 끝.

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.