STM32F4ブートの概念とベクターテーブルの再配置


8

STM32F4マイクロコントローラーの起動プロセスで理解できないことがいくつかあります。

私の理解は次のとおりです。

  1. ARMのCortex-M4のブーツは、スタックポインタの初期化値との割り込みベクタを期待0x00000000 + SCB->VTORに対し、SCB->VTORリセット時にクリアされます。
  2. その場所にはメモリがありません。フラッシュメモリは0x08000000、SRAMはから始まり0x20000000ます。
  3. ブートを可能にするために、µCはフラッシュまたはSRAMメモリ範囲をにマップできます0x00000000。マップされるメモリ範囲は、ブートピンの状態によって定義されます。

私の質問:

  1. STM32F4リファレンスマニュアルの69ページ

    デバイスがSRAMから起動する場合、アプリケーションの初期化コードで、NVIC例外テーブルとオフセットレジスタを使用して、SRAMのベクターテーブルを再配置する必要があります。

    ?私の見解では、メモリ領域全体がとにかくエイリアスされているため、これは必要ありません。興味深いことに、これはフラッシュ領域が0x0スペースに再マップされる場合は必要ないようです。

  2. SRAMからの起動の唯一の用途は、開発中のフラッシュの書き込みサイクルを減らすことだと私が考えることができます。µCをリセットから解放する前に、デバッガを使用してプログラムをSRAMに書き込み、そこから起動します。ただし、デバッガーにアクセスできるので、どこから起動するかについて制約はありません。では、なぜこの機能があるのでしょうか。

    ブート位置がピンから派生していることは、(少なくとも私の意見では)この機能が開発中ではなく最終的な操作で使用されることを示しています。そして最後の操作では、SRAMは起動時にクリアされます。したがって、SRAMから起動しても意味がありません。


ファームウェアの更新を実行するために、RAMから起動することができます。RAMコードが実行され、フラッシュメモリの内容が再フラッシュされます。更新が完了したら、フラッシュからもう一度実行をリセットします。
Panagiotopoulos

回答:


5

質問1:

最初の質問には間違いなく答えられません。しかし、VTORレジスターが記載されているプログラミングマニュアル(212ページ)では、ビット29を使用して、コード領域(0)またはSRAM領域(1)のいずれかでベクトルテーブルが配置される場所を決定します。

あなたが述べたのと同じ理由でこれを行う必要がある理由がわかりません、SRAMは0x0にエイリアスされるので、なぜこのオフセットを設定する必要があるのですか?

私の唯一の推測は引用された69ページに記載されています。

コード領域はアドレス0x0000 0000から始まります(ICode / DCodeバスを介してアクセスされます)

データ領域(SRAM)はアドレス0x2000 0000から始まります(システムバスを介してアクセスされます)

FPU CPUを搭載したCortex®-M4は常にICodeバスでリセットベクタをフェッチします

おそらく、割り込み時にICodeバスが使用されます。これは、再マップされてもSRAMにアクセスできません(これが真であるかどうかはわかりません)。これは、このビットをそれに応じて設定する必要がある理由を説明し、システムバスを使用してSRAMにアクセスするようにコアに指示します。

質問2:

デバイスの最初の起動時にSRAMが空であることは事実かもしれませんが、それ以降の起動では必ずしもそうではありません。そのため、製造中にSRAMをプログラムし、バッテリーがなくなるまで実行されるバッテリー駆動デバイスのようなものを作成し、SRAMをクリアすることができます。これは、デバイスのリバースエンジニアリングを少し難しくすると思います。

バッテリ駆動のデバイスでは、おそらくスタンバイモードを使用して電力を節約します。そのモードを終了すると、ブートピンが再度サンプリングされるため、SRAMに再度アクセスするには正しい設定にする必要があります。

SRAMの内容は電力の供給がない場合に破壊されないため、デバイスを安全に再起動することもできます。

SRAMを再マップするためのすべての問題を修正するための非常に説得力のあるアプリケーションではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.