前回はクロックでした、今回はリセットです。クロックとかリセットとか一番最初にやるでしょ、というところ。PicoとPico2を調べ始めた最初の方で外部端子ということでちょいと触れていたので詳細は後回しになってました。しかしPico2はPicoの方式を踏襲して拡張してますがケッコー複雑。元のPicoから複雑だと。
※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。
※Raspberry Pi Pico、Raspberry Pi Pico2のデータシートは、以下からダウンロードできます。
3段階のRESET
旧態依然としたマイクロコントローラであれば、RESETなど1本の信号でハードウエア各部を初期化して既知の状態にする信号ですが、モダーンで過激なPicoとPico2においてはそんな単純なものじゃございません。
まずはResetにも3レベルあり、ということで以下の分類があります。
-
- Chip Level Resets
- System Resets
- Subsystem Resets
1のChip Level Resetsこそは、ホンマもののガチなハードウエアのRESET信号でハードウエアを初期化する信号が含まれております。これが多少複雑になるのは、これにトリガかけるための信号の要因が結構多岐にわたるためであります。
2のSystem Resetsは、ガチなRESET信号がインアクティブになった後にその活躍の場が広がってます。電源やクロック源を起動し、プロセッサコアが走れるように準備を終えてから、先生どうぞ、という塩梅で、プロセッサコアに御出馬いただくという段取り。どちらもPower-on State Machine(PSM)が制御するのですがレベルは段違いです。
PicoのRP2040ではPSMのお役目はクロックを起動し、安定したらばコアの動作を抑えているReset信号を外すシンプルなシーケンサみたいです。
一方、Pico2のRP2350では、セキュリティもありコアが2種類もあり一筋縄ではいきませぬ。OTPブロックがあり、OTPブロック内にプロセッサとは異なる専用のステートマシンが存在します。ここでセキュリティも担うのでプロセッサコア起動前に各種の設定などいろいろ行ってから、必要なプロセッサコアを起動することになります。この辺は依然OTPとかを調べた回で見たとおりです。
3のSybsystem Resetsは、プロセッサコアが起動後にソフトウエアでも制御できる部分なので、各周辺回路毎の初期化といえるんじゃないかと思います。今回はこの部分には踏み込みませぬ。
Chip Level Resets
Chip Level Resetsのザックリした比較表が以下に。ザックリというのはコマケー話が一杯なので、かなりネグった表ってこってす。
Chip Level Reset SRC | RP2040 | RP2350 |
---|---|---|
Power-on | 0.924~0.99V | 0.924~0.99V |
Brown-out | Programable 0.473~1.118V (16 levels) | Programable 0.473~1.204V (18 levels) |
Glitch | No | Yes |
Watchdog | No* | Yes |
RUN pin | Yes | Yes |
Rescue DP | Yes | Yes |
Debugger REQ | No | Yes |
SWCORE | No | Yes |
RISC-V Non-Debug-Module Reset | No | Yes |
Power-on リセットは、コールドスタート(電源OFF状態からONになってのスタート)時に、デジタル回路の電源電圧が動作可能になるまでの間、不用意にロジックが動作しないように「抑えておく」ためのリセット信号です。上記の欄に書かれている電圧は電源電圧がこの電圧を超えるまでリセットがかかっていることになります。なお、この回路は電圧が下から上へあがるときに働きますが、上から下へ落ちるときには動作しないみたいです。
Bown-outリセットは、上記の電源電圧が上から下に落ちるときに、なにか変な動作をしないためのリセット信号です。レジスタに値を書き込むことでプログラマブルな電圧以下に落ちるとリセットがかかり不正動作を防ぐ仕組みです。
Glitchリセットは、クロック信号を見張っていて、不正な細いクロックなどが入力された場合にリセットをかけて誤動作を防ぐ仕組みのようです。RP2350での新設なのでRP2040では不在。
(*) Watchdogリセットは、Watchdogタイマによるリセットです。RP2040の場合、後に述べるSystem ResetsやSubsystem Resetsをかけることはできますが、Chip Levelリセットはかけられないので、ここではNoとなってます。RP2350では、Chip LevelリセットもかけられるようになったのでYesです。
RUNピンは、皆大好きPico/Pico2ボードの足に出ている外部RESET信号です。普通のマイコンではRESET信号として、なんらかの信号を与える必要がありますが、Pico/Pico2では未接続で放置しても問題ない端子となってます。RESETかけるときはLowを印加。
Rescue DPの、DPはデバッグポートです。デバッグインタフェースに戻ってきてくんしゃい、というときに印加する信号みたいっす。
Debugger REQは、デバッグ用のRESET信号ですが、デバッガ側からチップ側にリセットかけたい、というときに使う機能のようです。RP2040ではなくRP2350での新設。
SWCOREは、コアをスイッチするためのRESET信号です。RP2350では、Arm Cortex M33とRISC-Vの2種のコアを搭載し、コアを切り替える際にはRESETかけることになっているので、その信号みたいっす。当然Arm一択のRP2040ではありませぬ。
RISC-V Non-Debug-Module Resetは、RISC‐Vコアを走らせているときにRISC-VコアにRESETかけるために使うためのものらしいです。詳細はまた後でだな。
また、それぞれのRESET要因がなんであったか記録しておくために、CHIP_RESET Registerというものが存在しますが、RP2040ではLDO_PORブロック内にあるようですが、RP2350では電源ドメインが導入されたのでAON(常時電源オン)ドメイン側に移動させられています。
RESET信号の行先
RESET信号の行先についても簡単にまとめました。
Reset DST | RP2040 | RP2350 |
---|---|---|
main body | Yes | Yes |
DP | Yes | Yes |
Power management | No | Yes |
RP2040では、本体回路側とデバッグポートと行先は2つ(それぞれ独立制御)だったのですが、RP2350ではもう一つパワーマネジメントブロックが追加されてます。これは先ほど述べたとおり、電源ドメインに対応するためかと。