セキュアプロビジョニングツールを使用して、カスタムボード(MIMXRT1176CVM8B)にフラッシュメモリ(W25Q01NWZEIQ)をプログラムする こんにちは、 セキュアプロビジョニングツール(シリアルダウンローダーモード有効、FLASH_AUTO_PROBE_EN = 1)を使用して、カスタムボードのフラッシュメモリ(W25Q01NWZEIQ)の読み取り、書き込み、プログラミング、消去が可能です。プライマリ設定ピンFlexSPI_1フラッシュのインターフェースとして使っています しかしMCUXpresso IDEでは.axfをフラッシュできませんファイル。evkbmimxrt1170_flexspi_nor_config.c ファイルのルックアップテーブルやサイズ(128 MB)などのパラメータをいくつか変更しました。フラッシュエラーは以下のように表示されます。 ProgramPage(0x30000000、0x20002838、0x4000)ステータス0x1 - ドライバーがドライバーエラーを報告 - EXTSPIJドライバーRC -96(0xFFFFFFA0)。 詳細については、添付ファイルをご覧ください。 前もって感謝します Re: Programming the custom board(MIMXRT1176CVM8B) with flash (W25Q01NWZEIQ) via secure provisioning こんにちは、@Raj_01 さん。
エラーは.cfxファイルが原因で発生します。MCUXpresso IDEで使用されるファイルは、EVKに埋め込まれたメモリ専用に設計されています。ご存知かもしれませんが、フラッシュメモリーによっては異なるコマンドセット、初期化シーケンス、構成が必要になることがあります。したがって、EVKフラッシュローダーは、お使いのカスタムメモリデバイスと互換性がない可能性があります。 MCUXpresso IDEでアプリケーションをデバッグするには、カスタムの.cfxを作成して使用する必要があります特定のメモリをサポートするフラッシュドライバー。以下のリンクにはこのファイルの作成ガイドがありますが、これらのガイドはRT1170専用ではありませんが、同じ手順で行えます。
AN13386:カスタムフラッシュデバイス用のRT600フラッシュローダー MCUXpresso IDEs用の新しいフラッシュドライバの作成方法
他に質問がありましたら、お気軽にお知らせください。
BR ハビブ Re: Programming the custom board(MIMXRT1176CVM8B) with flash (W25Q01NWZEIQ) via secure provisioning こんにちは、ハビブさん。 前回の返信で述べられた手順に従い、flashprg.cなどのファイルもいくつか変更しました。flashConfig.h、flexspi_nor_flash.h、flasdev.c をカスタムボードのフラッシュ機能に合わせて作成し、新しい .cfx ファイルを構築しました。ファイルとフラッシュが行われました。しかし、それでもフラッシュすることができません。エラーと警告が発生しています。エラーファイルは添付ファイルをご確認ください。この問題に対する解決策を提案してください。 よろしくお願いいたします。 Re: Programming the custom board(MIMXRT1176CVM8B) with flash (W25Q01NWZEIQ) via secure provisioning こんにちは、@Raj_01 さん。
より良くサポートするために、以下の情報を教えていただけませんか?
-Secure Provisioning Toolで実行した手順を教えてもらえますか?ブートメモリ構成を使用してフラッシュメモリをテストしましたか?
-現在、FLASH_AUTO_PROBE_ENヒューズを使用していますか、それともGPIO_DISP_B1_6を使用してこのビットを有効にしていますか?
-カスタム.cfxをテストする場合FLASH_AUTO_PROBE_ENが有効になっていないフラッシュローダーでも、同じ動作が見られますか?
デバッグセッションを開始したとき、現在のブートピン構成はどうなっていますか?
-応募でアプリケーションを使う理由も教えていただけますか?
BR ハビブ Re: Programming the custom board(MIMXRT1176CVM8B) with flash (W25Q01NWZEIQ) via secure provisioning こんにちは、@Raj_01 さん。
AUTO_PROBE_ENを有効にしていなくても同じエラーが起きるというあなたの説明から、問題は.cfxに関連している可能性があります実装。セキュアプロビジョニングツールに含まれるブートメモリ構成ツールを使用することをお勧めします。このユーティリティを使用すると、フラッシュデバイスの構成パラメータを選択して検証できます。選択した設定がメモリと互換性があることを確認し、.cfx ファイルに実装されている設定と比較できます。ファイル。
さらに、このツールを使ってFCBを生成することもできます。このコミュニティ投稿、特に15番目の手順から始まる部分を確認することをお勧めします。そのセクションでは、セキュアプロビジョニングツールがどのようにFCBを生成するかについてより詳細な説明を提供しており、ツールによって生成されるパラメータと出力の理解に役立つ可能性があります。
また、申請でFLASH_AUTO_PROBE_ENを使う目的も教えていただけますか?
BR ハビブ Re: Programming the custom board(MIMXRT1176CVM8B) with flash (W25Q01NWZEIQ) via secure provisioning 使用されているNORは1Gb/W25Q01NWZEIQですが、 i.MX RT1170の参照デバイスでは128Mbまたは512Mbです。つまり、設定ファイルが異なります。設定ファイルを更新し、可能であればレビューのために設定ファイルを共有してください。 エラー情報が「ドライバがドライバエラーを報告した - EXTSPIJ ドライバ rc -96」なので、ドライブコマンドが異なる可能性があり、再確認が必要かもしれません Re: Programming the custom board(MIMXRT1176CVM8B) with flash (W25Q01NWZEIQ) via secure provisioning 1.セキュアプロビジョニングツールでは、フラッシュのサイズが128MBに変更されています。 FLASH_AUTO_PROBE_ENはSW1で1に設定されていました。そのため、セキュアプロビジョニングツールをフラッシュで使うことができました。私たちはシリアルダウンローダーモードでフラッシュし、アプリケーションを起動する際には再び起動モードに戻しています。前の回答通りフラッシュドライバーを修正し、MCU Xpresso IDEでフラッシュしようとしています。デバッグが必要なため、Secure Provisioningツールを使ったフラッシュは解決しません。 2番と5番。 FLASH_AUTO_PROBE_EN - はい。それを有効にした後、セキュアプロビジョニングをフラッシュで通過できました。 3. はい。 4. 添付の画像を参照。 エラーログと修正ファイルを添付します。以下はMCU IDEからFCBを作成するためのLUTコードを含むevkbmimxrt1170_flexspi_nor_config.cです: /* * 著作権 2018-2022 NXP * 無断転載を禁じます。 * * SPDX-License-Identifier: BSD-3-Claise */ #include "evkbmimxrt1170_flexspi_nor_config.h" /* ツールで使用されるコンポーネント ID 定義。*/ #ifndef FSL_COMPONENT_ID #define FSL_COMPONENT_ID 「プラットフォーム.ドライバ.xip_board」 #endif /**** * コード ******************************************************************************/ #if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1) #if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined( __GNUC__ ) __attribute__ ((section( ".boot_hdr.conf" ), 使用済み)) #elif defined( __ICCARM__ ) #pragma location = ".boot_hdr.conf" #endif #define FLASH_DUMMY_CYCLES (8U) #define FLASH_DUMMY_VALUE (0x03U) const flexspi_nor_config_t qspiflash_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG、 .version = FLEXSPI_CFG_BLK_VERSION、 .readSampleClksrc= kFlexSPIReadSampleClk_LoopbackInternally 、 .csHoldTime = 3U、 .csSetupTime = 3U、 // DDRモード、ワードアダッサブル、セーフ構成、差動クロックを有効にする .controllerMiscOption = (1UL << kFlexSpiMiscOffset_SafeConfigFreqEnable ), //0x10, .deviceType = kFlexSpiDeviceType_SerialNOR 、 .sflashPadType = kSerialFlash_4Pads 、 .serialClkFreq = kFlexSpiSerialClk_100MHz , //kFlexSpiSerialClk_133MHz, .sflashA1Size = 128U * 1024U * 1024U、 .timeoutInMs = 5000U、 .sflashA2Size = 0U、 .sflashB1Size = 0U、 .sflashB2Size = 0U、 /* フラッシュ構成機能を有効にする */ .configCmdEnable = 1U、 .configModeType[0] = kDeviceConfigCmdType_Generic 、 /* 設定コマンドシーケンスを設定します */ .configCmdSeqs[0] = { .seqNum = 1U、 .seqId = 12U、 .reserved = 0U、 }、 /* フラッシュメモリ内の読み出しレジスタの設定値を準備する */ .configCmdArgs[0] = (FLASH_DUMMY_VALUE <4U) .lookupTable = { // LUTを読み込む [4U * 0U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEC, RADDR_SDR, FLEXSPI_4PAD, 0x20), [4U * 0U + 1U] = FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, FLASH_DUMMY_CYCLES, READ_SDR, FLEXSPI_4PAD, 0x04), // 読み取りステータスLUT [4U * 1U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x04), // LUTの書き込み有効化 [4U * 3U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x00), // セクターLUTを消去する [4U * 5U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x21, RADDR_SDR, FLEXSPI_1PAD, 0x20), // ブロックLUTを消去する [4U * 8U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xDC, RADDR_SDR, FLEXSPI_1PAD, 0x20), //ペーパープログラムLUT [4U * 9U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x12, RADDR_SDR, FLEXSPI_1PAD, 0x20), [4U * 9U + 1U] = FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x04, STOP, FLEXSPI_1PAD, 0x00), // チップLUTを消去する [4U * 11U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0x00), // 読み出しレジスタLUTを設定する [4U * 12U + 0U] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xC0, WRITE_SDR, FLEXSPI_1PAD, 0x01), [4U * 12U + 1U] = FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x00, STOP, FLEXSPI_1PAD, 0x00), }、 }、 .pageSize = 256u、 .sectorSize = 4u * 1024u、 .blockSize = 64u * 1024u、 .ipcmdSerialClkFreq = 1U、 .isUniformBlockSize = 0U, //false, .isDataOrderSwapped = 0U、 .serialNorType = 0U、 .needExitNoCmdMode = 0U、 .halfClkForNonReadCmd = 0U、 .needRestoreNoCmdMode = 0U、 .reserved0 = 0U、 .FlashStateCtx = 0U、 }; #endif /* XIP_BOOT_HEADER_ENABLE */
記事全体を表示