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

[Pico SDK] ARM, macOS, VSCode 환경에서 Pico SDK 개발환경 설정

 차완기 - @7/9/2023, 8:51:00 PM
최근 진행중인 AiMate 프로젝트에서 사용중인 메인 MCU를 위해 Pico SDK를 한번 사용해보기로 하였습니다. 결론은 여러 이유로 아두이노 프레임워크에서 RTOS 없이 코드를 작성하기로 했지만… 설정 방법이 간단하기도 하고 언젠간 사용할 일이 있을까 싶어 정리해 보았습니다.
버전에 주의하세요
필자는 M2 Max 칩이 들어간 MacBook Pro에서 아래 작업을 진행하였습니다.
CPU의 아키텍처, OS의 종류 및 버전 등에 따라 그대로 따라하지 못할 수 있으니 이 점 주의해주세요.

1. 빌드 툴 설치

빌드를 위해 필요한 아래 툴을 설치합니다.
VSCode: 아마…있겠죠?
CMake 및 VSCode CMake Extension
Makefile 생성을 위한 CMake가 필요합니다. 설치되어 있지 않다면 Homebrew로 설치합니다.
$ brew install cmake
Bash
복사
CMake Extension은 여기에서 설치할 수 있습니다.
arm-none-eabi-gcc
ARM 아키텍처용 임베디드 환경, GCC컴파일러를 사용하는 툴체인입니다. 동일한 툴체인이 이미 설치되어있다면(저의 경우 CubeCLT 내부) 굳이 설치하지 않아도 상관없습니다. 저는 그냥 설치했습니다.
$ brew tap ArmMbed/homebrew-formulae $ brew install arm-none-eabi-gcc
Bash
복사
이것 이외의 코드 작성에 도움을 주는 VSCode Extension은 생략하였습니다.

2. Pico SDK 다운로드

~ $ git clone -b master https://github.com/raspberrypi/pico-sdk.git ~ $ cd pico-sdk ~/pico-sdk $ git submodule update --init
Bash
복사
git에서 Pico SDK를 다운로드받습니다. 여러 서브모듈로 이루어져 있어 서브모듈까지 몽땅 다운로드합니다.

3. 환경변수 추가

CMake에서 Pico SDK의 위치를 알 수 있도록 환경변수를 추가합니다.
clone받은 디렉토리에서 pwd를 입력한 후 복사,
.zprofile에 PICO_SDK_PATH 환경변수를 추가합니다.
맥의 프로세서나 OS 버전에 따라 수정해야 할 파일 이름이 다를 수 있습니다. 대충 .*profile 규칙인 파일을 찾으면 됩니다.
소싱한 후 환경변수가 재대로 등록되었는지 확인하였습니다.
여기까지 진행하면 환경변수 설정은 끝났습니다. 그러나 애석하게도, 여기에서 사용할 VSCode에서는 위에서 설정한 환경 변수를 가져올 수 없습니다. 대신 프로그램에서 직접 설정해야 했습니다.
Cmd + , 을 입력해 설정으로 넘어온 후 cmake environment를 검색한 후 환경 변수의 Item을 PICO_SDK_PATH, Value는 위에서 확인한 Pico SDK의 위치를 입력하고 저장합니다.

4. 예제 다운로드

~ $ cd ~/Desktop Desktop $ git clone -b master https://github.com/raspberrypi/pico-examples.git
Bash
복사
소스 코드를 직접 작성해 보려다가 Pico SDK의 예제를 다운로드했습니다.
가장 기본적인 GPIO부터 PIO, DMA, USB(low-level)등 다양한 예제가 있네요.

5. 빌드

CMake Extension에서 Configuration 버튼을 클릭하면 프로젝트의 설정이 진행됩니다
앞서 설정한 환경변수나 빌드툴 등이 잘 잡힌게 보이네요.
이제 옆의 빌드 버튼을 클릭해 빌드를 진행하였습니다.
예제가 예제인지라 대부분의 Peripherals를 사용하다 보니 빌드 시간이 많이 걸리네요.
M2 Max MacBook 기준 1분 소요되었습니다.

6. Flashing & 확인

RP2040은 BOOT 버튼을 누른 상태에서 전원을 공급하면 UF2 부트로더에 의해 USB로 펌웨어를 Flashing하도록 도와주는 BOOTSEL모드로 진입합니다. 이 경우 pico는 USB 드라이브로 인식되며, 마이크로비트처럼 펌웨어 파일을 끌어다 넣으면 알아서 펌웨어가 올라갑니다. 이때 펌웨어 파일의 확장자명은 .uf2 입니다.
빌드를 완료하고 나면 build 디렉토리 아래의 프로젝트 파일명 아래에서 uf2 파일을 찾을 수 있습니다. 예를 들어 hello_world/usb/hello_usb.cbuild/hello_world/usb/hello_usb.uf2 위치에 있습니다.
hello_usb예제(USB CDC를 통해 가상 시리얼 포트를 만들어 “Hello, world!”를 출력)의 빌드된 파일인 hello_usb.uf2를 Hex Editor로 열어보았는데요, 소스코드에 하드코딩된 리터럴 문자열을 바이너리에서 확인할 수 있었습니다. 빌드가 잘 된것 같네요.
USB를 통해 펌웨어 파일을 업로드한 후 정상적으로 작동하는지 확인해보기 위해 터미널을 열어보았습니다.
잘 작동하는 것을 확인할 수 있습니다.
picotool을 사용하면 BOOLSEL 진입 없이 CLI에서 편리하게 펌웨어를 업로드할 수 있습니다. 이와 관련한 내용은 아래 글을 참고해주세요.