Zephyr OS가 올라간 라즈베리 파이 피코 2에 SparkFun 9DoF IMU I2C로 연결하기 (리눅스 환경) - 파트 2a

이 글에서는 이전 게시글의 Zephyr OS가 올라간 라즈베리 파이 피코 2가 출력하는 I2C 트랜잭션을 로직 분석기로 캡처하는 것에 대하여 설명합니다. 다음은 디지키에서 구매 가능한 평가용 브레드보드또 다른 게시글에서 소개한 SparkFun 8채널 USB 로직 분석기와 함께 실제 구성한 사진입니다.

아래 사진과 같이, 피코 2의 I2C 버스인 PIN6 (I2C0 SDA), PIN7 (I2C0 SCL), 그리고 PIN38 (GND)을 모니터링하기 위해 Qwiic 케이블을 사용하였습니다.

로직 분석기를 I2C 버스 신호인 SCL, SDA와 GND에 연결하였지만, 긴 케이블로 인해 1차 등가 RC 시정수가 증가하고, I2C 버스에 왜곡이 발생할 수 있어서 최적의 연결 방법은 아닙니다. 이제 Zephyr OS 애플리케이션을 빌드하고 피코 2에 플래시 합니다 (이전 게시글 참조).

(venv) $ west build -p always -b rpi_pico2/rp2350a/m33 -S cdc-acm-console -- -DCONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=y -DEXTRA_DTC_OVERLAY_FILE=RP2350.overlay
(venv) $ west flash --runner uf2

ICM-20948의 I2C 슬레이브 주소인 0x69가 정상적으로 감지되었으니, 이제 I2C 인터페이스를 사용하여 ICM-20948의 WHO_AM_I (00h) 레지스터를 다음과 같이 읽어보겠습니다.

uart:~$ i2c read_byte i2c@40090000 0x69 0x00
Output: 0xea

피코 2에서 실행 중인 Zephyr OS 셸을 통해 ICM‑20948의 올바른 값인 0xEA가 수신되었습니다. 로직 분석기의 출력은 아래와 같습니다. 이 로직 분석기 스냅샷은 I2C 읽기 트랜잭션을 명확하게 보여줍니다. Zephyr OS가 실행 중인 피코 2가 마스터 I2C 장치로서 ICM‑20948 센서 내부 ASIC으로부터 주소 0x00에 위치한 레지스터 값을 요청하였으며, 수신된 WHO_AM_I 값은 0xEA입니다.

이제 ASIC 내부의 저전력 모드 설정 (LP_CONFIG, 05h)을 다음과 같이 읽어 보겠습니다.

uart:~$ i2c read_byte i2c@40090000 0x69 0x05
Output: 0x40

ICM-20948 내부의 보조 I2C 마스터는 듀티 사이클 모드로 동작하도록 초기 설정되어 있으며, ODR (Output Date Rate, 출력 데이터 속도)은 I2C_MST_ODR_CONFIG 레지스터에 의해 결정됩니다. 보조 I2C 마스터의 듀티 사이클 모드를 해제하도록 저전력 모드 설정을 변경한 후 다시 읽어 변경 사항이 제대로 적용되었는지 확인합니다.

uart:~$ i2c write_byte i2c@40090000 0x69 0x05 0x00                              
uart:~$ i2c read_byte i2c@40090000 0x69 0x05                                    
Output: 0x0 

아래 사진은 주소 0x05의 레지스터가 0x00으로 업데이트되는 I2C 쓰기 트랜잭션을 로직 분석기로 캡처한 스냅샷입니다.

SparkFun 8채널 USB 로직 분석기는 휴대가 간편하고 사용하기 쉬운 테스트 장비로 디지키에서 구매하실 수 있습니다.

좋은 하루 보내세요!



영문 원본: Zephyr OS on Raspberry Pico 2 I2C to SPARKFUN IMU (Linux) Part 2a