AUTOMORPHSW Team

OTA 更新怎麼做到不變磚?A/B 分區、回滾與 UN R156 的要求

OTA 更新怎麼做到不變磚?A/B 分區、回滾與 UN R156 的要求

手機更新失敗,重開機再來一次;車輛更新失敗,可能是路邊救援。車用 OTA 的工程難度不在「把檔案傳上車」,在於整套機制必須假設:傳輸會斷、電源會掉、韌體會有 bug、攻擊者會嘗試插手——然後在這些前提下仍然保證車輛可用。

防磚的核心:永遠留一條活路

A/B 分區(雙儲存區) 是最常見的策略:記憶體切成兩個完整的系統分區,更新永遠寫到「非執行中」的那一區。寫入與驗證全部完成之前,執行中的分區一個位元都不動——斷電、傳輸中斷、驗證失敗,下次開機還是從舊分區起來,車輛照常可用。

代價是儲存空間翻倍,所以資源受限的 ECU 會用就地更新+備援開機路徑的折衷:至少保證 Bootloader 與最小恢復環境永遠可用,更新失敗時能退回「可刷寫狀態」等待重試(機制細節見 Flash Bootloader 怎麼運作)。

回滾(Rollback) 是防磚的另一半:新版本啟動後要通過自檢關卡(開機成功、關鍵服務就緒、通訊正常),連續失敗達到門檻就自動切回舊分區。這裡有個容易漏的細節——**回滾防護(Anti-Rollback)**與回滾是兩件事:前者防的是攻擊者刻意刷回有漏洞的舊版(用單調遞增的安全版本號擋),後者是故障時的自救。兩個機制要同時成立,版本號策略就要設計好:正常回滾用的舊版必須仍在允許的安全版本範圍內。

信任鏈:每一段都要驗

一包更新從雲端到 ECU,至少過四道驗證:

  1. 來源驗證:更新包由誰簽?車端只信任持有正確金鑰簽出的包
  2. 傳輸完整性:TLS 保護傳輸,但不能只靠 TLS——包本身的簽章讓「落地後」仍可驗
  3. 安裝前驗證:寫入目標分區後、切換之前,重新計算並比對簽章與雜湊
  4. 開機驗證:Secure Boot 逐段驗簽,簽章不符直接擋下(見 Secure Boot 技術

金鑰管理是這條鏈的地基:簽章金鑰的保管、輪替、撤銷,以及車端信任錨(Root of Trust)的保護——這部分做壞,上面四道驗證都是紙糊的。

車這一端之外:UN R156 管的是「系統」

UN R156 要求的不是單次更新成功,而是軟體更新管理系統(SUMS)

  • 組態追蹤:每一台車上每一顆 ECU 現在跑什麼版本,要能回答——這正是 RXSWIN(軟體識別號)存在的理由
  • 相容性評估:這包更新對哪些車型、哪些硬體版本、哪些既有軟體組合有效?推送前要有依據
  • 型式認證影響判斷:更新有沒有改變已認證的功能?有的話走什麼程序
  • 對車主的告知:更新內容、需要的條件(停車、電量)、失敗的後果

工程上這代表 OTA 不只是車端功能,而是雲端車隊管理+車端更新代理+流程與紀錄的整體——稽核看的是這一整套。

測試清單:往壞處測

OTA 的測試價值幾乎都在異常路徑:

  • 傳輸中斷在各個階段(下載中、寫入中、驗證中、切換中)×斷點恢復
  • 更新中斷電——特別是分區切換的臨界窗口
  • 簽章錯誤、版本號回退、包內容與描述不符
  • 新版本自檢失敗 → 回滾 → 回滾後的版本回報是否正確
  • 車況前置條件(電量、駐車狀態)不滿足時的拒絕行為

這些情境在實車上又危險又難重現,HIL 環境(可控電源、可注入故障)是主戰場。


下一步

從更新代理、Secure Boot 到車隊組態管理,歐特莫夫(Vector Informatik 合作夥伴)協助建立可回滾、可稽核的 OTA 機制。