🐛 fix: recover JTAG DAP after flash programming with system reset
- Add preemptive rst -system at Step 3 start to clean post-flash DAP state - Replace ineffective SLCR write with targets 1 → rst -system recovery - Exit with clear power-cycle instructions when DAP recovery fails - Show prominent DAP error guidance in GUI for Step 3 and Run All mode Verified: Step 1→2→3 now passes end-to-end (340s) without board power cycle.
This commit is contained in:
@@ -871,9 +871,22 @@ class MainWindow(ctk.CTk):
|
||||
self._bitstream_callback,
|
||||
)
|
||||
|
||||
dap_fail = False
|
||||
for result in results:
|
||||
status = "✓" if result.success else "✗"
|
||||
self._log_message(f" {status} {result.step}: {result.message}")
|
||||
if "DAP" in result.message and not result.success:
|
||||
dap_fail = True
|
||||
|
||||
if dap_fail:
|
||||
self._log_message("")
|
||||
self._log_message(" ╔══════════════════════════════════════════╗")
|
||||
self._log_message(" ║ DAP ERROR — JTAG debug port hung ║")
|
||||
self._log_message(" ║ This is caused by prior flash programming║")
|
||||
self._log_message(" ║ → Power-cycle the board (unplug/replug) ║")
|
||||
self._log_message(" ║ → Then re-run Step 3 ║")
|
||||
self._log_message(" ╚══════════════════════════════════════════╝")
|
||||
self._log_message("")
|
||||
|
||||
return all(r.success for r in results)
|
||||
except Exception as e:
|
||||
@@ -1138,6 +1151,17 @@ class MainWindow(ctk.CTk):
|
||||
|
||||
# Stop on first failure when running all steps
|
||||
if not single_step and not success:
|
||||
# Special case: Step 2 pass → Step 3 DAP fail = board needs power cycle
|
||||
if i == 2 and results[0] and not success:
|
||||
self._log_message("")
|
||||
self._log_message(" ┌─────────────────────────────────────────┐")
|
||||
self._log_message(" │ Step 3 failed after flash programming. │")
|
||||
self._log_message(" │ This is normal — program_flash leaves │")
|
||||
self._log_message(" │ the JTAG DAP in error state. │")
|
||||
self._log_message(" │ → Power-cycle the board, then re-run │")
|
||||
self._log_message(" │ Step 3 (Load Bootloader) alone. │")
|
||||
self._log_message(" └─────────────────────────────────────────┘")
|
||||
self._log_message("")
|
||||
break
|
||||
|
||||
# Inter-step delay (skip after last step)
|
||||
|
||||
Reference in New Issue
Block a user