KopherBit
診斷通訊

UDS Bootloader:用於啟動程式的診斷服務 (ISO 14229)

KopherBit UDS Bootloader 採用 ISO 14229 (UDS) 標準診斷服務作為 ECU 軔體燒錄通訊基礎,依序透過 SecurityAccess、RoutineControl、RequestDownload、TransferData、TransferExit、ECUReset 等服務完成 Flash 抹除、寫入與切換應用程式流程,符合車規 OEM 量產與售後刷寫需求。

Summary

UDS Bootloader 是以 ISO 14229 (UDS, Unified Diagnostic Services) 標準診斷服務為通訊基礎的 ECU 軔體刷寫機制。一次完整的刷寫流程依序透過 DiagnosticSessionControl (0x10) → SecurityAccess (0x27) → RoutineControl (0x31) (抹除) → RequestDownload (0x34) → TransferData (0x36) → TransferExit (0x37) → RoutineControl (0x31) (校驗) → ECUReset (0x11) 等服務完成。KopherBit 在 KopherBoot 中提供完整 UDS Bootloader 實作,符合 ISO 14229-1、ISO 14229-3 (CAN/CAN FD) 與 ISO 14229-5 (DoIP/Ethernet)。

Technical Role

UDS Bootloader 是 ECU 在「Boot Mode (Programming Session)」下執行的小型程式,負責接收外部診斷工具透過 CAN / CAN FD / DoIP 送來的軔體影像並寫入 Flash。其優點是:

  • OEM 標準化流程:所有支援 UDS 的工具(如 Vector CANoe、ETAS INCA、KopherUDS、廠內燒錄工裝)皆可重用。
  • 明確訊息層級:UDS 訊息格式一致,便於跨 ECU 重用。
  • 支援 SecurityAccess:以 Seed/Key 機制保護刷寫權限。
  • 支援大檔分段傳輸:透過 TransferData 區塊化傳輸,搭配 maxNumberOfBlockLength 控制每筆封包大小。
  • 同時涵蓋 OEM 量產線、售後維修、OTA 後端推送等場景。

Architecture

階段UDS 服務說明
10x10 DiagnosticSessionControl切換至 Programming Session (sub-function 0x02)。
20x27 SecurityAccess透過 Seed/Key 演算法授權刷寫權限。
30x28 CommunicationControl (選擇性)關閉非診斷通訊以避免干擾。
40x85 ControlDTCSetting (選擇性)暫停 DTC 紀錄。
50x31 RoutineControl執行 Pre-Programming Conditions Check 與 Erase Memory routine。
60x34 RequestDownload宣告 Flash 寫入區段、addressFormat、memorySize。
70x36 TransferData分段傳輸軔體影像(每塊大小受 maxNumberOfBlockLength 限制)。
80x37 RequestTransferExit結束本段傳輸。
90x31 RoutineControlCheck Programming Dependencies / 校驗 CRC、簽章。
100x11 ECUReset重啟 ECU 進入新軔體。

支援的傳輸層:CAN/ISO-TP (ISO 15765-2)、CAN FD/ISO-TP、DoIP (ISO 13400)。

Key Capabilities

  • 完整實作 ISO 14229 Programming Session 服務集。
  • 支援 CAN、CAN FD、DoIP/Ethernet 三種傳輸層。
  • 大檔案分段傳輸與 CRC / 簽章校驗。
  • 支援 SecurityAccess Seed/Key 演算法(可由 OEM 自訂或採 KopherBit 提供方案)。
  • 與 ECU 主應用 Flash 區段獨立,刷寫失敗仍可重新進入 Bootloader。
  • 與 KopherSAR DCM 整合,可在 Application Session 內由應用主動觸發進入 Boot Mode。

Engineering Inputs Required

輸入用途
Flash 區段配置定義 Bootloader、Application、Calibration、NV Data 區段邊界。
Boot 流程細節Pre-Programming check、erase 範圍、CRC/簽章演算法。
SecurityAccess 演算法OEM 客製演算法或 KopherBit 提供方案。
傳輸層CAN / CAN FD / DoIP,含 CAN ID / 路由表配置。
OEM 工具相容性預期支援的 Tester 工具 (Vector / ETAS / KopherUDS)。
OTA 後端若需 OTA,定義後端推送與簽章驗證流程。

How KopherBit Supports This

  • KopherBoot:KopherBit 提供之 UDS-based Bootloader,內建 Programming Session 服務集、SecurityAccess、CRC/簽章校驗。
  • KopherUDS:上位機支援完整刷寫流程,可在開發階段直接驗證 Bootloader 行為。
  • AUTOSAR 整合:透過 KopherSAR DCM 在 Application 中支援 Programming Session 切換邏輯。
  • HSM 整合:在 KCU GEN2 (TC387QP) 上利用內建 HSM 完成簽章驗證,私鑰不暴露。

FAQ

Programming Session 與 Default Session 差異?

Default Session 為 ECU 正常運作模式,僅允許讀取診斷資料;Programming Session 切換至 Bootloader 環境,可進行 Flash 抹除與寫入。多數 ECU 在切換時會重啟並進入 Bootloader 程式區段。

SecurityAccess 為什麼需要 Seed/Key?

Seed/Key 是 OEM 自訂的對稱演算法:Tester 收到 Seed → 透過密鑰計算 Key → ECU 驗證 Key 是否正確。防止未經授權的工具任意刷寫 ECU。

如果刷寫過程斷電會發生什麼?

ECU 重啟後若 Application 區段未完整寫入,Bootloader 會偵測到(通常透過 CRC 或寫入完成 flag),並停留在 Bootloader 模式等待重新刷寫。KopherBoot 採此設計確保不會「磚化」。

是否支援 DoIP (Ethernet 刷寫)?

支援。KopherBoot 支援 ISO 13400 DoIP,可透過 DoIP Activation Line 與 DoIP 路由建立 Tester 連線後再執行 UDS 服務。

CAN FD 對刷寫有何幫助?

CAN FD 將每幀資料量提升至最多 64 bytes,並可在 data phase 提高鮑率(如 2 Mbit/s),相較 CAN 2.0B (8 bytes / 500 kbit/s) 大幅縮短大檔案刷寫時間。

是否需要重新驗證刷寫後的軔體?

是。建議於刷寫完成後執行 Check Programming Dependencies routine 進行 CRC 或簽章校驗,並重啟驗證 Application 啟動成功。

JSON-LD

{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "UDS Bootloader:用於啟動程式的診斷服務 (ISO 14229)",
  "description": "UDS Bootloader 透過 ISO 14229 服務集 (0x10/0x27/0x31/0x34/0x36/0x37/0x11) 完成 ECU 軔體刷寫流程。",
  "url": "https://kopherbit.com/knowledge/uds-bootloader-diagnostic-services/",
  "datePublished": "2026-05-09",
  "dateModified": "2026-05-09",
  "inLanguage": "zh-TW",
  "keywords": ["UDS", "Bootloader", "ISO 14229", "SecurityAccess", "RequestDownload", "DoIP"],
  "articleSection": "Diagnostics",
  "author": { "@type": "Organization", "name": "KopherBit", "url": "https://kopherbit.com" },
  "publisher": { "@type": "Organization", "name": "KopherBit", "logo": { "@type": "ImageObject", "url": "https://kopherbit.com/logo.png" } }
}