NUCLEO-F446RE
整塊綠色板子。上面有主 MCU、板載 ST-LINK、USB、穩壓與排針。
主 MCU:STM32F446REFIELD NOTES · UPDATED 2026.09.19
先看懂一顆 MCU 裡的 CPU、暫存器、SRAM 與 Flash,再沿著三條 SWD 線追到真實位元。這門課不把彎路擦掉:你會看到錯誤假設如何誤導判斷,也會親手用量測把它推翻。
00 / KNOWLEDGE LINE
這條線給完全的新手:不必先懂 ARM,也不必先會 C。每一課都是一組「生活比喻 → 工程真話」,後面接一題只能靠判讀證據回答的小測。A 層(概念)與 B 層(讀證據)不需要板子;C 層實板流程在 COURSE.md 第 12 課。
比喻只負責把門打開,走進去的是工程真話。任何一課如果只記得比喻,那一課就還沒學完。
00 / MCU WITHOUT THE FOG
MCU(微控制器)是一顆把 CPU、記憶體和周邊控制器放在一起的晶片;開發板則是在 MCU 外面再加電源、USB、除錯器、按鍵與接頭。點下面的區塊,先建立一張之後所有實驗都能重用的地圖。
整塊綠色板子。上面有主 MCU、板載 ST-LINK、USB、穩壓與排針。
主 MCU:STM32F446RE整塊探索板。板載 ST-LINK 是另一顆 MCU,不要把它和被測的 target 混在一起。
主 MCU:STM32L476VG客製板與 NuTiny 上的 Cortex-M0 MCU;同一顆晶片可當 probe,也可當 target。
板子 ≠ 晶片型號PC = 下一條指令位址
SP = stack 頂端
R0 = 函式第一個參數它們在 CPU 核心裡,是運算現場。halt 後讀 PC,等於看 CPU 停在哪一句。
GPIOA_BSRR = 設定腳位
FMC_ISPTRG = 啟動 Flash 操作
DHCSR = 除錯控制/狀態它們看起來像記憶體,實際上每個 bit 都接到硬體電路;寫錯順序可能被靜靜忽略。
01 / EVIDENCE FIRST
同一句「板子通了」,可能只是編譯通過,也可能是標準工具真的控制到另一顆 CPU。把證據強度攤開,才知道自己站在哪一層。
讀回 L476 專屬的裝置識別、flash 容量與初始 SP;不是只看到兩顆 M4 都相同的 CPUID。
halt、step、register dump、run 均由讀回的 DHCSR 與 PC 分布驗證。
pyOCD 能列出 probe,並透過它讀 target、halt 與 resume。
手冊提供拓撲,四支腳的指紋電壓一次完成實體標定。
量到的是電壓;「高阻抗與漏電造成分壓」是能解釋觀察的推論。
erase、program 與指定位置讀回曾成功;但 4 KB 壓力測試揭露偶發 bit slip,因此不能外推成「寫入已可靠」。
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。
錯。936 byte 可能剛好沒撞到每 4 KB 約 1–2 次的 bit slip。成功案例證明能力存在,不等於錯誤率為零。
錯。NANO130 改用 GPIO 位元存取後損毀率下降約三倍;分析儀卻證明每筆仍有完整 54 個 clock,推翻「RMW 吃掉時脈」的解釋。
06 / MEASUREMENT BEATS STORY
下面三張卡分屬不同層。把它們混在一起,就會用 Flash 控制器的現象解釋 SWD 線上的 bit slip;先標出層級,推理才不會越界。
修正有效 ≠ 理由正確。先把「觀察」和「解釋」寫在不同欄位。
06 / CHECKPOINT