皆さん、
なぜ特定の状況でフラッシュドライバーが故障するのか、何か理由があるのか教えてほしいです。
私たちはカスタムボードをIMXRT1176に使っています。このMCUのボードはEmbedded Artistsのキャリアボードをベースにしています。私たちのプロジェクトでは、フラッシュメモリに0x30100000と0x30200000の2つのパーティションがあります。私たちはMCU-LinkとLinkserverを使ってバイナリをフラッシュしています。バイナリは-この場合確認された署名です。FLASHのリマップ機能を有効にしているので、スワップは行われません。
我々は2つの状況を観察する。
1.フラッシュメモリにブートローダーがあり、パーティション1にイメージファイルがあれば、すべて正常に動作します。
2. OTAアップグレードを完了し、MCUbootが2つ目のパーティションから新しいイメージを起動すると、linkserverからエラーが出るため、FLASHパート1への書き込みができません。
=================================================
NC:フラッシュドライバーの起動 MIMXRT1170_SFDP_QSPI.cfx(すでに常駐中)
NC:フラッシュドライバーを実行するためにVECTRESETを送信中
Nc: フラッシュバリアント「iMXRT1170_SFDP_FlexSPI1_A_QSPI 2026年5月15日 18:32:39」検出(16MB = 256*64K 0x30000000)
Pb: 1/1(0) 0x30100000でセクター16-31を1048576バイトで書き込み
追伸:(0) 30100000 で:0バイト - 0/1048576
Ec: op ProgramPage (0x30100000, 0x20002830, 0x4000) ステータス 0x1 - ドライバーがドライバーエラーを報告 - EXTSPIJドライバー rc 1 - 操作失敗
Ec: op ProgramPage (0x30100000, 0x20002830, 0x4000) ステータス 0x1 - ドライバーがドライバーエラーを報告 - EXTSPIJドライバー rc 1 - 操作失敗
最初のパーティションは erase-range コマンドで消去済みであることに注意してください。また、私たちのファームウェアがフラッシュドライバーで処理すると期待通りに動作することも確認できます。リンクサーバーを手動で操作しようとした場合にのみ失敗します。
===================================================
Q1。何か明確な理由はありますか?パーティション2を消すべきなのか、それとも両方の区画を消すべきなのでしょうか?
Q2。もしスロット1のためにバイナリをビルドした場合、パーティション2のイメージで動作するコアに接続したとき、このバイナリは動作しますか?Flashのリマップは動作しますか?
ご協力ありがとうございます。
よろしくお願いします!
ヤクブ
ギャビンさん、こんにちは。ご返信ありがとうございます!あなたはこれらの概念を理解する上で本当に役立ちました。
もし可能なら、もう一つだけ一緒に考えていただけませんか?
これはOTAアップデート後に取得したパーティション情報です。
===========
画像 0; 名前 APP; 状態 永続的:
スロット 0 APP_PRIMARY; オフセット 0x100000; サイズ 0x100000 (1048576):
<画像: サイズ 821444; バージョン 1.1.1+0>
画像ペイロードのSHA256: C825709456C098E38090...
log_addr 0x30100000 は 0x30200000 にリマップされます
スロット 1 APP_SECONDARY; オフセット 0x200000; サイズ 0x100000 (1048576):
<画像: サイズ 821444; バージョン 2.1.1+0>
画像ペイロードのSHA256: EBFCCC0D3E970230E404...
log_addr 0x30200000 は 0x30200000 に再マッピングされます
*アクティブ*
===============
次に、このスクリプトを実行してスロット0をクリアします。
LinkServer.exe flash MIMXRT1176xxxxx:MIMXRT1170-EVKB erase-range 0x30100000 0x100000
あなたの説明によると、リマップオーバーレイが有効になっているため、スロット1が消去されると予想していました。しかし、そうではありません。電源リセット後に得られた結果は以下のとおりです。
=========
フラッシュREMAP_OVERLAYが有効です。
画像 0; 名前 APP; 状態 なし:
スロット 0 APP_PRIMARY; オフセット 0x100000; サイズ 0x100000 (1048576): 画像が見つかりませんでした
スロット 1 APP_SECONDARY; オフセット 0x200000; サイズ 0x100000 (1048576):
<画像: サイズ 821444; バージョン 2.1.1+0>
画像ペイロードのSHA256:EBFCCC0D3E970230E404...
log_addr 0x30200000 0x30200000への再マップ
*アクティブ*=========
まだslot0に何も書き込めないのは予想外です。eraseコマンドはremapコマンドの論理マッピングをバイパスするが、loadコマンドはバイパスしないということはあり得るのでしょうか?
こんにちは、 @jslota13245 さん。
NXP MIMXRTシリーズにご関心をお寄せいただきありがとうございます!
ご提供いただいた情報に基づき、以下の理由を考慮すべきだと考えます。故障の原因は FlexSPIリマップは引き続き有効です OTAアップデート後。MCUbootがリマップでslot1(partition2)を起動すると、アプリケーションにremapを残します。LinkServerのフラッシュ .cfx ドライバはAHB論理アドレスを通じて処理されるため、リマップは書き込みTo 0x30100000 (partition1)を物理 0x30200000 (partition2)に静かにリダイレクトします。物理はすでに確認済み画像を保持しており、空白ではありません。NORフラッシュは上書きできません。
以前の erase-range 0x30100000 実際、同じ理由でパーティション2も消去しました。独自のファームウェアは、プログラムによって動作します。 FlexSPI IPコマンドモードでは、明示的な物理オフセットを使用することで、リマップをバイパスします。注: VECTRESET / デバッガーアタッチ 再マッピングは明確ではない。PORまたは明示的なレジスタ書き込みのみがそれを可能にする。
Q1: どのパーティションを消去すべきですか?
重要なのは、パーティションを消去するだけでなく、まずリマップを無効にすることです。推奨:
Q2: Partition2イメージを実行するコアに接続した場合、slot1バイナリは動作しますか?
画像にはリンクが必要です プライマリスロット ( 0x30100000 ) 用に一度だけ実行します。同じバイナリはリマップによりどちらのスロットからでも実行されます。スロット1 用に別途ビルドする必要はありません。デバッグ用にアタッチすると、リマップは論理アドレスの整合性を保つため、コードの読み取りやブレークポイントは問題なく動作します。しかし、同じリマップはフラッシュを書く際に物理ターゲットを変えるため、LinkServerでslot0をプログラムする前にリマップを無効にする必要があります 。
よろしくお願いします、
ギャビン