利用 C 語言開始使用 Raspberry Pi Pico 多核心微控制器板
資料提供者:DigiKey 北美編輯群
2023-06-07
嵌入式系統在本質上需配備功能強大、低成本的微控制器單元 (MCU)。這些裝置不僅在產品中發揮重要作用,而且也可支援測試、快速原型設計和機器學習 (ML) 等功能。但是,若要開始使用 MCU,通常要先深入瞭解 MCU 技術和低階程式設計語言。最重要的是,開發板的成本通常在 20 至 1000 美元之間,這對許多開發人員來說可能太貴了。此外,也絕非一定會有開發板可用;即使有,設計人員往往也要費一番功夫才能組好板件並運作。
本文將介紹 Raspberry Pi Pico (SC0915);這是一款 RP2040 MCU 用的低成本開發板,能為開發人員提供多種功能。本文也會介紹 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)
RP2040 具有雙核心 Arm® Cortex®-M0®+ 處理器,工作頻率為 133 MHz,具有高達 264 KB 的 SRAM。RP2040 不包含晶片上快閃記憶體。相反地,Raspberry Pi Pico 提供外接的 2 MB 快閃記憶體晶片,可透過四通道序列周邊介面 (QSPI) 與 RP2040 介接。此板還提供使用者 LED、鎖相迴路 (PLL) 可用來建立穩定高速 CPU 時脈的晶體振盪器,以及用於配置處理器正常啟動或進入開機載入程式的按鈕。
廣大的生態系統
Raspberry Pi Pico 已經擁有廣大的生態系統,能讓開發人員選擇使用 MicroPython 或 C 軟體開發套件編寫電路板的應用程式。Raspberry Pi Pico 有趣的地方在於,不只有一款開發板而已;而是有三款。原始的 SC0915 採用標準配置、SC0917 則含有排針座連接器、SC0918 則具有低成本的 Wi-Fi 晶片,可達到連線應用 (圖 2)。
圖 2:Raspberry Pi Pico 提供三種配置。(圖片來源: Beningo Embedded Group, LLC)
各個款式的電路板,一般尺寸維持不變。電路板的邊緣連接包括用於周邊的 40 引腳邊緣連接,以及圖 3 所示的連接選項。包括電源、接地、通用非同步接收器和發射器 (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 語言的問題在於,這是一個已有五十年歷史的古老程式設計語言,很少有學校在教授這門課程了。此外也很容易出現程式錯誤並造成損壞。儘管有這些潛在問題,但 C 語言仍是絕大多數嵌入式系統開發時的首選語言。
Raspberry Pi Pico 生態系統提供 C 語言替代方案就是 MicroPython。MicroPython 是一種 CPython 埠,可在 MCU 架構系統上運作。雖然這無疑比 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 Pio 範例程式碼,可以利用以下命令複製 Raspberry Pi 的 git 儲存庫:
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 引腳,並以 250 ms 的延遲進行閃爍。
複製
/**
* 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 引腳,並以 250 ms 的延遲閃爍。(程式碼來源:Raspberry Pi)
根據清單,LED_PIN 分配到預設引腳,然後會調用 C gpio API。gpio_init 可用來初始化引腳,而 gpio_set_dir 則用於將 LED_PIN 設定成輸出。接著會建立一個無限迴圈,每 250 ms 會切換一次 LED 狀態。
應用程式的編譯相對簡單。首先,開發人員要使用以下命令,在 Raspberry Pi Pico 資料夾中建立一個組建目錄:
mkdir build
cd build
接下來則要執行以下命令,為組建準備 cmake:
cmake
現在,開發人員就可切換到 blinky 目錄並執行 make:
cd blink
make
組建流程會輸出 blinky.uf2 檔。編譯後的程式可以載入到 Raspberry Pi Pico 上,只要按住 BOOTSEL 引腳然後將電路板通電即可。RP2 就會顯示成大容量存儲裝置。開發人員需要將 blinky.uf2 檔案拖到磁碟機中,此時,開機載入程式就會安裝應用程式。完成後,LED 應該就會開始閃爍。
結論
Raspberry Pi Pico 對於想在開發週期中享有靈活性的嵌入式開發人員來說,是一個有吸引力的解決方案。提供多種選項,包括獨立解決方案或具有無線連線的電路板。此外,生態系統也支援 C 和 C++,以及 MicroPython。開發人員可以選擇最適合其應用的語言,然後利用對應的 SDK 來加速軟體開發。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。