본문 바로가기
공학/ETC

C를 사용하여 Raspberry Pi Pico 멀티코어 마이크로 컨트롤러 기판 시작하기

by 원가이버 2023. 9. 8.
728x90

임베디드 시스템은 강력하고 저렴한 마이크로 컨트롤러 장치(MCU)에 대한 내재적인 필요가 있습니다. 이러한 장치는 제품뿐만 아니라 테스트, 신속한 시제품 제작, 머신 러닝(ML)과 같은 기능을 지원하는 데에도 중요한 역할을 합니다. 그러나 MCU를 시작하려면 일반적으로 MCU 기술과 저수준 프로그래밍 언어에 대한 심층적인 이해가 필요합니다. 게다가 개발 기판의 가격은 대개 20달러 ~ 1000달러 사이로, 많은 개발자에게 너무 비쌀 수 있습니다. 또한 개발 기판은 항상 사용할 수 있는 것이 아니며, 개발 기판을 사용할 수 있는 경우에도 설계자가 기판을 제대로 작동하는 데 어려움을 겪는 경우가 많습니다.

이 기사에서는 개발자에게 다양한 기능을 제공하는 RP2040 MCU용 저가형 개발 기판인 Raspberry Pi Pico(SC0915)를 소개합니다. 또한 Pico와 일부 확장 기판을 살펴보고, Raspberry Pi Pico가 지원하는 다양한 소프트웨어 개발 키트를 검토하고 C SDK를 사용하여 깜박이는 LED 응용 제품을 만드는 방법을 보여줍니다.

 

Raspberry Pi Pico 소개

Raspberry Pi Pico는 2021년에 RP2040 마이크로 컨트롤러의 개발 플랫폼으로 처음 소개되었습니다. Pico는 독립형 개발 기판으로 사용하거나 캐리어 기판에 납땜할 수 있는 에지 연결을 통해 직접 제품으로 설계할 수 있습니다(그림 1). Pico는 5달러 미만의 가격으로 다목적으로 사용할 수 있어 제작자와 전문 개발자 모두에게 인기 있는 솔루션이 되었습니다.

그림 1: Raspberry Pi Pico는 RP2040 마이크로 컨트롤러에서 응용 제품을 개발하는 데 필요한 모든 것이 포함된 저가형 개발 기판입니다. (이미지 출처: Raspberry Pi)

P2040은 133MHz에서 클로킹된 이중 코어 Arm® Cortex®-M0+ 프로세서를 탑재하고 있으며 최대 264KB(킬로바이트)의 SRAM을 포함하고 있습니다. RP2040 플래시 온칩은 포함하지 않습니다. 대신 Raspberry Pi Pico는 쿼드 직렬 주변 장치 인터페이스(QSPI)를 통해 RP2040과 인터페이스하는 외부 2Mbyte(메가바이트) 플래시 칩을 제공합니다. 또한 이 기판에는 사용자 LED, 위상 잠금 루프(PLL)가 안정적인 고속 CPU 클록을 생성하는 데 사용하는 수정 발진기 및, 프로세서를 정상 부팅할지 부트로더로 부팅할지 구성하는 푸시 버튼이 있습니다.

 

포괄적인 에코시스템

Raspberry Pi Pico는 이미 개발자가MicroPython 또는 C 소프트웨어 개발 키트를 사용하여 기판용 애플리케이션을 작성할 수 있는 광범위한 에코시스템을 갖추고 있습니다. Raspberry Pi Pico에 대한 한 가지 흥미로운 사항은 개발 기판이 하나가 아니라는 것입니다 대신 표준 구성의 오리지널 SC0915, 헤더 커넥터가 포함된 SC0917, 연결된 응용 제품을 위한 저가형 Wi-Fi 칩이 포함된 SC0918의 세 가지 기판이 있습니다(그림 2).

그림 2: Raspberry Pi Pico는 세 가지 구성으로 제공됩니다. (이미지 출처: Beningo Embedded Group, LLC)

이러한 각각의 버전에 대해 기판의 일반적인 풋프린트는 동일합니다. 기판의 에지 연결은 그림 3에 표시된 주변 장치 및 연결 옵션을 위한 40핀 에지 연결로 구성됩니다. 여기에는 전력, 접지, 범용 비동기 수신기 및 송신기(UART), 범용 입력 및 출력(GPIO), 펄스 폭 변조(PWM), 아날로그-디지털 컨버터(ADC), 직렬 주변 장치 상호 연결(SPI), 집적 회로 간 인터페이스(I2C) 및 디버깅이 포함됩니다.

 

그림 3: Raspberry Pi Pico 에지 연결 핀 아웃은 다양한 직렬 액세스를 제공합니다. (이미지 출처: Raspberry Pi)

 

브레이크아웃 기판 옵션

신속한 시제품 제작에 Raspberry Pi를 사용하려면 기판의 에지 커넥터에 간편하게 액세스할 수 있어야 합니다. 헤더에 액세스하는 한 가지 옵션은 헤더를 채우고 브레드 기판을 사용하는 것입니다. 그러나 이 솔루션은 전선이 엉망이 되어 오류로 이어질 수 있습니다. 대신 에지 커넥터를 보다 쉽게 사용할 수 있는 인터페이스로 확장하는 브레이크아웃 기판에 대한 몇 가지 옵션이 있습니다.

예를 들어, Bridgetek MM2040EV Pico 모듈 기판은 대부분의 에지 커넥터를 핀 및 소켓 연결로 분리합니다. 또한 각 주변 장치 인터페이스를 커넥터로 제공하는 Seeed Studio의 Pico용 103100142 실드도 있습니다. 각 커넥터는 확장 기판과 핀 호환이 가능하여 관성 센서, 모터 구동기, 거리 측정기 등의 기능을 추가할 수 있습니다.

 

C 또는 MicroPython?

임베디드 시스템은 저수준 제어와 고수준 시스템 애플리케이션 접근 방식의 균형을 맞추기 위해 전통적으로 C로 작성되어 왔습니다. 오늘날 C의 문제점은 대학에서 거의 가르치지 않는 50년 된 프로그래밍 언어라는 점입니다. 또한 실수로 버그를 삽입하여 손상을 입히기도 너무 쉽습니다. 이러한 잠재적인 문제에도 불구하고 C는 대부분의 임베디드 시스템 개발에서 선택되는 언어입니다.

Raspberry Pi Pico 에코시스템에서 제공하는 C의 대안으로 MicroPython을 사용할 수 있습니다. MicroPython은 MCU 기반 시스템에서 실행되도록 설계된 CPython 포트입니다. 의심할 여지없이 C보다 프로세서 사용량이 많지만 여러 개발자가 친숙하고 편안하게 사용할 수 있는 최신 언어입니다. MicroPython은 MCU 및 하드웨어의 낮은 수준의 세부 사항을 추상화할 수 있습니다. 하드웨어 액세스는 쉽게 배울 수 있는 높은 수준의 애플리케이션 프로그래밍 인터페이스(API)를 통해 이루어지며, 이는 프로젝트 기한이 촉박할 때 중요한 기능입니다.

사용할 소프트웨어 개발 키트(SDK)를 선택할 때(C 또는 MicroPython) 개발자는 특정 요구 사항에 집중해야 합니다. MicroPython에 비해 C를 사용하면 MCU의 레지스터에 대한 로우 레벨 액세스가 가능하고 메모리 사용 공간이 더 작으며 효율적입니다.

 

C SDK 설정

C SDK를 사용하여 깜박이는 LED 응용 제품을 만들 때 몇 가지 옵션이 있습니다. 첫 번째는 SDK 설명서를 검토하고 지침을 따르는 것입니다. 두 번째는 사전 설정된 Docker 컨테이너를 사용하여 시작하는 데 필요한 모든 도구를 자동으로 설치하는 것입니다. 세 번째는 툴체인과 Raspberry Pi Pico 예제 코드를 수동으로 설치하는 것입니다.

  • Git
  • Python 3
  • Cmake
  • gcc-arm-none-eabi \
  • libnewlib-arm-none-eabi

다음 명령을 사용하여 Raspberry Pi의 git 리포지토리를 복제하여 Raspberry Pi Pico 예제 코드를 검색할 수 있습니다.

git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \

cd /home/sdk/pico-sdk && \

git submodule update --init &&

이러한 라이브러리와 소스 코드가 설치되면 다음 단계는 깜박이는 LED 응용 제품을 탐색하고 컴파일하는 것입니다.

 

첫 번째 깜박이는 애플리케이션 작성

C SDK에는 개발자가 첫 번째 애플리케이션을 빌드하는 데 사용할 수 있는 깜박이는 예제가 함께 제공됩니다. 아래 코드 목록은 Pico의 온보드 LED와 PICO_DEFAULT_LED_PIN 지시문을 사용하여 I/O 핀을 설정하고 250ms(밀리초) 지연으로 깜박이는 데 사용됩니다.

	/**
	 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
	 *
	 * SPDX-License-Identifier: BSD-3-Clause
	 */
	

	#include "pico/stdlib.h"
	

	int main() {
	#ifndef PICO_DEFAULT_LED_PIN
	#warning blink example requires a board with a regular LED
	#else
	    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
	    gpio_init(LED_PIN);
	    gpio_set_dir(LED_PIN, GPIO_OUT);
	    while (true) {
	        gpio_put(LED_PIN, 1);
	        sleep_ms(250);
	        gpio_put(LED_PIN, 0);
	        sleep_ms(250);
	    }
	#endif
	}

코드 목록: Raspberry Pi Pico는 PICO_DEFAULT_LED_PIN 지시어를 사용하여 I/O 핀을 설정하고 250ms 지연으로 깜빡입니다. (코드 소스: Raspberry Pi)

목록에 따라 LED_PIN에 기본 핀이 할당되고, 그런 다음 C gpio API에 호출이 이루어집니다. GPIO_INIT는 핀을 초기화하는 데 사용되며 GPIO_SET_DIR은 LED_PIN을 출력으로 설정하는 데 사용됩니다. 그런 다음 250ms마다 LED 상태를 전환하는 무한 루프가 생성됩니다.

애플리케이션 컴파일은 비교적 간단합니다. 먼저 개발자는 다음 명령을 사용하여 Raspberry Pi Pico 폴더에 빌드 디렉터리를 생성해야 합니다:

mkdir build

cd build

cmake는 다음 명령을 실행하여 빌드를 준비해야 합니다.

cmake

이제 개발자는 blinky 디렉터리로 변경하고 make를 실행할 수 있습니다.

cd blink

make

빌드 프로세스의 출력은 blinky.uf2 파일이 됩니다. 컴파일된 프로그램은 BOOTSEL 핀을 누른 상태에서 기판의 전원을 켜면 Raspberry Pi Pico에 로드할 수 있습니다. RP2는 대용량 기억 장치로 표시됩니다. 개발자는 blinky.uf2 파일을 드라이브로 드래그해야 하며, 이때 부트로더가 애플리케이션을 설치합니다. 완료되면 LED가 깜박임을 시작합니다.

 

결론

Raspberry Pi Pico는 개발 주기의 유연성을 원하는 임베디드 개발자에게 매력적인 솔루션입니다. 독립형 솔루션 또는 무선 연결이 가능한 기판을 포함하여 여러 가지 옵션을 사용할 수 있습니다. 또한 이 에코시스템은 MicroPython뿐만 아니라 C 및 C++도 지원합니다. 개발자는 애플리케이션에 가장 적합한 언어를 선택한 다음 해당 SDK를 활용하여 소프트웨어 개발을 가속화할 수 있습니다.

 

참조 : https://www.digikey.kr/ko/articles/getting-started-raspberry-pi-pico-multicore-microcontroller-board

 

728x90

댓글