2021/05/29(土)LPC551x/S1xのエラッタ
参照: LPC55S1x/LPC551x Errata sheet R1.4 NXP April 29, 2021 *1
Errata Rev1.4
ROM.1 (20191204)
ROM fails to enter ISP mode when image is corrupted with flash pages in an erased or unprogrammed state
フラッシュページが消去された状態やプログラムされていない状態でイメージが破損した場合、ROMがISPモードに移行しない
はじめに
LPC55S1x/LPC551xでは、フラッシュページが消去された状態やプログラムされていない状態でイメージが破損すると、ROMが自動的にISPモードに入らないことがあります。
問題点
CMPAでセキュアブートが有効になっている場合、イメージヘッダのイメージサイズフィールドで指定されたフラッシュメモリ領域内に、消去された状態またはプログラムされていない状態のメモリページが含まれていると、デバイスがフォールバック機構を使用して自動的にISPモードに移行しないという問題がありました。この問題は、アプリケーションイメージが部分的にしか書き込まれていない、または消去されているにもかかわらず、有効なイメージヘッダがメモリ内に残っている場合に発生します。
回避方法
次のいずれかの方法でマス・イレーズを行い、不完全で破損したイメージを削除します。
- Debug Mailboxを使ってeraseコマンドを実行する。Mailboxを終了すると、デバイスは直接ISPモードに入ります。
- Debug MailboxからコマンドでISPモードに入り、flash-eraseコマンドを使用する。
- ISP端子を使用してデバイスをリセットし、ISPモードに入る。flash-eraseコマンドを使用して、破損した(不完全な)イメージを消去してください。
USB.1 (20191204)
HS host fails when connecting with the LS device (mouse) Introduction
LSデバイス(マウス)との接続でHSホストが失敗する
はじめに
USB1 High-Speedコントローラは、一部のLPC55S1x/LPC551xデバイスに搭載されており、3種類の異なるデータ速度で周辺機器をホストにプラグアンドプレイで接続することができます。
- 480Mbpsのデータレートを持つハイスピード
- 12Mbpsのフルスピード
- 1.5Mbpsのロースピード
多くのポータブルデバイスは、ホストPCを介さずにUSBインターフェースを介して相互に通信することができます。
問題点
Low-Speedデバイス(マウス)との接続でUSB High-Speedホストが失敗する。
回避方法
Full-SpeedおよびLow-Speedアプリケーションをサポートするために、デバイスまたはホストにUSB0 Full-SpeedポートとUSB1 High-Speedポートを使用することをお勧めします。そのうえで、USB High-SpeedホストでLow-Speedデバイスをサポートする必要があるアプリケーションでは、USB1ポートと外部USBデバイスの間にUSBハブを挿入することで対応できます。
USB.2 (20191204)
Automatic USB rate adjustment is not functional when using multiple hubs
(割愛)
USB.3 (20201214)
For the USB high-speed device controller, the detection handshaking fails when certain full-speed hubs are connected
(割愛)
USB.4 (20210225)
In USB high-speed device mode, device writes extra byte(s) to the buffer if the NBytes is not multiple of 8 for OUT transfer
USB高速デバイスモードでは、OUT転送時にNBytesが8の倍数でない場合、デバイスはバッファに余分なバイトを書き込む
はじめに
LPC55S1x/LPC551xデバイスファミリには、ハイスピード・デバイス・モードで動作可能なUSB HSインターフェイス(USB1)が搭載されています。NBytesの値は、バッファに受信できるバイト数を表します。
問題点
LPC55S1x/LPC551xのUSBデバイス・コントローラは、常に8バイトを書き込むため、転送サイズが8バイトの倍数でない場合、受信データバッファに余分なバイトを書き込みます。例えば、転送の長さが1バイトの場合、7バイトが受信データバッファに追加で書き込まれます。また、転送長が7バイトの場合、受信データバッファに1バイト余分に書き込まれます。
回避方法
アプリケーションで使用しているUSBデータ用のバッファとは別に、中間バッファを用意してください。中間バッファへのUSBデータの転送が完了した後、memcpyを使用して中間バッファからアプリケーションバッファにデータを移動し、余分な1バイトをスキップします。このソフトウェアによる回避策はSDKプラットフォームに実装されています。
USB.5 (20210423)
In USB high-speed device mode, when device isochronous IN endpoint sends a packet of MaxPacketSize of 1024 bytes in response to IN token from host, the isochronous IN endpoint interrupt is not set and the endpoint command/status list entry for the isochronous IN endpoint is not updated
USB高速デバイスモードで、デバイスのアイソクロナスINエンドポイントがホストからのINトークンに応答してMaxPacketSizeが1024バイトのパケットを送信すると、INエンドポイントの割り込みが設定されず、アイソクロナスINエンドポイントのエンドポイントコマンド/ステータスリストのエントリが更新されないという問題がある
はじめに
LPC55S1x/LPC551xデバイスファミリには、ハイスピード・デバイス・モードで動作可能なUSB HSインターフェイス(USB1)が搭載されています。Isochronous INエンドポイントは、1024バイトのMaxPacketSizeをサポートしています。
問題点
デバイスのIsochronous INエンドポイントがホストからのINトークンに応答してMaxPacketSizeが1024バイトのパケットを送信すると、Isochronous INエンドポイントの割り込みが設定されず、Isochronous INエンドポイントのエンドポイントコマンド/ステータスリストのエントリが更新されません。
回避方法
デバイス記述子で、Isochronous INエンドポイントのMaxPacketSizeを1023バイトに制限してください。
USB.6 (20210423)
In USB high-speed host mode, only one transaction per micro-frame is allowed for isochronous IN endpoints
USB高速ホストモードでは、アイソクロナスのINエンドポイントではマイクロフレームあたり1つのトランザクションしか許可されない
はじめに
LPC55S1x/LPC551xデバイスファミリには、ホスト・モードで動作可能なUSBハイスピード・インターフェイスが搭載されています。高帯域幅のエンドポイントをサポートするために、1つのマイクロフレームで最大3つの高速トランザクションが許可されます。このモードは、PTD(Proprietary Transfer Descriptor)のMult(Multiple)フィールドを設定することで有効になり、マイクロフレームごとに実行されるべきトランザクションの数をホストコントローラに示すために使用されます。許可されるビット設定は以下の通りです。
- 00b 予約。このフィールドに0を入力すると、未定義の結果になります。
- 01b マイクロフレームごとに、このエンドポイントに対して1つのトランザクションを発行する。
- 10b マイクロフレームごとに、このエンドポイントに対して2つのトランザクションを発行する。
- 11b マイクロフレームごとに、このエンドポイントに対して3つのトランザクションを発行する。
問題点
高帯域幅モードでは、フレーム内に複数のパケット(MULT = 10b または 11b)を使用すると、信頼性の低い動作になります。マイクロフレームあたり1つのトランザクション(MULT = 01b)しか発行できません。
回避方法
ソフトウェアによる回避策はありません。1マイクロフレームあたり1つのトランザクションしか発行できません。
2021/05/28(金)LPC55xx : Flexcomm Interface serial communication
参照: NXP LPC55S1x PDS R1.5, 7.24.3節、
LPC55S2x PDS R2.0, 7.23.3節 *1
適用: NXP EdgeVerse LPC MCUs:
LPC55S16, LPC5516
LPC55S14, LPC5514
LPC5512
LPC55S28, LPC5528
LPC55S26, LPC5526
適用デバイス
本記事は、LPC551x/S1xのデータシートを元に作成しています。また、本節の範囲においてはLPC552x/S2xのデータシートとは仕様の細部が異なるだけであることから、LPC551x/S1xのそれとの差分のみを提供します。LPC55S2xのLPC55S1xとの違い
I2Sのチャネルペアの個数の違い
- LPC55S1x/LPC551xデバイスは、Flexcomm Interface 0~5はそれぞれ1チャネルペアのI2Sを提供し、Flexcomm Interface 6~7はそれぞれ4チャネルペアのI2Sを提供します。
- LPC55S2x/LPC552xデバイスは、Flexcomm Interface 0~7はそれぞれ1チャネルペアのI2Sを提供します。
Flexcomm Interface serial communication
各Flexcomm Interfaceには、ペリフェラル機能の選択肢がありますが、そのうちの一つをユーザーが選択しなければ、その機能を設定して使用することはできません。Features
- 非同期、同期マスタ、または同期スレーブ動作のUSART
- 最大4つのスレーブセレクトが可能なSPIマスタ、またはSPIスレーブ
- I2C(マスタ、スレーブ、モニタの各機能を含む)
- Flexcomm Interface 0~5はそれぞれ1チャネルペアのI2Sを提供し、Flexcomm Interface 6~7はそれぞれ4チャネルペアのI2Sを提供します。
- USART、SPI、I2Sのトラフィックデータは、Flexcomm FIFOを使用します。I2C機能はFIFOを使用しません。
SPI serial I/O (SPIO) controller
Features
- SPIマスタモード(送受信)で50Mbit/s、SPIスレーブ受信モードで25Mbit/s、SPIスレーブ送信モードで50Mbit/sまでのビットレートに対応します。
- マスタまたはスレーブ動作
- 4~16ビットのデータフレームを直接サポート。より大きなフレームはソフトウェアでサポート。
- SPI機能では、それぞれ8エントリの独立した送信および受信FIFOのサポートがあります。
- DMA転送に対応 : SPInの送受信機能はシステムのDMAコントローラと連動しています。
- 到着するデータを読み出すことなく、スレーブにデータを送信することができます。この機能はSPIメモリの設定時に役立ちます。
- 最大4つのスレーブセレクト入出力は、極性を選択でき、使い方も自由自在です。
I2C-bus interface
(割愛)USART
Features
- Maximum bitrates of 6.25Mbit/s in asynchronous mode and 10Mbit/s in synchronous mode for USART functions.
- 7, 8, or 9 data bits and 1 or 2 stop bits.
- マスタまたはスレーブで動作する同期モード。連続クロックオプション付き。
- ソフトウェアアドレス比較によるマルチプロセッサ/マルチドロップ(9ビット)モード
- RS-485トランシーバの出力イネーブル制御
- ボーレートを自動検出するAutobaudモード
- Parity generation and checking: odd, even, or none.
- ソフトウェアで選択可能なオーバーサンプリング : 5~16クロック(非同期モード)
- 1つの送信データバッファと1つの受信データバッファ
- 自動フロー制御のためのハードウェア信号にRTS/CTSを採用。ソフトウェアによるフロー制御は、Delta CTS検出、Transmit Disable制御、および任意のGPIOをRTS出力として使用して行うことができます。
- Received data and status can optionally be read from a single register
- ブレークの生成と検出
- 受信データは3つのサンプルのうちの2つの「投票」です。1つのサンプルが異なる場合、ステータスフラグが設定されます。
- Autobaud機能付きのボーレート生成器を内蔵
- FRD(フラクショナル・レート・ディバイダ)は、すべてのUSARTで共有されます。
- Receiver Ready、Transmitter Ready、Receiver Idle、受信ブレーク検出の変化、フレーミングエラー、パリティエラー、Overrun、Underrun、Delta CTS検出、受信サンプルノイズ検出のための割り込みが利用可能。
- ループバックモードでは、データおよびフローコントロールのテストが可能です。
- 同期式スレーブモードでは、ディープスリープおよびディープスリープ2モードからの復帰が可能です。
- 特別な動作モードでは、32.768kHzのRTC発振器をUARTクロックとして使用し、最大9600ボーでの動作が可能です。このモードはデバイスがディープスリープ状態にあるときに使用でき、文字を受信したときにデバイスを復帰させることができます。
- USARTの送受信機能は、システムのDMAコントローラと連動しています。
- USART機能は、それぞれ16エントリの独立した送信および受信FIFOのサポートがあります。
I2S-bus interface
I2Sバスは、デジタルオーディオやデータ収集などのストリーミングデータ転送アプリケーション向けの標準的な通信インターフェースを提供します。I2Sバスの仕様は1つのデータ、1つのクロック、1つのワードセレクト/フレームトリガ信号を持つ3線式シリアルバスを定義しており、シングルまたはデュアル(モノラルまたはステレオ)のオーディオデータ転送を(他の構成に加えて)提供します。Flexcomm Interface 0~5にはそれぞれ1つのI2Sチャネルペアが、Flexcomm Interface 6~7にはそれぞれ4つのI2Sチャネルペアが実装されています。1つのFlexcomm Interface内のI2Sインターフェースは、1つのマスタまたはスレーブとして構成可能なチャネルペアを提供します。残りのチャネルペアは、存在する場合、常にスレーブとして動作します。1つのFlexcomm Interface内の全てのチャネルペアは、1組のI2S信号を共有し、同じモード、同じフレーム構成を使用して、送信または受信のいずれかの動作のために一緒に構成されます。このようなチャネルペアはすべて、時分割多重化(TDM)に携わることができます。MCLKの入力や出力が必要な場合は、I2Sブロックの外でシステムレベルのクロックスキームで処理されます。
Features
- Flexcomm Interfaceは、1つ以上のI2Sチャネルペアを実装し、最初のチャネルペアはマスタまたはスレーブ、残りのチャネルペアはスレーブとなります。すべてのチャネルペアは、送信または受信のいずれか、およびその他の共有属性について一緒に設定されます。
- 1つのFlexcomm Interface内の全チャネルのデータサイズは、4ビットから32ビットまで設定可能です。各チャネルペアは独立して1つのチャネルとして動作するように設定することもできます(ステレオ動作ではなくモノラル動作)。
- 1つのFlexcomm Interface内のすべてのチャネルペアは、シングルビットクロック(SCK)、ワードセレクト/フレームトリガ(WS)、データライン(SDA)を共有します。
- 1つのFlexcomm Interface内のすべてのI2Sトラフィックのデータは、Flexcomm FIFOを使用します。FIFOの深さは8エントリです。
- 左詰め、右詰めのデータモード
- FIFOのレベルトリガを使用したDMAに対応
- 複数のステレオやモノラルスロットを持つTDMをサポート。各チャネルペアは任意のデータスロットとして振る舞います。複数のチャネルペアが1本のTDMデータラインの異なるスロットとして参加できます。
- 選択によってビットクロックとWSを反転させることができます。
- 対応するサンプリング周波数は、デバイスの構成やアプリケーションの制約(システムクロックの周波数やPLLの有無など)によって異なりますが、一般的には標準的なオーディオデータレートに対応しています。
High-speed SPI serial I/O controller
Features
- マスタまたはスレーブ動作
- SPIマスタモード(送受信)で50Mbit/s、スレーブモード(送受信)で50Mbit/sまでのビットレートに対応します。
- 4~16ビットのデータフレームを直接サポート。より大きなフレームはソフトウェアでサポート。
- SPI機能では、それぞれ8エントリの独立した送信および受信FIFOのサポートがあります。
- DMA転送に対応 : SPInの送受信機能はシステムのDMAコントローラと連動しています。
- 到着するデータを読み出すことなく、スレーブにデータを送信することができます。この機能はSPIメモリの設定時に役立ちます。
- 最大4つのスレーブセレクト入出力は、極性を選択でき、使い方も自由自在です。
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フィールドの値は、証明書を格納するオフセットを指します。