STM32F7 PWR(電源管理)

ここ最近はひたすらSTM32F7のリファレンスマニュアル(RM0410 Rev4)を読んで基本的なペリフェラルの動作を確認していた。せっかくなのでここに分かったことを書いていこうと思う。まずは電源管理のペリフェラルから。ただの電源だと思ったがこれが意外と複雑で高機能だった。これがSTM32マイコンの良さでもあるようなのだが。

基本事項

STM32F7はVddピンから供給される電源によって動作する。マイコン内部には1.2Vを発生させるレギュレータが内蔵されており、デジタル部はここから出力される電源によって動作する。この内蔵レギュレータのためにVcap1ピンとVcap2ピンのはセラコンを接続しなければならない。

Vdda、VssaピンはAD変換回路のための電源であり、Vssaピンはフィルタを設置できるように他のGNDピンから絶縁されている。VrefピンはAD変換の基準電圧となり、Vddピンとは異なる電圧を入力することができる(ただし、1.8V~Vddピンの電圧まで)。

他にもUSBとSDMMC、DSIのペリフェラルについては専用の電源ピンが存在する。

バックアップドメイン

バックアップドメインの定義が曖昧だがRM0410のP122にはRTCレジスタ、RTCバックアップレジスタ、バックアップSRAMと書かれているのでRTCの機能とバックアップSRAMと考えれば良さそうである。これらはVbatピンに電源が供給されていればVddピンに電源が供給されなくなっても動作し続けることができる。
こういった使い方をしない場合はVbatピンにVddと同じ電源を供給し、0.1μFのセラコンを近くに接続しておく。
Vbatピンからのみ電源を供給された状態でも使えるIOポートは以下の通り。

ポート機能
PC13タンパーピン
PC14LSE(低速外部クロック供給)
PC15LSE(低速外部クロック供給)
PI8タンパーピン

タンパーピンとはハッキング検知をするためのピンのことであり、例えばマイコンが収められた筐体が開けられた場合に立ち上がり、あるいは立ち下りエッジがタンパーピンに入力されるようにしておくとマイコンがそれを認識してバックアップSRAMの内容を読み込みできないような状態に入り、解析されないようにする……といった使い方ができる。

マイコンのリセット直後はバックアップドメインとPWR_CSR1レジスタのBREビットに対して書込み保護がかけられており、これを解除しないと書き込みができない。解除手順はRM0410のP122に書かれている。

内蔵レギュレータと動作モード

内蔵されたレギュレータにはメインレギュレータとローパワーレギュレータの2つがあり、3つの動作モードがある。

RUNモード、SLEEPモード

マイコンはメインレギュレータによって動作する。
PWR_CR1レジスタのVOSビットによってレギュレータの出力をスケールすることができる(スケールというのがどういう意味なのかよく分からないが、出力を変更できるということだけ分かっておけば良さそう)。

PLLが無効の時にのみスケールを変更することができ、スケール1からスケール3まで設定できる。PLLが無効の時は強制的にスケール3に設定され、PLLが有効になった際に選択したスケールに変更される。つまり基本的にはクロックの設定を行う前にレギュレータのスケール設定を行わなければならないようだ。

RUNモードの中にはさらにノーマルモードとオーバードライブモードの2つの動作モードがあり、以下のようにスケールとの組み合わせでマイコンが動作できる最大クロックが決まる。

スケールノーマルモードオーバードライブモード
1180MHz216MHz
2168MHz180MHz
3144MHz144MHz

STM32F7は最大で216MHzで動作できるマイコンだが、上の表から分かる通り180MHz以上で動作させるためにはオーバードライブモードにする必要がある。ただし、Vddピンから供給される電圧が2.1V未満の場合はオーバードライブモードに設定にできないのでマイコンを180MHz以上で動作させることはできない。
オーバードライブモードに設定する方法はRM0410 P125に記載されている。

STOPモード

マイコンはメインレギュレータ、あるいはローパワーレギュレータのいずれかによって動作する。
STOPモードの中にはさらにノーマルモードとアンダードライブモード(ローパワーモードとも言うらしい)の2つの動作モードがある。
使う予定が無いのであまり詳しく調べていない。

STANDBYモード

レギュレータは動作を停止し、バックアップドメイン以外は動作を停止してレジスタやRAMの情報も失われる。

まとめ

電源については動作モードが色々あって分かりにくいので以下の表に少しだけまとめてみた。個人的にはRUNモードしか使う予定が無いのでそれ以外の省電力モードについてはあまり詳しく調べていない。

モード動作詳細
RUN通常動作RM0410 P132
SLEEPCortexコアは動作停止、ペリフェラルは動作を継続RM0410 P133
STOPCortexコアは動作停止、ペリフェラルもバックアップドメインを除いて動作を停止RM0410 P135
STANDBYマイコン内部のデジタル回路部への電源供給を停止、Vbatピンに電源が供給されている場合はバックアップドメインにのみ電源が供給され、動作を継続するRM0410 P138

なお、STOPモード、STANDBYモードからはRTCによってRUNモードに復帰することができるようだ。詳しくはRM0410 P139に書かれている。

電源電圧とリセット

パワーオンリセット

マイコンに電源が供給された場合、オプションバイトレジスタで設定したブラウンアウトレベルに従って既定の電圧に達するまでの間リセット状態が維持される。ブラウンアウトが無効に設定されている場合はPOR/PDRのレベルによってリセット状態が維持される。POR/PDRの具体的な電圧については各マイコンのデータシートに載っている(リファレンスマニュアルではなくデータシートである点に注意)

低電圧検出

電源電圧がマイコンが安定して動作できないレベルまで変化してきた場合にそれを検出する機能としてPVD(Programmable Voltage Detector)がある。
電源電圧が2.1V~2.9V(PWR_CR1レジスタのPLSビットによって設定できる)を下回る、あるいは上回るとPVD出力がされる。この出力はEXTI16に接続されており、外部割込みを発生させることができる。電源電圧が下がってきた場合に大事な情報を保存してシャットダウンに備えるといった使い方が想定される。
このとき、SYSCFG_CBRレジスタのPVDLビットにてPVD割込み(EXTI16割込み)の発生と同時にタイマー1、およびタイマー8にブレークイベントを送るか選択できる。タイマー1とタイマー8はモータ駆動用などに使うことが想定されているので不意な動作を予防するための機能だろう。

デバッグ

RUNモード以外ではCoretexコアが動作を停止するため、それに伴ってデバッガの接続もできなくなるが、DBGMCU_CRレジスタのDBG_SLEEPビット、およびDBG_SLOPビットをセットすることでこれらのモード中でもデバッグが可能になる。STANDBYモードではデバッガを接続することはできないようだ。
詳しくはRM0410 P132、P1925を参照。