本書結合汽車電控系統軟件中的BootLoader程序和上位機及腳本介紹UDS的使用場景,并深入講解其功能,分為基礎篇、核心篇、提升篇三部分。主要內容包括新能源汽車電控系統基礎知識、基于CAN/LIN總線的通信協議、UDS協議棧架構、基于UDS的BootLoader、通過腳本實現UDS客戶端通信、UDS測試等內容。
本書首先介紹新能源汽車電控系統基礎、常用總線通信協議和UDS基礎知識,讓讀者站在電控系統的角度了解UDS等協議棧的作用和診斷的相關知識,然后根據ISO 15765和ISO 14229標準的內容從使用者的角度對標準的實現進行詳細的解釋,最后在診斷協議的基礎上以BootLoader程序和上位機及腳本的實現講解其在客戶端和服務器端的應用及其測試環境。
本書適合具有一定車載嵌入式軟件開發和測試基礎知識的讀者,也可作為普通高等院校汽車相關專業的本科生或研究生學習汽車嵌入式軟件開發的參考書,亦可供汽車電子行業軟件工程師、總線網絡開發工程師和總線測試工程師學習和參考。
本書具有較強的專業性和針對性。作者長期從事新能源汽車整車控制、電子電氣、軟件開發等工作,非常熟悉UDS服務,將多年的工作經驗進行了梳理和整合,形成了本書,以饗讀者。全書以汽車電控系統、車載總線通信和診斷協議標準為基礎,詳細介紹了UDS協議棧架構、CAN驅動層、TP層、診斷應用層的實現,并圍繞BootLoader、客戶端通信、測試環節,介紹UDS診斷與實現。不但重視理論介紹,也與實踐緊密結合,有助于提升讀者的理論水平和解決實際問題的能力。
為推動新能源汽車產業高質量發展,2020年10月,國務院辦公廳印發《新能源汽車產業發展規劃(20212035年)》,確定了未來新能源汽車將繼續向電動化、網聯化、智能化方向深入發展,新能源汽車及其配套產業將迎來新一輪爆發。
在汽車新四化的發展趨勢下,整車電子電氣架構逐漸從分散走向集中,域控制器或區域控制器成為下一代整車電控系統的核心。面對整車電子電氣架構的不斷升級,AUTOSAR架構已經成為具備功能安全要求的分布式電子控制單元和域控制器的主流軟件架構。
隨著診斷、OTA、智能駕駛、娛樂等功能需求的增長,其對整車通信帶寬的要求日益增加,車載以太網成為下一代汽車的主要通信技術。由此,在汽車行業也提出了SOA(Service-Oriented Architecture)架構,即面向服務的架構。
UDS(Unified Diagnostic Service)即統一診斷服務,是一套為所有車輛提供統一診斷的應用層服務,已經成為新能源汽車電子控制單元的能力。未來,汽車將面向不同場景、不同應用和不同用戶提供差異化的功能,和手機一樣提供功能升級,在此背景下,UDS的作用更為凸顯。目前汽車OTA技術就是以UDS為基礎來實現車輛遠程升級。
本書是作者多年在引導程序、基礎軟件及工具鏈開發經驗的基礎上應用UDS的總結。本書分為基礎篇、核心篇和提升篇。基礎篇包括第1章至第3章,從基礎入手,便于讀者了解汽車電控系統和UDS在電控系統軟件中的作用。第1章介紹汽車電控系統的基礎知識和目前廣泛使用的軟件架構及功能安全的概念;第2章介紹常用的車載總線通信技術以及基于車載總線通信技術的應用;第3章介紹OBD和UDS兩種診斷協議的基礎知識和參考標準。核心篇包括第4章至第7章,重點介紹UDS的核心知識。第4章介紹UDS協議棧架構,包括分層架構和數據流分析等;第5章基于恩智浦S32K144芯片介紹CAN驅動層及其實現;第6章重點解析了UDS協議棧中TP層的標準及其實現;第7章重點介紹了UDS協議棧中診斷應用層及其實現。提升篇包括第8章至第10章,介紹基于UDS的應用和測試以及PC端上位機/腳本的開發。第8章介紹了基于UDS的BootLoader的原理和實現;第9章介紹了基于Python語言的UDS的腳本開發,讓讀者了解PC端軟件的原理和架構;第10章介紹了基于Vector工具鏈的UDS測試環境和測試流程。
本書由向滿和童維勇編寫,由童維勇先生審閱。童維勇先生是中國自動化學會會員,自動化專業副高級職稱,有多年世界500強外資企業研發管理經驗,并在國內新能源汽車知名企業擔任研發總監等職務,持有多項授權專利并承擔深圳市技術攻關項目。
本書在編寫過程中力求邏輯嚴謹和內容正確,相關代碼都經過測試,并在實際項目中使用。但是由于編者水平有限、編寫時間緊張,難免有表達不清晰、邏輯不嚴謹和內容錯誤之處,敬請讀者指正。
編 者
向滿: 汽車電子軟件開發專家。長期從事新能源汽車車整車控制器VCU,車身電子ECU,電子油泵等電控系統軟件開發。先后就職于深圳航盛電子、德昌電機、長城汽車等汽車電子領域知名企業。
童維勇:高級工程師,中國自動化學會2022杰出自動化工程師獎獲得者。深圳市軟件行業協會和深圳自動化學會專委會專家。長期從事嵌入式軟件開發和研發管理工作,曾成功主導開發了多款新能源汽車電控產品。
前言
基礎篇
第1章 汽車電控系統 2
1.1 汽車電控系統介紹 2
1.1.1 電控系統架構 2
1.1.2 工作原理 3
1.1.3 分類 5
1.1.4 發展情況 5
1.2 汽車電控系統開發 8
1.2.1 軟件開發 10
1.2.2 硬件開發 10
1.3 AUTOSAR和功能安全 10
1.3.1 AUTOSAR架構介紹 10
1.3.2 功能安全概念介紹 11
第2章 車載總線通信介紹 13
2.1 CAN總線和LIN總線通信基礎 13
2.1.1 CAN總線基礎 14
2.1.2 LIN總線基礎 18
2.2 常用車載通信協議 24
2.2.1 OSEK網絡管理協議 24
2.2.2 CCP和XCP協議 26
2.2.3 J1939協議 28
2.2.4 UDS協議 29
2.3 其他總線通信技術 29
2.3.1 CANFD 29
2.3.2 車載以太網 30
第3章 診斷協議及其參考標準 32
3.1 OBD協議 32
3.1.1 OBD協議介紹 32
3.1.2 OBD協議參考標準 38
3.2 UDS協議 39
3.2.1 UDS協議介紹 39
3.2.2 UDS協議參考標準 39
3.3 UDS協議與OBD協議的區別 40
核心篇
第4章 UDS協議棧架構 42
4.1 UDS協議軟件架構 42
4.1.1 CAN驅動層 44
4.1.2 TP層 45
4.1.3 診斷應用層 45
4.2 UDS數據流分析 46
4.3 如何實現UDS 48
第5章 CAN驅動層及其實現 49
5.1 S32K系列微控制器介紹 49
5.2 CAN驅動層提供的功能 51
5.3 S32K144的CAN驅動配置 51
第6章 TP層及其實現 60
6.1 TP層的作用 60
6.2 TP層協議 61
6.2.1 TP層協議概述 61
6.2.2 TP層相關術語定義 62
6.2.3 TP層總覽及其服務概述 63
6.2.4 網絡層協議 71
6.3 TP層協議實現 83
6.3.1 單幀 83
6.3.2 首幀 87
6.3.3 流控幀 90
6.3.4 連續幀 95
6.3.5 TP層參數 101
6.4 通信報文解析 102
6.4.1 單包報文傳輸 103
6.4.2 多包報文傳輸 103
第7章 診斷應用層及其實現 105
7.1 診斷應用層的作用 106
7.2 尋址概念 107
7.2.1 物理尋址 107
7.2.2 功能尋址 107
7.3 UDS請求與響應 108
7.3.1 UDS請求 108
7.3.2 UDS響應 110
7.4 UDS會話模式和安全訪問 122
7.5 DTC信息 125
7.5.1 DTC格式 125
7.5.2 DTC相關的術語 125
7.5.3 DTC狀態位定義和DTC狀態掩碼 126
7.5.4 DTC故障檢測 133
7.5.5 DTC老化機制 135
7.5.6 DTC信息存儲 136
7.6 常用診斷服務列表 139
7.6.1 BootLoader程序常用服務 140
7.6.2 應用程序常用服務 140
7.7 診斷應用層服務解析 140
7.7.1 10服務診斷會話控制 141
7.7.2 11服務電控單元復位 143
7.7.3 27服務安全訪問 145
7.7.4 28服務通信控制 147
7.7.5 3E服務測試設備在線 149
7.7.6 85服務控制DTC設置 150
7.7.7 22服務根據DID讀數據 151
7.7.8 23服務通過地址讀內存 153
7.7.9 2E服務通過DID寫數據 155
7.7.10 3D服務通過地址寫內存 156
7.7.11 14服務清除診斷信息 157
7.7.12 19服務讀取DTC信息 158
7.7.13 2F服務輸入輸出控制 163
7.7.14 31服務例程控制 165
7.7.15 34服務請求下載 167
7.7.16 36服務傳輸數據 169
7.7.17 37服務請求退出傳輸 170
7.8 診斷應用層定時參數分析 171
7.8.1 定時參數分析 171
7.8.2 定時參數處理 172
7.9 診斷報文分析 173
提升篇
第8章 基于UDS的BootLoader 178
8.1 BootLoader介紹 178
8.2 BootLoader機制介紹 179
8.3 BootLoader的一般要求 181
8.3.1 通信要求 181
8.3.2 安全要求 181
8.4 BootLoader詳細流程 182
8.4.1 Pre-Programming 階段 182
8.4.2 Programming階段 183
8.4.3 Post-Programming階段 184
8.5 BootLoader軟件架構與實現 185
8.5.1 最小系統和基本模塊 185
8.5.2 內存分配 186
8.5.3 中斷向量表的重映射 187
8.5.4 閃存驅動 187
8.5.5 程序跳轉 187
8.6 電控單元OTA介紹 188
第9章 通過腳本實現UDS客戶端通信 190
9.1 上位機和腳本編程語言 190
9.2 基于Python語言的UDS腳本 190
9.2.1 PeakCAN介紹 191
9.2.2 PeakCAN二次開發介紹 191
9.2.3 基于Python語言實現UDS通信 192
9.3 通過腳本實現上位機Flash BootLoader 203
第10章 UDS測試 204
10.1 Vector系統介紹 204
10.2 基于Vector工具鏈的測試系統介紹 204
10.3 UDS測試操作指導 205
參考文獻 213