Category (Click)
개발보드 덕질하기

[nRF52] Seeed Studio XIAO nRF52840

 차완기 - @1/22/2024, 12:01:00 AM

충동구매

지난 11월, Home Assistant 호스트 장비를 바꾸기 위해 Seeed Studio에서 직구할 일이 있었습니다. 택배비가 아깝다는 생각이 들어 즉흥적으로 몇몇 전자부품을 함께 구매하게 되었습니다. 덕분에 관세를 내게 되었습니다
그 중 하나가 바로 XIAO nRF52840이었습니다.
Seeed Studio - XIAO Series 소개 페이지 중 일부 [링크]
Seeed Studio의 XIAO는 小(작을 소)의 중국어 발음에서 따온 이름이라 합니다. 샤오미 할 때 그 XIAO인것 같은데요, 작지만 강한? 그런게 모토인듯 합니다.
Seeed Studio - XIAO Series 소개 페이지 중 일부 [링크]
최근 nRF USB 동글을 사용하며 언젠가 nRF를 사용해보겠다” 다짐했던게 떠올라 nRF52840 버전 XIAO 개발보드를 구매하게 되었습니다.
Seeed Studio - 24GHz mmWave Sensor for XIAO [링크]
나름의 생태계를 가지고 있는지 폼팩터에 호환 가능한 몇몇 확장 센서 모듈이 있었습니다. 이것도 함께 충동구매 했는데 아직 뜯지 않은 상태입니다. 언젠가 시간이 되면 다뤄볼게요 ㅋㅋ..

XIAO nRF52840 살펴보기

대부분의 Seeed Studio 제품은 이렇게 포장이 되어있죠. 분명히 전자제품인데, 과자를 뜯는듯한 색다른 재미가 느껴지고는 합니다
이게 바로 Seeed Studio의 XIAO nRF52840 개발보드입니다.
USB, 안테나, LED 등을 제외한 모든 부품은 쉴드 안에 모두 들어있어 아주 깔끔해 보였습니다.
후면에는 핀아웃 표시와 디버깅 패드, 배터리 패드, NFC 패드가 보였습니다.
지난번에 포스팅한 nRF52840 Dongle과 함께 비교해 보았습니다. 동글도 꽤 작다고 생각했는데, 이건 더 작네요.
그나저나 쉴드? 쉬이일드?
이걸 어떻게 또 참을까요. 바로 뜯어주었습니다.
Arduino NANO BLE: 야, 너두?
조금 만만하게 봤는데 부품이 아주 빡빡하게 모여있는 모습입니다.
SoC의 동작을 위한 여러 수동소자 이외에도 배터리 충전 회로, 그리고 Sense 버전에만 들어가는 센서 IC 덕분에 더 복잡하게 보이는것 같네요.

테스트

이후 포스팅에서 다루겠지만 nRF Connect SDK를 공부하고 있습니다. VSCode에서 관련 익스텐션을 다운로드한 후 툴체인, SDK를 설치하여 개발환경을 세팅하였습니다.
기본 예제인 blinky 예제를 가져와 내장 LED를 켜보기로 했습니다.
예제를 가져온 후 build configuration에서 보드 타입을 “xiao_ble”로 설정했습니다.
#include <zephyr/drivers/gpio.h> #include <zephyr/kernel.h> #define LED0_NODE DT_ALIAS(led0) #define LED1_NODE DT_ALIAS(led1) #define LED2_NODE DT_ALIAS(led2) static const struct gpio_dt_spec led_0 = GPIO_DT_SPEC_GET(LED0_NODE, gpios); static const struct gpio_dt_spec led_1 = GPIO_DT_SPEC_GET(LED1_NODE, gpios); static const struct gpio_dt_spec led_2 = GPIO_DT_SPEC_GET(LED2_NODE, gpios); int main(void) { gpio_pin_configure_dt(&led_0, GPIO_OUTPUT_ACTIVE); gpio_pin_configure_dt(&led_1, GPIO_OUTPUT_ACTIVE); gpio_pin_configure_dt(&led_2, GPIO_OUTPUT_ACTIVE); while (1) { gpio_pin_set_dt(&led_0, 1); gpio_pin_set_dt(&led_1, 0); gpio_pin_set_dt(&led_2, 0); k_msleep(1000); gpio_pin_set_dt(&led_0, 0); gpio_pin_set_dt(&led_1, 1); gpio_pin_set_dt(&led_2, 0); k_msleep(1000); gpio_pin_set_dt(&led_0, 0); gpio_pin_set_dt(&led_1, 0); gpio_pin_set_dt(&led_2, 1); k_msleep(1000); } return 0; }
C
복사
아직 SDK를 모르는 상황이지만 눈치껏(?) 수정해 보았습니다.
여기까지 하고 업로드 버튼을 클릭하면 짜자잔~하고 될 줄 알았지만 호락호락하지 않았습니다.
J-Link와 같은 디버거를 사용해야 되는것 같았습니다.
대신 부트로더를 통해 업로드가 가능했는데요, 개발보드의 리셋 버튼을 더블클릭해 부트로더에 진입한 후 PC에서 인식된 저장장치에 build/zephyr/zephyr.uf2 파일을 집어넣으면 펌웨어가 올라갔습니다.
LED가 잘 작동하네요!
펌웨어 업로드의 불편함으로 인해 nRF Connect SDK를 공부하는 당분간은 공식 개발보드를 사용하게 될 것 같습니다. 요건 구석에 모셔뒀다가 언젠가 nRF SoC에 친근해지게 되면 다시 꺼내보도록 하겠습니다 ㅎ