板對板 SWD 已通
讀回 L476 專屬的裝置識別、flash 容量與初始 SP;不是只看到兩顆 M4 都相同的 CPUID。
FIELD NOTES · 2026.09.14
一片 F446RE,三條 SWD 線,再加一條剪開的 USB 線。這門課不把彎路擦掉:你會看到錯誤假設如何誤導判斷,也會親手用量測把它推翻。
01 / EVIDENCE FIRST
同一句「板子通了」,可能只是編譯通過,也可能是標準工具真的控制到另一顆 CPU。把證據強度攤開,才知道自己站在哪一層。
讀回 L476 專屬的裝置識別、flash 容量與初始 SP;不是只看到兩顆 M4 都相同的 CPUID。
halt、step、register dump、run 均由讀回的 DHCSR 與 PC 分布驗證。
pyOCD 能列出 probe,並透過它讀 target、halt 與 resume。
手冊提供拓撲,四支腳的指紋電壓一次完成實體標定。
量到的是電壓;「高阻抗與漏電造成分壓」是能解釋觀察的推論。
先做 1 MB 全備份,再只寫 bank2 最後一頁;簽章讀回相符,bank1 哨兵與原廠 demo 未受影響。
02 / UNKNOWN PINS
情境:CN3 的兩個跳線帽已拔、訊號線全拔、DISCO 通電。先猜哪兩支是 MCU 側,再逐支點擊量測。
03 / READ IT BACK
選一種 step 寫法,觀察真正讀回的 bit 3 與 halt 落點。規則:改變 C_MASKINTS 時,那次寫入必須同時維持 C_HALT=1。
0x0103000704 / SILENT FAILURES
選擇你眼前的症狀。故障台不直接告訴你「是哪個 bug」,而是先給能最大幅縮小嫌疑範圍的下一筆觀察。
SELECT A SYMPTOM > waiting for observation_
05 / KEEP THE WRONG TURNS
錯。傳輸失敗後 master 把 SWDIO 維持輸出低;線有通時反而會接近 0 V。用這個錯誤規則會把好線判成壞線。
錯。實物是 F446RE master 加 L476G-DISCO target。正因為兩顆 M4 的 DPIDR/CPUID 相同,才需要讀 ST 的 DBGMCU_IDCODE。
方向相反。CN4 是板載 ST-LINK 對外輸出;我們要的是 CN3 跳線拔除後的 MCU 側。
錯。dap.ps1 在主機端補了 RDBUFF,剛好掩蓋韌體未處理 posted AP read。真正驗收要交給獨立實作 pyOCD。
06 / CHECKPOINT