[RPi] RaspberryPi pico

RaspberryPi
.

発売されて1年ほど経ってますが、シリコンハウスでたまたま見つけた RaspberryPi pico を入手しました。これまでの RaspberryPi と違って小型マイコン RP2040 が採用されたボードです。

Cortex-M0+搭載で SRAM 264KB、QSPI-NOR Flash が2MBというコンパクトな仕様で、これまでのように Linux が動くスペックではありませんが、30本もある GPIO に SPI、UART、ADC、PWM、そしてUSB1.1 もあるので、制御用途やインターフェース用途で使えそうです。

サンプル動作

手っ取り早く動作確認するには、公式ページの C/C++ SDK にあるイメージファイルを pico にインストールするだけです。まずはイメージファイルをダウンロードします。

wget https://datasheets.raspberrypi.com/soft/blink.uf2

pico を PC の USB とケーブルで接続します。購入してすぐの状態では flash に何も書かれていないので、書き込み可能な状態で起動します。PC では mass-storage として認識されます。

usb 2-2: new full-speed USB device number 4 using xhci_hcd
usb 2-2: New USB device found, idVendor=2e8a, idProduct=0003, bcdDevice= 1.00
usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-2: Product: RP2 Boot
usb 2-2: Manufacturer: Raspberry Pi
usb 2-2: SerialNumber: ************
usb-storage 2-2:1.0: USB Mass Storage device detected
scsi host3: usb-storage 2-2:1.0
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver uas
scsi 3:0:0:0: Direct-Access RPI RP2 3 PQ: 0 ANSI: 2
sd 3:0:0:0: [sdc] 262144 512-byte logical blocks: (134 MB/128 MiB)
sd 3:0:0:0: Attached scsi generic sg2 type 0
sd 3:0:0:0: [sdc] Write Protect is off
sd 3:0:0:0: [sdc] Mode Sense: 03 00 00 00
sd 3:0:0:0: [sdc] No Caching mode page found
sd 3:0:0:0: [sdc] Assuming drive cache: write through
sdc: sdc1
sd 3:0:0:0: [sdc] Attached SCSI removable disk

Ubuntu20.04 では /media/${USER} に自動的にマウントされましたが、必要に応じて手動でマウントする必要があるかもしれません。このマウントしたディレクトリに先ほどの blink.uf2 をコピーします。

cp blink.uf2 /media/$USER/RPI-RP2/

コピー完了と同時に再起動してイメージファイルのプログラムの実行が始まり、LED の点滅が確認できます。

再びイメージファイルを書き込む場合は、基板上の BOOTSEL ボタンを押しながら USB ケーブルを接続します。

開発環境

開発環境は実行バイナリイメージを作成する C/C++ SDK と、 インタプリタを pico 本体に導入してスクリプトを実行する MicroPython があります。まずは C/C++ SDK を導入します。

まず必要なモジュールを用意しておきます。いわゆる baremetal 用のコンパイル環境なので、これまでにビルドしたことがあれば 導入するのはクロスコンパイラくらいです。また、この SDK では cmake を使用します。

sudo apt install gcc cmake git gcc-arm-none-eabi

SDK を GitHub から clone します。submodule があるので update しておきます。

git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk
git submodule update --init
cd ..

サンプルも clone します。ビルドするためのディレクトリを作成しておきます。

git clone https://github.com/raspberrypi/pic-examples
cd pico-examples
mkdir build
cd build

SDKを参照するためのパスを設定し、cmake で各サンプルの makefile を準備します。

export PICO_SDK_PATH=$PWD/../../pico-sdk
cmake ../..

さて、最初に先ほどの LED 点滅プログラム "blink" をビルドしてみます。といっても make するだけなので、ビルドが完了すれば blink.uf2 ができあがります。BOOTSEL ボタンを押しながらUSBを接続し、先ほどと同じようにマウント先にイメージファイルをコピーすれば実行します。

cd blink
make
cp blink.uf2 /media/$USER/RPI-RP2/

USB をシリアルとして使うサンプル "hello _world" もあります。こちらをビルドしてみます。

cd ../hello_world/usb
make
cp hello_world.uf2 /media/$USER/RPI-RP2/

pico とは USB 接続されているので、このまま端末プログラムを起動すれば "Hello world!" を延々表示し続ける動作を確認できます。

sudo minicom -D /dev/ttyACM0 -b 115200

サンプルは各機能向けに豊富に用意されているので、いろいろ試しながら動作を見ることができます。

参考サイト

  • https://www.raspberrypi.com/documentation/microcontrollers/c_sdk.html
  • https://gihyo.jp/admin/serial/01/ubuntu-recipe/0684?page=1

コメント

タイトルとURLをコピーしました