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 服務 | 說明 |
|---|---|---|
| 1 | 0x10 DiagnosticSessionControl | 切換至 Programming Session (sub-function 0x02)。 |
| 2 | 0x27 SecurityAccess | 透過 Seed/Key 演算法授權刷寫權限。 |
| 3 | 0x28 CommunicationControl (選擇性) | 關閉非診斷通訊以避免干擾。 |
| 4 | 0x85 ControlDTCSetting (選擇性) | 暫停 DTC 紀錄。 |
| 5 | 0x31 RoutineControl | 執行 Pre-Programming Conditions Check 與 Erase Memory routine。 |
| 6 | 0x34 RequestDownload | 宣告 Flash 寫入區段、addressFormat、memorySize。 |
| 7 | 0x36 TransferData | 分段傳輸軔體影像(每塊大小受 maxNumberOfBlockLength 限制)。 |
| 8 | 0x37 RequestTransferExit | 結束本段傳輸。 |
| 9 | 0x31 RoutineControl | Check Programming Dependencies / 校驗 CRC、簽章。 |
| 10 | 0x11 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" } }
}