nRF52

nRF52840 TWI I2C 설정 가이드

임베디드 친구 2024. 8. 31. 14:54
반응형

TWI(Two-Wire Interface)는 마이크로컨트롤러와 주변 장치 간의 데이터 통신을 위해 주로 사용되는 통신 프로토콜입니다. TWI는 I2C(Inter-Integrated Circuit)와 거의 동일한 특징을 가지며, 기능적으로도 유사합니다. 이 프로토콜은 여러 장치 간의 효율적이고 간단한 데이터 전송 방법을 제공하며, 주로 센서, 메모리 장치, 확장 모듈 등의 통신에 사용됩니다.

TWI(I2C)는 전송 속도와 통신 규격에 따라 다양한 장치 간의 통신을 지원하며, 하드웨어 구성 또한 비교적 간단합니다. 표준화된 프로토콜을 사용하기 때문에, 여러 제조사의 장치들 간에도 상호 운용성이 높아, 이를 익혀두는 것은 유용할 것입니다.

1. TWI 하드웨어 구조

TWI는 단 두 개의 신호선을 사용하여 통신을 수행합니다.

  • SDA (Serial Data Line): 데이터가 전송되는 신호선입니다.
  • SCL (Serial Clock Line): 마스터 장치에서 생성되는 클럭 신호로, 데이터 전송의 동기화를 담당합니다.

2. TWI 동작 원리

  • TWI 통신은 하나의 마스터와 여러 개의 슬레이브 장치로 구성됩니다. 마스터는 통신을 주도하고 명령을 내리며, 슬레이브는 마스터의 명령에 따라 응답하거나 데이터를 제공합니다.
  • TWI는 스타 토폴로지를 사용하여 여러 슬레이브가 하나의 마스터와 통신할 수 있습니다.
  • 각 슬레이브 장치는 고유한 7비트 또는 10비트 주소를 가지며, 마스터는 이 주소를 이용해 특정 슬레이브를 선택하여 통신합니다.
  • 데이터는 SDA 신호선을 통해 직렬로 전송되며, SCL 신호를 통해 클럭이 공급됩니다.
  • 통신의 시작과 종료는 Start bit와 Stop bit를 사용하여 표시됩니다.
  • 마스터는 통신 중 ACK(acknowledge) 비트를 통해 슬레이브의 응답을 확인합니다.

3. TWI 통신 흐름

  • Start Condition: 마스터가 SDA 라인을 낮게, SCL 라인을 높게 유지하여 통신을 시작합니다.
  • 슬레이브 주소 전송: 마스터는 슬레이브의 주소를 전송합니다. 슬레이브는 자신과 일치하는 주소가 오면 응답합니다.
  • 데이터 전송/수신: 마스터와 슬레이브 간의 데이터가 SDA 라인을 통해 전송됩니다. 이때, SCL 라인은 데이터 전송 타이밍을 동기화합니다.
  • Stop Condition: 통신이 끝나면 마스터가 SDA 라인을 높이고 SCL 라인을 낮게 유지하여 통신을 종료합니다.

4. TWI 설정 및 코드 구성

4.1. SDK Configuration (sdk_config.h)

아래 설정을 통해 nRF SDK에서 TWI 모듈을 활성화할 수 있습니다.

#define NRFX_TWIM_ENABLED 1
#define NRFX_TWIM0_ENABLED 1
#define NRFX_TWIS1_ENABLED 1
#define NRFX_TWI_ENABLED 1
#define NRFX_TWI0_ENABLED 1
#define NRFX_TWI1_ENABLED 1
#define TWIS_ENABLED 1
#define TWIS1_ENABLED 1
#define TWI_ENABLED 1
#define TWI0_ENABLED 1

4.2. nRF Driver

nRF 드라이버 파일의 위치는 다음과 같습니다:

./modules/nrfx/drivers/src/nrfx_twi.c
./modules/nrfx/drivers/src/nrfx_twi_twim.c
./modules/nrfx/drivers/src/nrfx_twim.c
./modules/nrfx/drivers/src/nrfx_twis.c
./integration/nrfx/legacy/nrf_drv_twi.c

4.3. nRF Library

TWI 관리 라이브러리 파일의 위치는 다음과 같습니다:

./components/libraries/twi_mngr/nrf_twi_mngr.c

5. 주의 사항

nRF52840 마이크로컨트롤러에서 TWISPIBase Address를 공유합니다. 이는 동일한 인스턴스 번호를 두 장치에서 동시에 사용할 수 없다는 의미입니다.

TWI는 0번과 1번 두 개의 인스턴스를 사용할 수 있으며, SPI는 0번, 1번, 2번 세 개의 인스턴스를 사용할 수 있습니다. 예를 들어, 0번 인스턴스가 TWI에 사용되었다면, 0번 인스턴스로 SPI 드라이버를 등록하면 안 됩니다. 이는 충돌을 일으킬 수 있기 때문입니다. 따라서 드라이버를 작성할 때, 인스턴스 번호와 사용 중인 주변 장치를 잘 관리해야 합니다.

6. 결론

이상으로 TWI 설정에 대해 알아보았습니다. TWI의 기본 개념과 설정 방법을 이해하면 다양한 주변 장치와의 통신을 보다 쉽게 구현할 수 있습니다. 다음 포스팅에서는 TWI Master Driver와 Slave Driver에 대해 순서대로 설명할 예정입니다. 각 드라이버를 통해 실제로 TWI 통신을 구현하는 방법과 예제 코드 등을 다룰 예정이니, 많은 관심 부탁드립니다.

반응형