発売されて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
コメント