2156007_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2156007_ja-JP

2156007_ja-JP

RT1170 FLexSPI (NOR) 構成 - フラッシュとブート

こんにちは、皆さん。

i.MX RT1170 をベースにしたカスタム ボードの導入を準備中です。MCU には、セカンダリ FlexSPI インターフェース、セカンダリ ピン グループを介して、Micron MT25QL02GCBB QSPI NOR フラッシュが搭載されています。デバッグの目的で MCU-Link デバッグ プローブを接続する予定であり、最終目標は Zephyr RTOS をオペレーティング システムとして実行することです。


PRM に従って、特定のインターフェースと構成についてブート ROM に指示するために、BT_FUSE_SEL、FLEXSPI_INSTANCE、および FLEXSPI_PIN_GROUP のヒューズを焼き付ける予定です。

 
1170 EVKBがフラッシュされる方法と同様に、LinkServerを利用してEVK jsonファイル(/usr/local/LinkServer/devices/MIMXRT1170-EVKB.json)を観察します。MIMXRT1170_SFDP_QSPI.cfx フラッシュ ドライバ ファイルを参照します。NXP が提供する RT1170 用の QSPI および SFDP ベースのドライバを覗いてみましょう。
$ fd cfx /usr/local/LinkServer | rg 1170 | rg SFDP | rg QSPI
/usr/local/LinkServer/binaries/Flash/MIMXRT1170_FlexSPI2_A_SFDP_QSPI.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1170_SFDP_QSPI.cfx
 
後者は EVK に使用されているようです。リファレンス デザインと比較すると、私たちのデザインは FlexSPI インスタンス、ピン制御グループ、および特定の NOR フラッシュが異なります。問題は、これらの違いそれぞれによって、カスタム フラッシュ ドライバを開発して LinkServer に提供する必要が生じるかどうかです。RT1180 ドライバはより幅広い種類のドライバを提供していることに気づき、これらのいずれかを使用できるかどうか疑問に思いました。
$ fd cfx /usr/local/LinkServer | rg 1180 | rg SFDP | rg QSPI
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_A_QSPI.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_A_QSPI_S.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_B_QSPI.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI1_B_QSPI_S.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_A_QSPI.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_A_QSPI_S.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_B_QSPI.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_PriGr_B_QSPI_S.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_A_QSPI.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_A_QSPI_S.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_B_QSPI.cfx
/usr/local/LinkServer/binaries/Flash/MIMXRT1180_SFDP_FlexSPI2_SecGr_B_QSPI_S.cfx
 
フラッシュが最終的に成功すると仮定すると、ブート ROM によって解析される適切な FlexSPI 構成ブロックも提供する必要があります (EVK バリアントと同等: https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/nxp/mimxrt1170_evk/xip/evkbmimxrt1170_... )。これまでのところ、この構造の中で最も複雑な部分は LUT です。SFDP は NOR フラッシュでサポートされているので、これらは実際に初期の起動に必要なのでしょうか、それともパフォーマンスの最適化のためだけに必要なのでしょうか?既存の NXP Zephyr/MCUXpresso リポジトリのいずれかからこれらの LUT を見つけることができる可能性はありますか?
 
ありがとうございます
マーティン
Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

こんにちは@anbnさん


はい、その理解は正しいです!この GUI ビューは作業セットの一部であり、これを正しく設定してテスト ボタンをクリックすると、ROM がフラッシュの FCB からそのような情報を取得するのと同様に、ツールは検証のためにそのような情報を ROM に送信します。結果が良好であれば、それを完全な FCB に変換し、SPT がそれをフラッシュ上の FCB のスペースにプログラムし、さらに使用するためにローカル ドライブに bin ファイルとして保存します。


それが意味を成すといいのですが、


すてきな一日を、
カン


---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう!
- Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。
---------------------------------------------------------------------------------


Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

ボードはまだ届いていない。SO、少なくとも最小限の構成を十分に理解して、起動時間を最小限に抑えるようにしています。

基本を検証するために速度は必要ないため、シングル パッド SPI を使用するとセットアップも簡素化されます。

セキュア プロビジョニング ツールを備えた fcb を作成するには、物理ボード上で構成をテストする必要がありますか?

私は、データシートに一致するシングル パッド spi コマンドを使用して、この最小限の FCB を組み立てようとしました。

正常に動作するセットアップのように見えますか、それとも私が何かを誤解しているのでしょうか?
また、ブート ROM は SFDP を使用してこれらの設定を上書きしますか、それともコードのフラッシュ中に cfx ドライバに対してのみ使用されますか?

カスタムユニットを受け取るスケジュールが厳しいため、ご協力に大変感謝しています。

const flexspi_nor_config_t mt25ql_minimal_config = {
    .memConfig = {
        .tag = FLEXSPI_CFG_BLK_TAG,                     // Identifier for FCB
        .version = FLEXSPI_CFG_BLK_VERSION,             // FCB version

        // Use internal loopback for read sampling (no DQS pad)
        .readSampleClksrc=kFlexSpiReadSampleClk_InternalLoopback,

        .csHoldTime = 3,                                // Chip Select hold time
        .csSetupTime = 3,                               // Chip Select setup time

        // No device mode configuration (no QE bit needed)
        .deviceModeCfgEnable = 0,
        .deviceModeType = 0,
        .deviceModeSeq = {0, 0},
        .deviceModeArg = 0,

        .configCmdEnable = 0,                           // No extra config commands

        // Misc options:
        // - Bit 4: Enable second pinmux group
        .controllerMiscOption = (1 << kFlexSpiMiscOffset_SecondPinMux),

        .deviceType = kFlexSpiDeviceType_SerialNOR,     // Serial NOR flash
        .sflashPadType = kSerialFlash_1Pad,             // Standard SPI mode
        .serialClkFreq = kFlexSpiSerialClk_60MHz,       // 60 MHz clock

        .sflashA1Size = 256 * 1024 * 1024,              // 256 MiB flash size

        .dataValidTime = {16, 16},                      // Default timing
        .busyOffset = 0,                                // Status register offset
        .busyBitPolarity = 1,                           // Busy bit is active high

        // Lookup Table (LUT) for basic SPI commands
        .lookupTable = {
            // LUT[0] - Fast Read (0x0B)
            // 1. Send 0x0B command on 1 pad
            // 2. Send 24-bit address on 1 pad
            // 3. Send 8 dummy cycles
            // 4. Read data on 1 pad
            [0] = FLEXSPI_LUT_SEQ(
                kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x0B,
                kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
            [1] = FLEXSPI_LUT_SEQ(
                kFLEXSPI_Command_DUMMY, kFLEXSPI_1PAD, 0x08,
                kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

            // LUT[4] - Write Enable (0x06)
            [4] = FLEXSPI_LUT_SEQ(
                kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06,
                kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

            // LUT[5] - Page Program (0x02)
            [5] = FLEXSPI_LUT_SEQ(
                kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x02,
                kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
            [6] = FLEXSPI_LUT_SEQ(
                kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04,
                kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

            // LUT[7] - Sector Erase (0xD8)
            [7] = FLEXSPI_LUT_SEQ(
                kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xD8,
                kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

            // LUT[8] - Read Status Register (0x05)
            [8] = FLEXSPI_LUT_SEQ(
                kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05,
                kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x01),
        },
    },

    .pageSize = 256,                                     // Page size in bytes
    .sectorSize = 64 * 1024,                             // Sector size in bytes
    .blockSize = 256 * 1024,                             // Block size in bytes
    .isUniformBlockSize = true,                          // All blocks are same size
};

Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

こんにちは@anbn


シリアル ダウンロード モードでカスタム ボードにコネクテッドし、テスト ボタンを押しましたか?結果は合格でしたか?クエリ パッドとコマンド パッドは 1 つであるべきだと思いますが、クアッド モードに設定すると、フラッシュはデータ IO に 4 つのパッドを使用します。


すてきな一日を、
カン


---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう!
- Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。
---------------------------------------------------------------------------------

Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

こんにちは、カン
リンクをありがとうございます。理解が深まりました。

Secure Provisioning Tool のテンプレートを使用して FCB を作成しようとしていますが、常にこのメッセージが表示されます。

クアッド モード設定については少し不安です。データシートによると、クアッド I/O モードに入ることはコマンド 35h によって処理されますが、これは利用できないようです。

anbn_0-1756278197640.png


Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

こんにちは@mns


私が言及しているのは、あなたが言及した部分を含む qspiflash_config です。


すてきな一日を、
カン


---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう!
- Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。
---------------------------------------------------------------------------------

Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

素早い返信をありがとう@Kan_Li 。声明に関して:

「... FCBはそのままにしておきます...」

何を意味しているのか分かりません。「lookupTable」構造を残すことを指しているのでしょうか ( https://github.com/zephyrproject-rtos/zephyr/blob/88de138290b683c26abf81142756621a02169eb5/boards/nx... )その間、 'memConfig' の残りの部分を入力します ( https://github.com/zephyrproject-rtos/zephyr/blob/88de138290b683c26abf81142756621a02169eb5/boards/nx... )FCB の基盤となる構造ですか?

再度、感謝します、

マーティン

Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

こんにちは@anbn


SDK のドライバは EVK で使用する必要があるため、EVK で使用される部分以外のフラッシュを備えたカスタム ボードを設計する場合は、フラッシュ ローダーもカスタマイズする必要があります。そのためのガイドを提供していますので、詳細についてはhttps://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/RT1170-flexSPI1-secondary-QSPI-flash-d...を参照してください。


お役に立てれば幸いです。


すてきな一日を、
カン


---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう!
- Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。
---------------------------------------------------------------------------------

Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

こんにちは、カン
早速のご返信ありがとうございます。私はMartinのチームに所属し、同じプロジェクトに取り組んでいます。

CAN MIMXRT1170_FlexSPI2_A_SFDP_QSPI.cfx をそのまま使用できますか、それともフラッシュ IC に合わせてコードをカスタマイズする必要がありますか?efuse によっても設定されるセカンダリ ピン グループの構成オプションが表示されますが、これは冗長ですか?

ドライバでカスタマイズする必要があるものは他に何かありますか?

具体的には、セカンダリ ピン グループを使用するように CONFIG_OPTION1 を設定し、iMXRT117x_FlexSPI_SFDP を再コンパイルする必要がありますか? (また、そのサンプル ドライバにはボード/プロジェクトからの何かが含まれていますか?)

MCUXpresso IDE で、pinmux やカスタム ボードと一緒にコンパイルする必要がありますか?

フラッシュ IC とボード用の動作する flexspi_nor_config を生成するために使用する CAN ツールはありますか?

私たちは立ち上げ前にできる限り多くの不確実性を排除しようとしている、SOご協力にとても感謝しています。

よろしくお願いします
アンダース

Re: RT1170 FLexSPI (NOR) Configuration - Flashing and Booting

こんにちは@mns


はい、その理解は正しいです!あなたのCASE、FlexSPI2 の 2 番目のピン グループを NOR フラッシュとの接続に使用する場合は、リンク サーバーなどのデバッガー用のカスタム フラッシュ ローダーを開発する必要があります。また、前述のとおり、適切な FCB を使用して eFUSE をアプリケーションに適合させる必要があります。FCB は flexspi インスタンスとピン グループの選択も設定するため、eFUSE をプログラムして FCB をそのままにしておくと、ブート ROM は eFUSE の助けを借りてフラッシュを見つけることができますが、FCB 部分をチェックした後、アプリケーションを取得する場所が間違ってしまう可能性があります。


さらに追加したい場合は、アプリケーション コードによって LUT を更新できます。evkmimxrt1170_flexspi_nor_polling_transfer_cm7 の SDKs デモに、このトピックの例が示されています。


それが意味を成すといいのですが、


すてきな一日を、
カン


---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう!
- Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。
---------------------------------------------------------------------------------

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 06:06 PM
Updated by: