2021/05/13(木)LPC55xx : Boot ROM

参照: NXP LPC55S1x RM R1.3, 6.2~6.3節 *1

Features

様々なブートオプションやAPIを可能にするブートローダを搭載した128kBのオンチップブートROM。
  • ISPピンやPFR領域のCMPA設定に基づいて(9章「LPC55S1x/LPC551x Flash API」参照)、内蔵フラッシュからの自動ブートをサポートします。
  • IAPの呼び出し。8章「LPC55S1x/LPC551x ISP and IAP」を参照してください。
  • 内蔵フラッシュをプログラミングするための FLASH API。5章「LPC55S1x/LPC551x Flash」を参照してください。
  • 1ビットSPIフラッシュデバイスからのSPIフラッシュリカバリブートをサポートします。詳細は6.4.3項を参照してください。

General description

内蔵ROMメモリはブートコードの格納に使用されます。リセット後、Armプロセッサはこのメモリからコードの実行を開始します。ブートローダのコードは、電源投入時、リセット時、低電力モードのディープパワーダウンからのWake時に毎回実行されます。

LPC55S1x/LPC551xはコードとデータの保存用に内蔵フラッシュを備えているため、イメージは内蔵フラッシュに保存する必要があります。その後、コードが検証され、ブートROMのベクタがオンチップフラッシュに移されます。

CMPAビットの値、ISPピン、およびイメージヘッダタイプの定義に応じて、ブートローダは内蔵フラッシュから起動するか、ISPモードで実行するかを決定します。6.5節「PFR region definitions」を参照してください。LPC55S1x/LPC551xは、ISPピンの状態を読み込んでブートソースを決定します。表189を参照してください。
表189 Boot mode and ISP download modes based on ISP pins
Boot modeISP0 (PIO0_5)Description
Passive bootHIGHThe LPC55S1x/LPC551x will look for valid image in the internal flash, if no valid image is found, the LPC55S1x/LPC551x will enter ISP boot mode based on DEFAULT_ISP_MODE bits.
ISP bootLOWOne of the serial interfaces (UART0, I2C1, SPI3, HS_SPI, USB0-FS, USB1-HS) is used to download image from host into internal flash. The first valid probe message on USART, I2C, SPI or USB locks in that interface.

表190 ISP download mode based on DEFAULT_ISP_MODE bits (6:4, word 0 in CMPA)
ISP Boot modeISP_MODEDescription
Auto ISP000The LPC55S1x/LPC551x probes the active peripheral from one of below serial interfaces, and download image from the probed peripherals: UART0, I2C1, SPI3, HS_SPI, USB0-FS or USB1-HS.
USB HID ISP001The USB HID class is used to download image of the USB0/1 port. (HS-USB is the default USB port).
UART ISP010The UART is used to download the image.
SPI Slave ISP011The SPI slave is used to download the image.
I2C Slave ISP100The I2C slave is used to download the image.
Disable ISP111Disable ISP mode.

表191にISPのピンアサインを示しますが、これはROMコードで使用されるデフォルトのピンアサインであり、変更することはできません。

(表191、表192、図8は割愛)

図8にトップレベルのブート処理を示します。リセットが解除された後にブートが開始されます。

CPUのクロックは96MHzのFROをベースに48MHzとなっています。Cortex-M33がブートローダを起動するとSWDアクセスが無効になるため、この間、デバッガはCPUに接続することができません。ブートROMはISPピンのリセット状態に基づいて、ブートモードを決定します。

ブートモードが決定され、イメージが内蔵フラッシュに存在すると、ブートローダはベクタテーブルとイメージヘッダの検証を行います。

ブートROMはイメージの有効性チェックのために以下のチェックを行います。
  • セキュアブートが有効な場合、ヘッダとCMPAの設定を使ってイメージを検証します。詳細は「Secure Boot」の章を参照してください。
  • セキュアブートが有効になっておらず、イメージヘッダでCRCチェックが有効になっている場合は、CRC32を使用してイメージを検証します。
  • 認証チェックもCRCチェックも有効になっていない場合は、SPとPCを検証します。
  • 基本的なイメージチェックに合格した場合、TZMイメージタイプを検証します。
イメージの先頭は、表192に記載されているフォーマットに従います。ブートローダは0x0000 0024にあるイメージタイプマーカを調べて、ユーザーイメージのスキャンを開始します。この値がサポートされているイメージタイプマーカと一致した場合、イメージヘッダの検証が始まります。イメージヘッダの検証が完了すると、TZMイメージタイプフィールドの検証が行われます。

CRCイメージであれば、imageLengthフィールドの値がCRC ONを行うための長さとして使用されます。表192を参照してください。CRCは内蔵フラッシュのイメージに対して実行されます。CRCの計算は、イメージセクタの先頭からオフセット0x0で始まり、長さで指定されたバイト数まで続きます。この長さにはCRC値フィールドを構成するoffsetToSpecificHeaderフィールドが含まれていないため、計算されたCRCはCRC値フィールドをスキップすることになります。その結果を構造体のoffsetToSpecificHeaderエントリと比較し、一致するものがあればイメージは有効、そうでなければ無効と判断されます。CRCイメージでない場合は、CRCは実行されません。

署名付きイメージの場合は、imageLengthフィールドの値が認証を行う長さとして使用されます。認証は内蔵フラッシュのイメージに対して行われます。認証はイメージセクタの先頭からオフセット0x0で始まり、lengthで指定されたバイト数まで続きます。offsetToSpecificHeaderフィールドの値は、証明書を格納するオフセットを指します。

*1 : この記事は筆者が私的利用のためにReference Manualを抜粋、翻訳したものです。いかなる問題に対しても責任は負いません。