使用C開始使用Raspberry Pi Pico多核微控制器板


雅各布·貝寧戈
嵌入式系統(tǒng)固有地需要具有功能強大、低成本的微控制器單元 (MCU)。這些設備不僅在產(chǎn)品中發(fā)揮著重要作用,而且在支持測試、快速原型設計和機器學習 (ML) 等功能方面也發(fā)揮著重要作用。但是,開始使用 MCU 通常需要深入了解 MCU 技術和低級編程語言。最重要的是,開發(fā)板的價格通常在 20 美元到 1000 美元之間,這對許多開發(fā)人員來說太貴了。此外,開發(fā)板并不總是可用的,即使有,設計人員也常常難以啟動并運行開發(fā)板。
本文介紹Raspberry Pi Pico (SC0915) 作為RP2040 MCU的低成本開發(fā)板,可為開發(fā)人員提供廣泛的功能。本文探討了 Pico 和一些擴展板,檢查了 Raspberry Pi Pico 支持的不同軟件開發(fā)套件,并演示了如何使用 C SDK 創(chuàng)建閃爍的 LED 應用程序。
Raspberry Pi Pico 簡介
Raspberry Pi Pico 于 2021 年首次作為 RP2040 微控制器的開發(fā)平臺推出。 Pico 可以用作獨立的開發(fā)板,或者由于可以焊接到載板上的邊緣連接,它可以直接設計到產(chǎn)品中(圖 1)。 Pico 低于 5 美元的成本及其多功能用途,已成為制造商和專業(yè)開發(fā)人員的熱門解決方案。

圖 1:Raspberry Pi Pico 是一款低成本開發(fā)板,包含在 RP2040 微控制器上開發(fā)應用程序所需的一切。 (圖片來源:樹莓派)
RP2040 采用主頻為 133 兆赫茲 (MHz) 的雙核Arm? Cortex?-M0+ 處理器,并包含高達 264 千字節(jié) (Kbytes) 的 SRAM。 RP2040 不包括片上閃存。相反,Raspberry Pi Pico 提供了一個外部 2 兆字節(jié) (Mbyte) 閃存芯片,該芯片通過四串行外設接口 (QSPI) 與 RP2040 連接。該板還提供了一個用戶 LED、一個晶體振蕩器(鎖相環(huán) (PLL) 用于創(chuàng)建穩(wěn)定的高速 CPU 時鐘)和一個按鈕(用于配置處理器是正常啟動還是進入引導加載程序)。
廣泛的生態(tài)系統(tǒng)
Raspberry Pi Pico 已經(jīng)擁有廣泛的生態(tài)系統(tǒng),允許開發(fā)人員選擇使用 MicroPython 或 C 軟件開發(fā)工具包為電路板編寫應用程序。關于 Raspberry Pi Pico 的一個有趣的注意事項是,不只有一個可用的開發(fā)板。相反,有三個;具有標準配置的原始 SC0915、包含接頭連接器的SC0917以及包含用于連接應用的低成本 Wi-Fi 芯片的SC0918 (圖 2)。

圖 2:Raspberry Pi Pico 提供三種配置。 (圖片來源:Beningo Embedded Group, LLC)
對于這些版本中的每一個,電路板的總體占用空間都保持不變。電路板的邊緣連接包括用于外圍設備的 40 引腳邊緣連接和連接選項,如圖 3 所示。這些包括電源、接地、通用異步接收器和發(fā)送器 (UART)、通用輸入和輸出 (GPIO)、脈沖寬度調制 (PWM)、模數(shù)轉換器 (ADC)、串行外圍互連 (SPI)、內部集成電路 (I2C) 接口和調試。

圖 3:Raspberry Pi Pico 邊緣連接引出線提供了多種外設訪問。 (圖片來源:樹莓派)
分線板選項
當 Raspberry Pi 將用于快速原型制作時,需要輕松訪問電路板的邊緣連接器。訪問它們的一種選擇是填充標題并使用面包板。但是,此解決方案通常會導致電線混亂,從而導致錯誤。因此,有多種分線板選項可以將邊緣連接器擴展到更容易獲得的接口。
例如,Bridgetek的MM2040EV Pico 模塊板 將大部分邊緣連接器分解為引腳和插座連接。此外,還有用于Seeed Studio的 Pico 的103100142屏蔽 ,它提供每個外圍接口作為連接器。每個連接器都與擴展板引腳兼容,以添加慣性傳感器、電機驅動器和測距儀等功能。
到 C 還是到 MicroPython?
嵌入式系統(tǒng)傳統(tǒng)上是用 C 編寫的,因為它平衡了低級控制和高級系統(tǒng)應用程序方法。今天 C 的問題在于它是一種過時的、已有 50 年歷史的編程語言,很少在大學教授。也很容易不小心注入錯誤并造成損壞。盡管存在這些潛在問題,C 語言仍是大多數(shù)嵌入式系統(tǒng)開發(fā)的首選語言。
由 Raspberry Pi Pico 生態(tài)系統(tǒng)提供的使用 C 的替代方法是 MicroPython。 MicroPython 是一個 CPython 端口,設計用于在基于 MCU 的系統(tǒng)上運行。雖然它無疑是比 C 更重的處理器用戶,但它是許多開發(fā)人員熟悉和習慣的現(xiàn)代語言。 MicroPython 可以抽象出 MCU 和硬件的底層細節(jié)。硬件訪問是通過易于學習的高級應用程序編程接口 (API) 進行的,這是項目期限緊迫的重要功能。
在選擇要使用的軟件開發(fā)工具包 (SDK)(C 或 MicroPython)時,開發(fā)人員需要關注特定需求。與 MicroPython 相比,使用 C 將提供對 MCU 寄存器的低級訪問,內存占用更小,效率更高。
設置 C SDK
使用 C SDK 創(chuàng)建閃爍 LED 應用程序時,有多種選擇。首先是查看 SDK 文檔并按照說明進行操作。第二種是使用預置的Docker容器,自動安裝上手所需的所有工具。第三種選擇是手動安裝工具鏈和 Raspberry Pi Pico 示例代碼,包括:
混帳
蟒蛇3
制作
gcc-arm-none-eabi
libnewlib-arm-none-eabi
可以通過使用以下命令克隆 Raspberry Pi 的 git repo 來檢索 Raspberry Pi Pico 示例代碼:
git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk &&
cd /home/sdk/pico-sdk &&
git 子模塊更新 --init &&
一旦安裝了這些庫和源代碼,下一步就是探索和編譯閃爍的 LED 應用程序。
編寫第一個 blinky 應用程序
C SDK 帶有一個閃爍的示例,開發(fā)人員可以使用它來構建他們的第一個應用程序。下面的代碼清單使用 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 毫秒的延遲使其閃爍。 (代碼來源:樹莓派)
根據(jù)列表,LED_PIN 被分配了默認引腳;然后調用 C gpio API。 gpio_init 用于初始化引腳,而 gpio_set_dir 用于將 LED_PIN 設置為輸出。然后創(chuàng)建一個無限循環(huán),每 250 毫秒切換一次 LED 的狀態(tài)。
編譯應用程序相對簡單。首先,開發(fā)人員需要使用以下命令在其 Raspberry Pi Pico 文件夾中創(chuàng)建構建目錄:
mkdir 構建
光盤構建
接下來,cmake 需要通過執(zhí)行以下命令為構建做好準備:
制作
現(xiàn)在,開發(fā)人員可以切換到 blinky 目錄并運行 make:
CD閃爍
制作
構建過程的輸出將是一個 blinky.uf2 文件。編譯后的程序可以通過按住 BOOTSEL 引腳并給板子上電來加載到 Raspberry Pi Pico 上。然后 RP2 將顯示為大容量存儲設備。開發(fā)人員需要將 blinky.uf2 文件拖到驅動器上,此時引導加載程序將安裝應用程序。完成后,LED 應開始閃爍。
結論
Raspberry Pi Pico 是一款極具吸引力的解決方案,適用于尋求開發(fā)周期靈活性的嵌入式開發(fā)人員。有多種選擇可供選擇,包括獨立解決方案或具有無線連接功能的電路板。此外,生態(tài)系統(tǒng)支持 C 和 C++,以及 MicroPython。開發(fā)人員可以選擇最適合其應用程序的語言,然后利用相應的 SDK 來加速軟件開發(fā)。
責任編輯:David
【免責聲明】
1、本文內容、數(shù)據(jù)、圖表等來源于網(wǎng)絡引用或其他公開資料,版權歸屬原作者、原發(fā)表出處。若版權所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時處理。
2、本文的引用僅供讀者交流學習使用,不涉及商業(yè)目的。
3、本文內容僅代表作者觀點,拍明芯城不對內容的準確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關結果。
4、如需轉載本方擁有版權的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉載原因”。未經(jīng)允許私自轉載拍明芯城將保留追究其法律責任的權利。
拍明芯城擁有對此聲明的最終解釋權。