David Lin

David Lin

一個軟體工程師的隨意筆記

03 Jun 2021

Build MicroPython for Raspberry Pi Pico

Raspberry Pi Pico 所使用的 MicroPython 也是一個開放原始碼的專案, 可以自己 build firmware 並上傳到 Pico 上。

這次我讓 MicroPython v1.15 中 pico-sdk 從 v1.1.0 升級到 v1.1.2 (裡面是 bugfix), 需要要自己重新編譯一份 firmware。而且還需要加上 Pimoroni 的 extensions,所以在此紀錄一下。

Install Build Tools

首先在 Linux 下安裝 arm-none-eabi target 的 toolchain:

sudo pacman -S arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib

Mac 系統可以自行去 ARM 官網 下載 toolchain 並自己把路徑塞進 $PATH 變數內

Clone Projects

然後分別 clone 兩個 projects,其中 MicroPython 已經透過 submodule 包含了 pico-sdk

git clone --recursive git@github.com:pimoroni/pimoroni-pico.git
git clone --recursive git@github.com:micropython/micropython.git

Update Pico-SDK

然後在 MicroPython 下更新 Pico SDK

cd micropython/lib/pico-sdk
git checkout master
cd ../..

Build

回到 MicroPython 的資料夾下,先編譯一下 cross build tool:

make -C mpy-cross

再來編譯一下 Pico 用的 firmware,要記得把 Pimoroni extensions 包進去:

cd ports/rp2
make USER_C_MODULES=../../../pimoroni-pico/micropython/modules/micropython.cmake

Build 過程中發現 pimoroni 的 ioexpander.cpp 上噴了 build error, 原因是 printf 沒有宣告,加上 #include <cstdio> 就好了。 (我為了這個丟 PR

Result

編譯結束後,會在 ports/rp2/build-PICO 資料夾下產生兩個不同格式的 binary 檔案:

  • firmware.uf2: 可以用虛擬磁碟方式安裝(按住 BOOTSEL 再接電腦)
  • firmware.elf: 可以透過 debugger via SWD port 安裝

打指令 picotool info --all firmware.uf2 查看一下 firmware 的資訊:

File /Users/davidlin/projects/pico/micropython/ports/rp2/build-PICO/firmware.uf2:

Program Information
 name:            MicroPython
 version:         v1.15-1-g571ce11ac
 features:        USB REPL
                  thread support
 frozen modules:  rp2, _boot, onewire, ds18x20, uasyncio, uasyncio/core, uasyncio/event, uasyncio/funcs, uasyncio/lock, uasyncio/stream
 binary start:    0x10000000
 binary end:      0x10078118
 embedded drive:  0x100a0000-0x10200000 (1408K): MicroPython

Fixed Pin Information
 none

Build Information
 sdk version:       1.1.2
 pico_board:        pico
 boot2_name:        boot2_w25q080
 build date:        Jun  2 2021
 build attributes:  MinSizeRel

可以確認此 firmware 的 MicroPython 與 Pico SDK 版本符合預期。 不過很難確認裡面有沒有把 Pimoroni extensions 包進去…

Install

先按住 Raspberry Pi Pico 的 BOOTSEL 按鈕(板子上白色按鈕),然後接上電腦, 它就會以虛擬磁碟形式掛載上去,直接把 firmware.uf2 複製到裡面就可以了。

用 Thonny 試跑一下 pimoroni example code ,已經確認可以用。

Downloads

References

comments powered by Disqus