LoginSignup
4
1

More than 1 year has passed since last update.

Raspberry Pi PicoによるTOPPERS ASP3, FMP3の実行

Last updated at Posted at 2021-10-20

概要

TOPPERSプロジェクトが公開しているオープンソースのリアルタイムOSであるASP3カーネルとFMP3カーネルをRaspberry Pi Picoで実行する方法を解説します。

ASP3カーネルはシングルコア動作、FMP3カーネルはデュアルコア動作をサポートします。

必要ハードウェア

  • Raspberry Pi Pico
  • デバッグアダプタ(デバッガを使う場合)
    • デバッグアダプタ用にもう一台Raspberry Pi Picoを用意するのが一番手軽です。JLink等も使えます。
  • USB-UART変換器(オプション)

必要ソフトウェア

  • ネイティブのビルド環境
  • ネイティブのRuby
  • ARMv6-Mのクロスビルド環境(いわゆるarm-none-eabi-gcc系)
  • シリアルモニタ

デバッグ環境の準備

OpenOCDのビルド

デバッガを利用する場合は、公式ガイドGetting started with Raspberry Pi PicoのAppendix Aに従ってOpenOCDをビルドします。

$ git clone https://github.com/raspberrypi/openocd.git --branch picoprobe --depth=1
$ cd openocd
$ ./bootstrap
$ ./configure --enable-picoprobe --disable-werror --prefix=<path to install>
$ make
$ make install

Windows環境の場合はビルドにMYSYS2が必要となるため、以下ページからWindows版のOpenOCDのバイナリをダウンロードして使う方法もあります。

ただしこちらのバイナリを利用する場合、openocd-w64/share/openocd/scripts/target/rp2040.cfg に下記を追加してください。

rp2040.cfg
targets rp2040.core0

デバッグアダプタの接続

Raspberry Pi Picoを二台用意し、片方をデバッグアダプタ(Picoprobe)として利用する場合は、公式ガイドGetting started with Raspberry Pi PicoのAppendix Aに従って配線を行います。

PCとはデバッガ側PicoのUSBによって接続します。

デバッガ側 ターゲット側
VBUS VBUS
GND GND
GP2 SWCLK
GP3 SWDIO
GP4 GP1
GP5 GP0

デバッガファームウェアの書き込み

Raspberry Pi公式からPicoprobeのUF2イメージをダウンロードします。

(2021/10/19現在、次のリンクからダウンロードできます。 https://datasheets.raspberrypi.com/soft/picoprobe.uf2)

デバッガ側PicoのBOOTSELスイッチを押下しながらPCとUSB接続することで、PCにマスストレージが現れます。

このストレージにPicoprobeのUF2イメージを書き込むことで、Raspberry Pi Picoがデバッグアダプタ兼USB-UART変換器になります。

カーネルのビルド

TOPPERS公式からASP3もしくはFMP3カーネルのRaspberry Pi Pico簡易パッケージをダウンロードします。

ASP3 https://www.toppers.jp/asp3-e-download.html

FMP3 https://www.toppers.jp/fmp3-e-download.html

サンプルプログラムは以下のようにビルドすることができます。

# ASP3カーネルの場合
$ mkdir obj
$ cd obj
$ ruby ../configure.rb -T raspberrypi_pico_gcc
$ make
# FMP3カーネルの場合
$ mkdir obj
$ cd obj
$ ruby ../configure.rb -T raspberrypi_pico_gcc -w -S "syslog.o banner.o serial.o logtask.o chip_serial.o"
$ make

Rubyのエラーが出る場合

ASP3ではRubyのバージョンによって以下のようなエラーが発生する可能性があります。

$ ruby ../configure.rb -T raspberrypi_pico_gcc
Traceback (most recent call last):
        2: from ../configure.rb:47:in `<main>'
        1: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
/usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- shell (LoadError)

この場合、以下のようにGemをインストールします。

$ sudo gem install shell

ターゲットへの書き込み

Picoprobeを利用する場合

Picoprobeを利用する場合はOpenOCDにPATHを通した後に以下のコマンドで書き込みが行えます。

$ make run

デバッガを利用しない場合

デバッガなしで実行する場合は、まずELFファイルをUF2ファイルに変換する必要があります。

これを行うには、以下の手順で公式の変換ツールであるelf2uf2をビルドします。

$ git clone git@github.com:raspberrypi/pico-sdk.git
$ cd pico-sdk/tools/elf2uf2
$ mkdir build
$ cd build
$ cmake ..
$ make

ビルドされたelf2uf2にPATHを通した上で(フルパス指定でも良いです)ASP3またはFMP3のビルドディレクトリに戻り、以下のコマンドでUF2ファイルを生成します(WindowsではELFファイルはasp.exeのような名前かもしれません)。

$ elf2uf2 asp asp.uf2 # ASP3の場合
$ elf2uf2 fmp fmp.uf2 # FMP3の場合

Raspberry Pi PicoのBOOTSELスイッチを押下しながらPCとUSB接続することで、PCにマスストレージが現れます。

このストレージに生成されたUF2イメージを書き込むことで、ターゲットにプログラムがダウンロードされます。

動作確認

GP0をTX、GP1をRXとしてUARTが動作するので、適当な手段でPCから接続するとサンプルプログラムの出力が見られます。

シリアルポートの設定はデータ8ビット、ストップ1ビット、パリティなし、ボーレート115200bpsです。

サンプルプログラムの動作についてはsample/sample1.cをご覧ください。

デバッグアダプタは以下のように起動します。

# OpenOCD + Picoprobeの場合
$ openocd -f interface/picoprobe.cfg -f target/rp2040.cfg
# JLinkの場合
$ JLinkGDBServer -device RP2040_M0_0 -if SWD -speed auto -ir -nogui

Picoprobeを使う場合はGDBからスレッドとして各コアが見られます。

USB-UART変換器がない場合

USB-UART変換器がない場合は、Raspberry Pi PicoのUSBをUSB-CDCとして動作させることができます。

公式のSDKとTOPPERS OSを組み合わせ、TOPPERSのシリアルドライバをUSB-CDCで実装するサンプルを用意しました。

ASP3 https://github.com/komori-t/RPi_Pico_ASP3

FMP3 https://github.com/komori-t/RPi_Pico_FMP3

以下のようにしてビルドできます(TOPPERS公式バージョンとはconfigureの引数が異なります)。

$ mkdir obj
$ cd obj
$ ruby ../configure.rb -T raspberrypi_pico_gcc -w -S "syslog.o banner.o serial.o logtask.o"
$ make

書き込みやデバッグについてはTOPEPRS公式版と同様です。

また、一部SDKの機能を使うこともできます。

利用できる機能については target/raspberrypi_pico_gcc/pico-sdk ディレクトリを参照ください。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1