Pico三昧(29) ラズパイPico2:RP2350、Boot ROMとBoot RAM

Joseph Halfmoon

前回のOTPはPico2で追加されたメモリでした。一部はユーザ使用も可能かと。一方、今回眺めてみるROM(ブートROM)はPicoの中の人がプログラムしたマスクROMみたいです。ユーザが書き変えることは出来ません。しかしその機能に毎度お世話になっておる、と。そしてPico2では専用RAMが追加されているみたい。

※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。

※Raspberry Pi Pico、Raspberry Pi Pico2のデータシートは、以下からダウンロードできます。

Pico-series Microcontrollers

ブートROM

ラズパイPico、RP2040の時代からブートROMと呼ばれるROMが0x00000000番地に鎮座しておるようです。RP2040の場合、そのサイズ16kバイト。そこに格納されているプログラムやデータをかいつまむと以下のような機能を行うためのもののようです。

    • システムのセットアップ
    • Flashに書き込まれているユーザプログラムのブート
    • Flashのプログラミング
    • USBマスストレージデバイスとしての動作制御
    • 浮動小数計算ライブラリなどの各種ルーチン

たとえば、Bootボタンを押しながらUSBを接続するとホストPC上にUSBマスストレージデバイスとしてPicoが見えるのも、そこにUF2形式のオブジェクトを書き込むとPicoのFlashに書き込まれるのも、そしてCore 0でユーザプログラムが走るのも、またCore 1にユーザプログラムを割り当て “Launch” するのも、このROMに格納されているプログラムの仕業であるようです。意識しようがしまいが「いつもお世話になっている」ありがたい部分です。

とはいえこの部分は工場製造時に「プログラミング」されるので書き替え不可です。書き替えて何かできるという部分があるわけじゃないので、ちらっと眺める程度で流したいと思います。

RP2350にはBoot ROMだけでなくBoot RAMあり

さてラズパイPico2搭載のRP2350は、RP2040の延長上にあり、やはり0x00000000番地にBoot ROMが存在します。しかしそのサイズは倍増。

32kバイト

あります。はたしている機能的にはPicoの時の延長上にあるみたいです。しかし倍増するのは

    • RP2350はモダンで「セキュアな」デバイスなのでその対応
    • RP2350はArmとRISC-Vの「デュアル・アーキテクチャ」なのでその対応

みたいです。BootROMのソースはRP2040もRP2350もGitHub上で公開されています。RP2350用のソースを拝見すると Arm用のアセンブリコードとRISC-V用のアセンブリコードが併存しているスタイルです(ホルダ分かれているのでこんがらがることはないけど。)単純に倍ではないけれども、増えるわな。

ちなみにArmとRISC-Vのコア・アーキテクチャ切り替えはハード的には前回やったOTPの制御レジスタ使って行われるのですが、ソフト的にはUF2オブジェクトのどこぞにあるスイッチをROM内のルーチンが識別してその操作を行ってくれるみたいです。

さて、RP2350にあってRP2040にないブロックが Boot RAMと呼ばれる小さなSRAMブロックです。サイズは以下です。

1kB(256 x 32bit)

鎮座するのは、0x400e0000番地からのようです。ここのRAMはメインのSRAMとは異なり周辺装置接続用のAPB接続のようです。よって、READに3サイクル、WRITEに4サイクルかかる遅いRAMです。また、フェッチには反応しないので、ここにコードを配置して実行するようなことはできないようです。

どうもこのSRAMは「セキュリティ」への配慮から設置されたメモリのようです。Armのセキュアアクセス、RISC-VのMachine-modeアクセスのみ可能。下々のコードは触ることすらできませぬ。また、アクセス権、特権もったプログラムを作製すればユーザが使うことは物理的には可能であるようですが、推奨はされていないようです。ROM内のAPI経由で使えと。そうしないとどんな恐ろしいことが起こっても知らんと。桑原桑原。

Pico三昧(28) ラズパイPico2:RP2350、OTP、ワンタイムプログラミング記憶 へ戻る

Pico三昧(30) ラズパイPico2:RP2350、Pico:RP2040、内部バス比較 へ進む