みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

Raspbery Pi Pico Ubuntu20.04上にSDK環境構築

はじめに

ラズベリーパイPico(RPi Pico)が入手できた。

開発環境としてラズパイ4が必要とされているが実際のところそうでもなさそうなのでUbuntu 20.04に開発環境(SDK)を構築しLチカを動かしてみる。

pico_setup.shについて

C/C++の開発環境を構築するためにpico_setup.shというものが提供されている。

試しにUbuntu 20.04で動かしてみる。

$ wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
$ chmod +x ./pico_setup.sh
$ ./pico_setup.sh

下記のようにエラーになる。

vscode.deb                                         100%[===============================================================================================================>]  57.86M  8.89MB/s    in 6.6s

2021-02-04 13:19:47 (8.82 MB/s) - `vscode.deb' へ保存完了 [60667760/60667760]

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
注意、'./vscode.deb' の代わりに 'code:armhf' を選択します
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 code:armhf : 依存: libnss3:armhf (>= 2:3.26) しかし、インストールすることができません
              依存: apt:armhf しかし、インストールすることができません
              依存: libxkbfile1:armhf しかし、インストールすることができません
              依存: libsecret-1-0:armhf しかし、インストールすることができません
              依存: libgtk-3-0:armhf (>= 3.10.0) しかし、インストールすることができません
              依存: libxss1:armhf しかし、インストールすることができません
              依存: libgbm1:armhf しかし、インストールすることができません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

しかしこれはARM環境向けのVSCodeをインストールしようとして依存関係が解決できないというエラーなので、エディタ以外のSDKのセットアップ自体は正しく終了している。

スクリプトを確認したところ、VSCodeのインストールのあとはラズパイのUARTの有効化処理なので、こちらも必ず実行しなければならないものではない。

PCを再起動するか下記のコマンドで環境変数を読み込みすると、SDKが使用できるようになる。

$ source ~/.bashrc

RPi PicoをPCと接続

ボード側のBOOTSELボタンを押しながら、USBケーブルでPCと接続すると自動的に/media/${USER}/RPI-RP2にマウントされる。

プログラムの書き込み

拡張子がuf2のファイルをRPI-RP2に書き込むと、ボードへの転送からリセットまで行われる。

つまり下記のような流れで処理が行われる。

  1. RPI-RP2へ書き込み
  2. PCからRPi Picoへプログラムを転送
  3. RPi Picoのリセット
  4. 書き込まれたプログラムが開始

Blink(Lチカ)

${PICO_EXAMPLES_PATH}/build/blinkblink.uf2が生成されているのでこれを先ほどマウントされたRPI-RP2にコピーする。

$ cp ${PICO_EXAMPLES_PATH}/build/blink/blink.uf2 /media/${USER}/RPI-RP2

オンボードの緑色のLEDがチカチカするようになる。

Hello World(USB-UART版)

${PICO_EXAMPLES_PATH}/build/hello_world/usbhello_usb.uf2が生成されているのでこれを先ほどマウントされたRPI-RP2にコピーする。

$ cp ${PICO_EXAMPLES_PATH}/build/hello_world/usb/hello_usb.uf2 /media/${USER}/RPI-RP2

ボード上でこのプログラムが実行されるとPCで/dev/ttyACMxというデバイスが検出されるようになる。

$ dmesg | grep ACM
3085:[166271.475390] cdc_acm 1-1:1.0: ttyACM0: USB ACM device

筆者の実行環境では/dev/ttyACM0が認識された。これをminicomなどの端末で開く。

$ minicom -D /dev/ttyACM0

すると次のように表示される。

minicom へようこそ 2.7.1

オプション: I18n 
コンパイルされた日時は:  Dec 23 2019, 02:06:26.
ポート /dev/ttyACM0, 14:59:27

CTRL-@ Z を押すと、説明画面になります。

Hello, world!
Hello, world!
Hello, world!
... (省略) ...

まとめ

Ubuntuでも問題なくRPi Pico向けのSDKを構築し、プログラムをボードに書き込むことができる。

pico_setup.shはVSCodeのインストールでエラーになるが、SDKのセットアップ自体は完了しているので問題はない。