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を参照してください。
Boot mode | ISP0 (PIO0_5) | Description |
---|---|---|
Passive boot | HIGH | The 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 boot | LOW | One 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. |
ISP Boot mode | ISP_MODE | Description |
---|---|---|
Auto ISP | 000 | The 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 ISP | 001 | The USB HID class is used to download image of the USB0/1 port. (HS-USB is the default USB port). |
UART ISP | 010 | The UART is used to download the image. |
SPI Slave ISP | 011 | The SPI slave is used to download the image. |
I2C Slave ISP | 100 | The I2C slave is used to download the image. |
Disable ISP | 111 | Disable 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イメージタイプを検証します。
CRCイメージであれば、imageLengthフィールドの値がCRC ONを行うための長さとして使用されます。表192を参照してください。CRCは内蔵フラッシュのイメージに対して実行されます。CRCの計算は、イメージセクタの先頭からオフセット0x0で始まり、長さで指定されたバイト数まで続きます。この長さにはCRC値フィールドを構成するoffsetToSpecificHeaderフィールドが含まれていないため、計算されたCRCはCRC値フィールドをスキップすることになります。その結果を構造体のoffsetToSpecificHeaderエントリと比較し、一致するものがあればイメージは有効、そうでなければ無効と判断されます。CRCイメージでない場合は、CRCは実行されません。
署名付きイメージの場合は、imageLengthフィールドの値が認証を行う長さとして使用されます。認証は内蔵フラッシュのイメージに対して行われます。認証はイメージセクタの先頭からオフセット0x0で始まり、lengthで指定されたバイト数まで続きます。offsetToSpecificHeaderフィールドの値は、証明書を格納するオフセットを指します。