AI-HIL:當 AI 長出了眼睛和手,讓嵌入式開發閉環自動化

從一句抱怨開始

第三天了。

這塊點心小板真的夠硬。Claude Code 在大放送期間讓我能一直衝,結果還是頂到了用量限制。早上後來去參加研討會,腦子裡一直在想一件事:

我花了多少時間在 copy/paste?

JTAG 的 call stack、SWD 的暫存器狀態、Serial Console 的 log——一段貼過去,AI 給建議,我改一下 code,重新 build、flash、再抓 log,再貼回去。來來回回。有時貼錯視窗,有時貼漏了關鍵的那幾行。

跟以前純靠自己 debug 比起來,確實快很多。但還是不夠快。Bug 像俄羅斯套娃,抓掉一層,裡面還有一層。每一次的「這次應該好了」到「怎麼又掛了」的迴圈,都讓人想把鍵盤推開。

所以我在想,如果能消除人為因素的話呢?


一個想法:給 AI 眼睛跟手

問題說清楚了就好解決。

我需要的不是更聰明的 AI,而是讓 AI 能自己看、自己動、自己驗

不再是我充當「人肉資料傳輸管道」,把硬體的訊號用眼睛看完之後再貼給 AI,而是讓 AI 直接接上硬體的感知介面,取得第一手的訊號,做出判斷,然後直接驅動工具鏈——build、flash、reset——再自己確認結果。

這個想法就是 AI-HIL(AI Hardware-in-the-Loop)

Giving hardware the soul of AI, realizing automated closed-loop development in the physical world.


AI-HIL 是什麼

AI-HIL 把 Claude Code 從「code 產生器」升級成「系統級工程師」。

透過 Model Context Protocol (MCP),Claude Code 連接到實體硬體,獲得三種能力:

  • 感知(Perception):讀 Serial log、JTAG call stack、電流波形、Camera 畫面
  • 行動(Action):Build/Flash firmware、硬體 Reset、電源控制
  • 閉環驗證(Closed-Loop Validation):自動確認修復是否有效,記錄 bug 模式

換句話說,AI 不再只是坐在我旁邊出主意,而是能自己上工的 AI Employee


系統架構

┌─────────────────────────────────────────────┐
│           Decision Brain                    │
│       Claude Code CLI + CLAUDE.md           │
└───────────────────┬─────────────────────────┘
                    │ MCP
┌───────────────────▼─────────────────────────┐
│         Nervous System — FastMCP            │
└──────┬──────────────────────────┬───────────┘
       │                          │
┌──────▼──────────┐   ┌───────────▼────────────┐
│  Perception     │   │    Action Plane        │
│  Serial / SSH   │   │    Build / Flash       │
│  JTAG / SWD     │   │    Hard Reset          │
│  Webcam / CV    │   │    GPIO / Sim          │
│  PPK2 Power     │   └────────────────────────┘
│  SDR / RF       │
│  Thermal / Mic  │   ┌────────────────────────┐
└─────────────────┘   │    Context Plane       │
                      │    Datasheets / PDFs   │
                      │    Golden Samples      │
                      └────────────────────────┘

所有 MCP Server 都用 FastMCP(Python)實作。每個 Server 封裝一個硬體維度,回傳的是語意化的診斷結論,而不是原始的 binary 資料。

AI 看到的不是 0xE000ED28 = 0x0400,而是 Stack overflow detected in task foo


閉環是怎麼運作的

  Triage           Diagnosis              Remediation
 (anomaly)  →  (JTAG + PPK2        →  (Claude Code
 detected       + Vision)              fixes code)
    │                                       │
    └───────────────────────────────────────┘
              ▼
          Verification
          PASS ──► Record bug → next Triage
          FAIL ──► Diagnosis (retry)

五個步驟形成自動閉環:

  1. Triage — 感知平面偵測異常(電流異常高、log 出現錯誤)
  2. Diagnosis — AI 同時檢查 JTAG stack、熱像圖、電流波形
  3. Remediation — Claude Code 修改 C/Zig/Rust 原始碼
  4. Build & Flash — 自動編譯、燒錄到目標板
  5. Verification — Serial log + PPK2 確認修復有效,記錄進 CLAUDE.md

每一次成功的 bug 修復都會被記錄成知識,讓 AI 在下次遇到類似問題時更快收斂。


標準診斷 SOP

Claude Code 遇到硬體問題時的標準流程:

read_serial_log()       # 先看 log 有沒有明顯錯誤
read_call_stack()       # HardFault 或 hang 時
measure_current(5000)   # 電源異常時
capture_frame()         # 需要確認物理狀態時
build_firmware()
   flash_firmware()
   read_serial_log()   # 確認 clean boot

為什麼這件事值得做

說老實話,這個專案目前還在 「Ideally?」的階段——有些 task 需要實體硬體才能跑,還在一步一步往前推進。

但背後的邏輯是清楚的:

AI 吃更精準的資料,自然就能把事辦好。

當我需要手動 copy/paste log 的時候,我是一個有很多 overhead 的人肉 pipe。我會分心,會貼錯,會遺漏關鍵訊號。當 AI 自己能讀 JTAG、自己能量電流、自己能 flash 新版本再驗證,它拿到的是完整、高保真、即時的訊號——背景雜訊少了,推理品質就高了。

這不只是「讓 debug 自動化」,這是把嵌入式開發者從重複的感知-傳輸-指令迴圈中解放出來,讓人可以專注在真正需要判斷力的事情上。

至於「躺著數 $$ 💰」的部分——那個還早得很。先把閉環建好。


專案在這裡

如果你也在做嵌入式開發,或是對 MCP + 硬體整合有興趣,歡迎來看看:

👉 github.com/kuochenfu/ai-hil-mcp

Quick start 很簡單:

git clone https://github.com/kuochenfu/ai-hil-mcp.git ~/ai-hil-mcp
cd ~/my-firmware-project
bash ~/ai-hil-mcp/setup.sh

Setup 完之後,Claude Code 開啟你的 firmware 專案時會自動連上 MCP servers。

claude mcp list
# serial-mcp: ... ✓ Connected

結語

有時候,最好的工程解法就從一句抱怨開始。

「為什麼我要一直貼 log?」

問清楚了,答案就在那裡:讓 AI 自己去看。

這條路還很長,但方向是對的。


專案 repo:kuochenfu/ai-hil-mcp


Comments & Feedback