デバッガーは、コア呼び出しの後にMIMXRT1062に接続できませんNVIC_SystemReset こんにちは、私は過去の幽霊を取り戻すためにここにいます。具体的には、 このスレッドです。 私はMbed OS CEのMIMXRT1062への移植に取り組んでいますが、テストスイートをセットアップしようとするとこの問題が発生しました。基本的に、M7 コアで実行されているコードが NVIC_SystemReset を呼び出すたびに、デバッガーはコアに接続できなくなります。 LinkServer は以下を出力します。 Ns: MCUXpresso IDE RedlinkMulti Driver v11.6 (Oct 3 2022 08:09:13 - crt_emu_cm_redlink.exe build 9)
Pc: ( 0) Reading remote configuration
Wc(03). No cache support.
Nc: Found chip XML file in I:/RPL/mbed-os/targets/upload_method_cfg/redlink_cfgs\MIMXRT1052xxxxB.xml
Pc: ( 5) Remote configuration complete
Nc: Restarted LinkServer process (PID 30668).
Wc: ============= SCRIPT: RT1050_connect.scp =============
Wc: RT1050 Connect Script
Wc: DpID = 0BD11477
Wc: APID = 0x04770041
Wc: Disabling MPU
Wc: Configure FlexRAM for 256KB OC RAM, 128KB I-TCM, 128KB D-TCM
Wc: Finished
Wc: ============= END SCRIPT =============================
Nc: Probe Firmware: DAPLink CMSIS-DAP (ARM)
Nc: Serial Number: 0227000047784e4500559004d7450044ddb1000097969900
Nc: VID:PID: 0D28:0204
Nc: USB Path: \\?\hid#vid_0d28&pid_0204&mi_03#7&316d2a6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
Nc: Using memory from core 0 after searching for a good core
Pc: ( 30) Emulator Connected
Xr:
Pc: ( 40) Debug Halt
Nc: connection failed - Ep(03). Invalid ID for processor... Retrying
Nc: Using memory from core 0 after searching for a good core
Nc: On debug connection - reset using system reset
Pc: ( 30) Emulator Connected
Pc: ( 40) Debug Halt
Ed:02: Failed on connect: Ep(03). Invalid ID for processor.
Et: Probe(0): Connected&Reset. Was: NotConnected. DpID: 0BD11477. CpuID: 00000FFF. Info:
Nc: Last stub error 0: OK
Nc: Last sticky error: 0x0 AIndex: 0
Nc: Debug bus selected: MemAp 0
Nc: DAP Speed test unexecuted or failed
Nc: Debug protocol: SWD. RTCK: Disabled. Vector catch: Disabled.
Pc: (100) Target Connection Failed PyOCDは以下を印刷します。 0000350 I Target type is mimxrt1060 [board]
0000405 I DP IDR = 0x0bd11477 (v1 MINDP rev0) [dap]
0000433 I AHB-AP#0 IDR = 0x04770041 (AHB-AP var4 rev0) [discovery]
0000446 W Invalid coresight component, cidr=0x0 [rom_table]
0000450 I IMXRT Boot Mode: Boot From Fuses [target_imxrt]
0000458 I CPU core #0: Unknown (CPUID=0x00000000) r0p0, v6.0-M architecture [cortex_m]
0000471 I Loading /home/jamie/Mbed/mbed-os/cmake-build-develop-mimxrt1060evk/hal/tests/TESTS/mbed_hal/rtc_reset/test-mbed-hal-rtc-reset.bin at 0x60000000 [load_cmd]
0000496 I IMXRT Boot Mode: Boot From Fuses [target_imxrt]
0000499 I IMXRT Boot Device: 0 [target_imxrt]
0000545 C cannot write registers r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, psp, msp, lr, pc, xpsr, cfbp because core #0 is not halted [__main__] OpenOCDプリント: Info : 114 157 adi_v5_swd.c:370 swd_connect_single(): SWD DPIDR 0x0bd11477
Debug: 115 160 arm_adi_v5.c:679 dap_dp_init(): imxrt.dap
Debug: 116 160 arm_adi_v5.c:711 dap_dp_init(): DAP: wait CDBGPWRUPACK
Debug: 117 160 arm_adi_v5.h:638 dap_dp_poll_register(): DAP: poll 4, mask 0x20000000, value 0x20000000
Debug: 118 164 arm_adi_v5.c:719 dap_dp_init(): DAP: wait CSYSPWRUPACK
Debug: 119 164 arm_adi_v5.h:638 dap_dp_poll_register(): DAP: poll 4, mask 0x80000000, value 0x80000000
Debug: 120 166 cmsis_dap.c:808 cmsis_dap_swd_write_from_queue(): refusing to enable sticky overrun detection
Debug: 121 169 openocd.c:151 handle_init_command(): Examining targets...
Debug: 122 169 target.c:1843 target_call_event_callbacks(): target event 19 (examine-start) for core imxrt.cpu
Debug: 123 169 arm_adi_v5.c:1095 dap_get_ap(): refcount AP#0x0 get 1
Debug: 124 173 arm_adi_v5.c:1038 dap_find_get_ap(): Found MEM-AP AHB3 at AP index: 0 (IDR=0x04770041)
Debug: 125 181 arm_adi_v5.c:825 mem_ap_init(): MEM_AP Packed Transfers: disabled
Debug: 126 181 arm_adi_v5.c:836 mem_ap_init(): MEM_AP CFG: large data 0, long address 0, big-endian 0
Debug: 127 185 target.c:2628 target_read_u32(): address: 0xe000ed00, value: 0x00000000
Error: 128 185 cortex_m.c:2363 cortex_m_examine(): [imxrt.cpu] Cortex-M PARTNO 0x0 is unrecognized
Debug: 129 185 target.c:1843 target_call_event_callbacks(): target event 20 (examine-fail) for core imxrt.cpu 基本的に、この状況では CPU ID は 0 として読み取られるため、デバッガーはコアと通信できないようです。 元のスレッド (上記リンク) では、このエラーはフラッシュの JEDEC リセットが行われていないことが原因であると示唆されていました。しかし、スレッドでリンクされている記事を掘り下げたところ、これはXIP拡張モードでフラッシュチップを使用する場合に固有の問題のようです。このモードでは、通常のコマンドは機能しないため、チップをリセットするときに、チップを最初にXIP Enhanced(別名Continuous Read)モードから解除するJEDECリセットを使用しないと、ブートが失敗します。 ただし、この状況は MIMXRT1060_EVK ボードの構成と一致しません。すべてのフラッシュ シーケンスを再確認しましたが、XIP 拡張モード は有効になっていません -- 実際、フラッシュはそれをまったくサポートしていません。さらに、MCUはリセット後も動作し続けます。ただフラッシュすることはできません。これは、この問題がMCUがXIPフラッシュを読み取れないために引き起こされたものではないという決定的な証拠です。 むしろ、ここで起こっているのは、(a) MCU をリセットすると ARM JTAG TAP が何らかの形で無効になり、CPU がデバッグ ポートを介して通信しなくなるか、(b) MCU をリセットすると SWD が使用するピン マッピングが干渉するため、MCU がリセットされた後に SWD 接続自体が切断されると考えています。NXP側の誰かがこれが問題であることを確認し、ここで何が起こっているのかを説明できると本当にありがたいです。 今のところ、私は "-Oconnect_mode=pre-reset"をpyocdに渡すという1つの回避策を見つけました。これにより、接続前にリセットが発行され、問題の発生が防止されているように見えます。残念ながら、LinkServerで同様の回避策を見つけることができなかったため、基本的に私のアプリケーションでは使用できません。少なくとも、LinkServerに「接続前にリセット」オプションを追加するか、MIMXRT CPUIDが0になったときに検出してリセットを試みるフォールバックモードを追加していただければ幸いです。 i.MXRT 106倍 Re: コア NVIC_SystemResetコール後にデバッガが MIMXRT1062 に接続できない このギャビンを見ていただきありがとうございます。これに対する修正/回避策が近いうちにLinkServerのロードマップにあるかどうか知っていますか?(実際の問題の修正、または接続前にLinkServerにHWリセットを行わせる方法のいずれか)。これにより、Mbed OSの自動テストスイートにLinkServerを使用することはほぼ不可能になります -- PyOCDを使用する必要があり、はるかに遅くなります。 Re: コア NVIC_SystemResetコール後にデバッガが MIMXRT1062 に接続できない こんにちはギャビン! この問題はMbed OSとはまったく関係がないと思います。実際、Mbed OSはMCUXpresso SDKの上に構築されており、SDKの起動コードとNORフラッシュ構成をほとんど変更せずに使用しています。 この問題は、既存の MCUXpresso プロジェクトに NVIC_SystemReset() の呼び出しを追加することで再現可能にする必要があります。(ボードがリセットループに陥るのを避けるために、ボタンが押されたときだけリセットするのはおそらく良い考えでしょう)。 はい、LinkServer 24.9.75でDAPLinkファームウェアを実行しているMIMXRT1060 EVKBボードを使用しています。 これについてあなたの助けをありがとう、これが理にかなっていることを願っています!
記事全体を表示