YOGYUI

nRF52840 USB Dongle - RCP 펌웨어 올리기 (for OTBR) 본문

Hardware/Home Automation

nRF52840 USB Dongle - RCP 펌웨어 올리기 (for OTBR)

요겨 2023. 1. 15. 13:06
반응형

요즘 퇴근 후 자기계발 시간 대부분을 "매터(Matter)를 이용한 홈네트워크 구축" 개발에 할애하고 있다 (C++ 개발 지식이 조금만 있으면 습득하기 굉장히 쉬운 프로토콜인듯?)

매터 기반 홈네트워크 플랫폼 구축할 때 OpenThread Border Router(OTBR)을 라우터로 활용하는 케이스도 많길래 조사해보니 라즈베리파이를 OTBR로 만들 수도 있다고 해서 한 번 따라해봤다


라즈베리파이는 OTBR 구동에 필요한 IEEE 802.15.4 무선 네트워크에 접근할 수 있는 RF(Radio Frequency) 통신 모듈이 없기 때문에 별도의 장치를 장착해줘야 한다 (Zigbee가 대표적인 IEEE 802.15.4를 활용한 통신 방식)

※ Matter를 개발한 CSA(Connectivity Standards Alliance)의 전신이 바로 Zigbee Alliance!

 

여러 반도체 제조사들이 Zigbee 통신 관련 IC를 판매하고 있는데, 그 중 대중적으로 널리 활용되고 있는 건 Nordic Semiconductor (이름에서 알 수 있듯이 노르웨이 회사)의 nRF52 제품군인듯하다 (SDK, Document 등 초심자를 위한 개발 자료를 성실히 제공하는 멋진 회사!)

 

대중적으로 많이 알려졌다는건 규모의 경제가 발동되기 때문에 일반인이 상당히 저렴하게 제품을 구입할 수 있다는 의미! 고민하지 말고 Nordic의 nRF 제품군 중 알맞은 것을 구매해서 사용해보자

1. nRF52840 USB Dongle 구입

nRF52840 USB Dongle로 알려진 WRL-16306 제품은 개당 가격이 2만원대 초반 수준으로 꽤 저렴한 가격에 구입할 수 있다 (국내 재고도 꽤 많은 편으로, 쇼핑몰을 잘 고르면 1~2일 내에 배송받을 수 있다)

USB 동글을 OTBR에 사용하기 위해서는 nRF IC에 OpenThread architecture를 이식해줘야 하는데, nRF52840 모듈에는 Radio Co-Processor (RCP)라 불리는 아키텍쳐를 펌웨어로 구워주면 된다고 한다

(nRF 모듈과 호스트 PC를 UART/SPI/USB 등 시리얼 통신을 통해 연결하여 호스트 PC를 OpenThread에 접근할 수 있게 만들어준다고 생각하면 된다 - 블루투스 USB 동글과 유사한 개념)

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_thread_architectures.html#thread-architectures-designs-cp-rcp

 

펌웨어 빌드를 위한 과정은 Nordic의 개발자 웹페이지의 가이드를 따라하면 된다

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_thread_tools.html#configuring-a-radio-co-processor

 

Thread tools — nRF Connect SDK 2.2.99 documentation

Open the http://localhost:8080/ address in a web browser and choose Form from the menu. Note If you are using a Raspberry Pi without a screen, but you have a different device in the same network, you can start a web browser on that device and use the addre

developer.nordicsemi.com

2. nRF Connect SDK 설치

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/index.html

 

Welcome to the nRF Connect SDK! — nRF Connect SDK 2.2.99 documentation

© Copyright 2019-2023, Nordic Semiconductor. Last updated on Jan 13, 2023.

developer.nordicsemi.com

 

펌웨어 빌드를 위해 Nordic에서 제공하는 공식 개발 키트인 nRF Connect SDK를 설치해줘야 한다

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/gs_recommended_versions.html

SDK를 구동할 수 있는 운영체제(OS)는 꽤나 한정적이다

Tier1인 OS에서 운영하는 것을 권장하고 있는데, Windows 10 x64, Ubuntu 20.04 x64, macOS 11 x64(Big Sur)가 권장된다

개인 개발 환경인 랩탑에 설치해서 사용중인 Ubuntu 22.04.1 LTS 은 Tier3라 권장되지는 않지만, 어떻게든 되겠지 싶어서 (???) 한번 설치해봤다 

 

Automatic / Manually 설치 가이드가 따로 존재하는데, 나는 필요한 툴들을 하나하나 수동으로 설치해보기로 했다

2.1. Core Tool 설치

Kitware APT를 설치해준다

$ wget https://apt.kitware.com/kitware-archive.sh
$ sudo bash kitware-archive.sh

그리고 git, cmake, python, gcc 등 필요한 패키지들을 apt로 설치해준다

$ sudo apt install --no-install-recommends git cmake ninja-build gperf \
  ccache dfu-util device-tree-compiler wget \
  python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
  make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/gs_recommended_versions.html#req-tools-table

cmake, python, dtc가 최소 요구버전 이상으로 설치되었는지 확인 (--version)

2.2. Zephyr’s west 설치

Zephyr meto-tool (python 패키지)인 west를 pip를 사용해서 설치해준다 (이 후 모든 과정은 west cli를 사용하게 된다)

※ Zephyr(제퍼): best-in-class RTOS for connected resource-constrained devices, Linux 재단이 발표한 임베디드 IoT 디바이스용 RTOS (Real-Time Operation System)

$ pip3 install --user west
$ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
$ source ~/.bashrc

설치 후 터미널에서 west를 호출해서 다음과 같은 help문이 출력되면 정상적으로 설치된 것이다

2.3. nRF Connect SDK 설치

공식 가이드대로 ncs 디렉터리를 만들어준다 (디렉터리명은 사실 뭐 입맛대로 아무렇게나 해도 될듯?)

$ mkdir ncs
$ cd ncs

깃허브 저장소 주소 https://github.com/nrfconnect/sdk-nrf 를 특정 태그/커밋을 지정해서 클론해올 수 있는데, 잘 모르겠다 싶으면 가장 최신 커밋을 다음과 같이 west를 사용해서 체크아웃한다

(어차피 SDK로 개발을 할 게 아니라 단순히 USB Dongle용 펌웨어를 빌드할 거라 최신 버전이 좋다)

$ west init -m https://github.com/nrfconnect/sdk-nrf --mr main

그리고 west cli로 저장소를 클론해오자

$ west update

2023년 1월 15일 기준 commit id 3896b695d08f8a162c3a65909af31caf70da42b1 에서 submodule까지 모두 클론하면 약 2.9GB 용량이 필요하니 참고

CMake 작업 시 Zephyr CMake 패키지도 알아서 호출할 수 있도록 export해주자

$ west zephyr-export

python 패키지도 다음 명령어 3개로 설치 (이런건 붓스트랩 스크립트로 좀 만들어주지 ㅠ)

이것저것 꽤 많이 설치한다..

$ pip3 install --user -r zephyr/scripts/requirements.txt
$ pip3 install --user -r nrf/scripts/requirements.txt
$ pip3 install --user -r bootloader/mcuboot/scripts/requirements.txt

2.4. Zephyr SDK 설치

wget으로 zephyr SDK bundle (0.15.2 버전) 압축파일(tar)을 다운로드해준다

$ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.15.2/zephyr-sdk-0.15.2_linux-x86_64.tar.gz

압축파일 용량은 약 1.7GB..

펌웨어 하나 빌드하는데 너무 벌써 5GB 가까운 용량이 날아가버렸다 -_-;;

 

가이드에서는 다음 경로 중 하나에 압축을 푸는 것을 권장하고 있다

/opt 경로에 압축을 풀어보자 (/opt 경로 접근권한이 root라면 sudo로 슈퍼유저 권한을 부여하면 된다)

$ sudo tar -zxvf zephyr-sdk-0.15.2_linux-x86_64.tar.gz -C /opt

압축을 해제하려면 약 5GB가 필요하다..

압축을 해제한 경로에서 SDK 설치 쉘 스크립트를 실행해주자

$ cd /opt/zephyr-sdk-0.15.2
$ sudo ./setup.sh

Zephyr 하드웨어들을 수월하게 플래싱하게 하기 위해 udev에 규칙을 추가해주자

$ sudo cp /opt/zephyr-sdk-0.15.2/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
$ sudo udevadm control --reload

2.5. nRF Util for nRF5 SDK 설치

https://infocenter.nordicsemi.com/index.jsp?topic=%2Fug_nrfutil%2FUG%2Fnrfutil%2Fnrfutil_installing.html

 

Nordic Semiconductor Infocenter

 

infocenter.nordicsemi.com

Linux용 nrfutil 실행파일을 다운로드받자 (링크)

$ wget https://developer.nordicsemi.com/.pc-tools/nrfutil/x64-linux/nrfutil

다운로드받은 nrfutil 파일을 nRF Connect SDK 설치경로로 옮겨주자

$ mv nrfutil ~/tools/ncs

 

해당 파일에 실행(executable) 권한을 부여하자

$ cd ~/tools/ncs
$ chmod +x nrfutil

그리고 필요한 툴들을 설치해주자

$ ./nrfutil install nrf5sdk-tools

해당 파일들은 ${HOME}/.nrfutil/ 경로에 설치된다


마침내 필요한 SDK와 툴킷들을 다 설치했다...

와따... 사전준비할 게 굉장히 많네 ^^;;

3. RCP 펌웨어 빌드

nRF Connect SDK를 설치해둔 경로로 가서 west cli로 nRF52840 USB Dongle용 RCP 펌웨어를 빌드해보자

$ cd ~/tools/ncs
$ west build -p always -b nrf52840dongle/nrf52840 nrf/samples/openthread/coprocessor/ -- -DOVERLAY_CONFIG="overlay-usb.conf" -DDTC_OVERLAY_FILE="usb.overlay"

※ 2024.06.11: 경로 수정

위 그림처럼 elf 파일을 생성했다면 성공적으로 빌드가 된 것이다 (/build/zephyr/ 경로 내에 zephyr.hex 파일이 정상적으로 생성되어야 한다)

설치해둔 nRF Util로 펌웨어 패키지(zip파일)를 만들어주자

$ ./nrfutil pkg generate --hw-version 52 --sd-req=0x00 --application build/zephyr/zephyr.hex --application-version 1 build/zephyr/zephyr.zip

zephyr.zip 압축파일이 생성된다

4. RCP 펌웨어 USB dongle에 설치

nRF52840 USB Dongle을 PC USB 포트에 삽입해주자

그리고 하얀색 버튼을 눌러서 보드를 Device Firmware Upgrade(DFU) 모드로 설정해주자

아래와 같이 빨간색 LED가 점멸하게 된다

$ ./nrfutil dfu usb-serial -pkg build/zephyr/zephyr.zip -p /dev/ttyACM0

펌웨어 설치가 완료되면 빨간색 LED가 더이상 점멸하지 않는다


거의 1시간에 걸친 대장정(?) 끝에 nRF52840 USB 동글 보드에 RCP 펌웨어를 설치할 수 있었다.. 헥헥;

이제 이 동글을 사용해서 Linux 기반 어떠한 기기에서도 IEEE 802.15.4 무선 네트워크에 접근할 수 있다!

 

Raspbian OS가 설치되어 있는 라즈베리파이 보드에도 당연히 적용할 수 있는데, 이를 통해 라즈베리파이 보드를 Thread Border Router (TBR, OTBR)로 활용할 수 있다

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/matter/openthread_border_router_pi.html

Matter 환경 구축 시 TBR은 상당히 유용하다고 하니, 얼마나 쉽게 내가 직접 만든 Matter 기기들을 연동할 수 있는지 기대된다

 

다음 포스팅에서는 라즈베리파이 보드에 RCP 펌웨어를 올린 nRF52840 USB 동글을 부착한 뒤 TBR로 구성하는 방법에 대해 알아보도록 한다

 

끝~!

 

 

반응형

'Hardware > Home Automation' 카테고리의 다른 글

CC2531 USB Dongle - Arduino로 flashing하기 (CCLoader)  (0) 2021.01.12