汽车 ECU 升级初探
ECU 固件升級,類似于手機固件升級,大概流程是實現 Bootloader,完成 EEPROM/Flash 的讀寫,當然需要了解 ECU 所使用的 MCU,MCU 內部EEPROM/Flash 和外部 EEPROM/Flash 的讀寫,學習門檻很高,別的不說,光是 ECU 固件逆向就不容易,因為需要了解 10 多種 MCU 匯編語言,還需要編寫各種 IDA 插件,難度很大。本文對 ECU 固件升級進行基本的闡述,如果有錯誤的地方,懇請斧正。
一、UDS
UDS,UNIFIED DIAGNOSTIC SERVICES,它是汽車診斷的核心,常用的 UDS 服務 SID 如下:
OBD2_MODE_SHOW_CURRENT_DATA:0x01
OBD2_MODE_SHOW_FREEZE_FRAME:0x02
OBD2_MODE_READ_DTC:0x03
OBD2_MODE_CLEAR_DTC:0x04
OBD2_MODE_TEST_RESULTS_NON_CAN:0x05
OBD2_MODE_TEST_RESULTS_CAN:0x06
OBD2_MODE_READ_PENDING_DTC:0x07
OBD2_MODE_CONTROL_OPERATIONS:0x08
OBD2_MODE_VEHICLE_INFORMATION:0x09
OBD2_MODE_READ_PERM_DTC:0x0A
OBD2_MODE_ENHANCED_DIAGNOSTIC_REQUEST :0x22
UDS_SID_START_DIAGNOSTIC_SESSION:0x10
UDS_SID_ECU_RESET:0x11
UDS_SID_READ_FREEZE_FRAME_DATA:0x12
UDS_SID_READ_DIAGNOSTIC_TROUBLE_CODES: 0x13
UDS_SID_CLEAR_DIAGNOSTIC_INFORMATION:0x14
UDS_SID_READ_DIAGNOSTIC_TROUBLE_CODES_STATUS :0x17
UDS_SID_READ_DTC_BY_STATUS:0x18
UDS_SID_READ_DTC_INFORMATION:0x19
UDS_SID_READ_ECU_ID :0x1A
UDS_SID_STOP_DIAGNOSTIC_SESSION:0x20
UDS_SID_READ_DATA_BY_LOCAL_ID:0x21
UDS_SID_READ_DATA_BY_COMMAND_ID:0x22
UDS_SID_READ_MEMORY_BY_ADDRESS:0X23
UDS_SID_READ_SCALING_DATA_BY_IDENTIFIER:0x24
UDS_SID_STOP_REPEATED_DATA_TRANSMISSION:0x25
UDS_SID_SET_DATA_RATES:0X26
UDS_SID_SECURITY_ACCESS:0X27
UDS_SID_COMMUNICATION_CONTROL:0x28
UDS_SID_READ_DATA_BY_PERIODIC_IDENTIFIER:0x29
UDS_SID_READ_DATA_BY_ID_PERIODIC:0x2A
UDS_SID_DYNAMICALLY_DEFINE_LOCAL_ID:0x2C
UDS_SID_DEFINE_PID_BY_MEMORY_ADDRESS:0x2D
UDS_SID_WRITE_DATA_BY_COMMAND_ID:0x2E
UDS_SID_INPUT_OUTPUT_CONTROL_BY_COMMAND_ID:0x2F
UDS_SID_INPUT_OUTPUT_CONTROL_BY_LOCAL_ID:0x30
UDS_SID_START_ROUTINE_BY_LOCAL_ID:0x31
UDS_SID_STOP_ROUTINE_BY_LOCAL_ID:0x32
UDS_SID_REQUEST_ROUTINE_RESULTS_BY_LOCAL_ID:0x33
UDS_SID_REQUEST_DOWNLOAD:0x34
UDS_SID_REQUEST_UPLOAD:0x35
UDS_SID_ TRANSFER_DATA:0x36
UDS_SID_REQUEST_TRANSFER_EXIT:0x37
UDS_SID_START_ROUTINE_BY_ADDRESS:0x38
UDS_SID_STOP_ROUTINE_BY_ADDRESS:0x39
UDS_SID_REQUEST_ROUTINE_RESULTS_BY_ADDRESS:0x3A
UDS_SID_WRITE_DATA_BY_LOCAL_ID:0x3B
UDS_SID_WRITE_MEMORY_BY_ADDRESS:0x3D
UDS_SID_TESTER_PRESENT:0x3E
UDS_SID_NEGATIVE_RESPONSE:0x7F
UDS_SID_ESC_CODE:0x80
UDS_SID_START_COMMUNICATION :0x81
UDS_SID_STOP_COMMUNICATION:0x82
UDS_SID_ACCESS_TIMING:0x83
UDS_SID_SECURED_DATA_TRANS:0x84
UDS_SID_CONTROL_DTC_SETTINGS:0x85
UDS_SID_RESPONSE_ON_EVENT:0x86
UDS_SID_LINK_CONTROL:0x87
FORD_REQUEST_DATA_DIAGNOSTIC_DATA_PACKET:0xA0
FORD_DYNANICALLY_DEFINE_DIAGNOSTIC_DATA_PACKET:0xA1
FORD_DIAGNOSTIC_COMMAND:0xB1
GM_PROGRAMMED_STATE:0xA2
GM_PROGRAMMING_MODE:0xA5
GM_READ_DIAGNOSTIC_INFO:0xA9
GM_READ_DATA_BY_ID:0xAA
GM_DEVICE_CONTROL:0xAE
二、AUTOSAR
AUTOSAR(AUTomotive Open System ARchitecture),支持的協議有:CAN, FlexRay, LIN, Ethernet等。它是 ECU 固件開發的標準,UDS 屬于 AUTOSAR的一部分,越來越多的 ECU 固件開發使用 AUTOSAR。
三、XCP
XCP(Universal Measurement and Calibration Protocol),支持的協議有: CAN、SPI、 SCI,、TCP/IP,、UDP/IP,、USB、FlexRay等。它是ECU校準協議,擴展于CCP(CAN Calibration Protocol)。
四、ODX
ODX((Open Diagnostic Data Exchange),基于XML,用于描述與汽車診斷相關數據,是汽車診斷格式標準。
五、VCI 和 MVCI
VCI(Vehicle Communication Interfaces),MVCI(Multiple Vehicle Connect Interface),都是汽車外部 ECU(診斷工具、診斷軟件等)和內部 ECU 的通信接口標準,對于常用的 ECU 診斷(包含固件升級),使用 VCI 就足夠了。VCI支持的協議有:SAE J1850 PWM/VPW、ISO 15765-4(CAN)、ISO 9141-2、ISO 14230-4(KWP 2000)、SAE J2818(KWP 1281)、SAE J1979。SAE J1979主要是大型車使用,SAE J2818主要是大眾使用,在CAN協議上,又分高速CAN、中速CAN、低速CAN。ISO 9141-2、KWP 2000、KWP 1281類似于串口,統稱K-Line。
六、汽車發動機
發動機有:TD、TDI 、TSI 、FSI、 TFSI、 TDCI 、TDDI 、TURBO 、V6 、VR6、 V8等,TDI、TSI、FSI、TFSI用的好像比較多。
七、MCU
汽車有非常多個的 ECU,非射頻相關可稱為 AP(Application Processor),射頻相關可稱為 BP(Baseband Processor),本文討論的是 AP,主要 ECU 有:BCM(Body Control Module),PCM(Power Control Module),PAM(Park Assist Module)。BCM,即主板,需要了解 BCM 固件中 PAM 和 PCM 的通信;PCM,發動機 ECU,需要了解該 ECU 固件中 MAP 表的處理過程;UDS 有可能集成在 BCM 或 PAM,需要了解該 ECU 固件中汽車診斷協議的處理過程。本文假設 BCM、PCM、PAM 三者獨立存在,當然 PCM 和 PAM 有可能集成,還有可能與 BCM 集成。PCM 和 PAM 這兩個 ECU 非常關鍵,需要了解 PCM 和 PAM 這兩個 ECU 所采用的 ECU 廠商,ECU 廠商所使用的 MCU,以及 ECU 廠商所使用的 EEprom/Flash 等,本文主要關注 PCM。
1、PCM
主要使用的 MCU 有:Infineon/ST C16X/ST10、Infineon/ST Tricore TC17XX、Freescale/Motorola MPC5XX、Freescale/Motorola MPC5XXX、Freescale/Motorola HC12X、Renesas SH 70XX、Renesas SH 72XXX、Renesas V850、Renesas M16/M32、Renesas H8SX等。
2、PAM
主要使用的MCU有:Renesas V850、Freescale/Motorola HC12X、Renesas M16/M32、常見MCU(8051、PIC、AVR)等。主要使用V850、HC12X。
3、BCM
可以分為主模塊和副模塊。主模塊已知使用的MCU有ARM、M16/M32,副模塊可以認為是CAN模塊,已知使用的MCU有V850、HC12X。
4、EEPROM/Flash
尚未關注。MCU 外部 EEPROM/Flash 讀寫方式有:SPI、I2C、MircoWire、4Wire等。
八、ECU 廠商
1、BOSCH
采用的 MCU 有3個版本:EDC15、EDC16、MED7、MD7使用C16X;EDC16+U/C/CP、MED9、MD9使用MPC 5XX/MPC 5XXX;EDC17、MED17、MD17使用Tricore。使用Tricore TC1796/TC1797的有:EDC17CP、MED17、MD17。
2、SIEMENS CONTINENTAL
主要使用C16X/ST10、Tricore、MPC5XX、MPC5XXX,少量使用SH705X、SH72XXX。使用Tricore TC1796/TC1797的有:Siemens SIMOS 8/12/18、Siemens SID 208/807、Siemens SDI4、 Continental PCR 2.1。
3、DELPHI
主要使用C16X/ST10、Tricore、MPC5XX、MPC5XXX,部分使用SH705X、SH72XXX。使用Tricore TC1766/TC1767的有:MT80/MT86,使用MPC 5566/5567的有:DCM3.5、DCM3.7,使用SH72543/SH72544的有DCM3.7。
4、MAGNETI MARELLI
主要使用C16X/ST10、MPC5XX、MPC5XXX、HC12X。
5、MOTOROLA
主要使用MPC5XX、MPC5XXX、HC12X。
6、FORD EFI
主要使用MPC5XX、MPC5XXX、HC12X。
7、TRW
主要使用MPC5XX、MPC5XXX、HC12X。
8、TEMIC
主要使用C16X/ST10、MPC5XX、MPC5XXX、HC12X。
9、DENSO:
主要使用SH705X、SH72XXX、H8SX,Renesas旗下的MCU都有可能使用。
10、MITSUBISHI MELCO:
主要使用M16/M32、SH705X、SH72XXX,Renesas旗下的MCU都有可能使用。
11、SAGEM:
主要使用 SH705X、SH72XXX,Renesas 旗下的 MCU 都有可能使用。
12、VALEO:
主要使用 SH705X、SH72XXX,Renesas 旗下的 MCU 都有可能使用。
九、汽車廠商
1、日系
主要使用的 MCU 是 SH70XX、SH72XXX,當然日系旗下的豪華品牌(本田謳歌、豐田雷克薩斯、日產英菲尼迪等)好像不一樣,還有可能使用MPC5XX、MPC5XXX、C16X、Tricore等。
2、福特與通用
UDS 使用的 CAN 協議不同,福特使用高速和中速 CAN,通用使用高速和低速 CAN,正常的是使用高速 CAN。主要采用的 MCU 有:MPC5XX、MPC 5XXX、C16X、Tricore。
3、其它
Bosch 在 ECU 廠商中的市場份額最大。國產、韓系如果使用 Tricore,好像只采用 Tricore TC1766/TC1767,應該沒有采用 TC1796/TC1797。
十、ECU 固件升級方式
有兩種方式,一種是調用 ECU 已經實現的 BootLoader 完成升級,這種方法稱為通過 EOBD(Enhance On-Board Diagnostic)進行固件升級,另一種是獨立實現 Bootloader,這種方法稱為通過 Boot Mode 進行固件升級,第二種方法還有一種表現形式稱為BDM模式。實際上,通過 EOBD 升級能夠支持大部分車型,對于采用Tricore、MPC5XXX、SH72XXX的 ECU,Bootloader已鎖,需要知道解鎖算法/解鎖密鑰才能通過 EOBD 進行固件升級,對于這種情況,主流的升級工具都是采用 Boot Mode 進行固件升級。主流的升級工具好像很少考慮Renesas MCU,以K-TAG、KESS V2、CMD FLASH為例,這三大升級工具都不能完美支持 Renesas MCU 固件升級,KESS V2 支持 Renesas MCU 相對比較好,倒是有專門針對 Renesas MCU 的固件升級工具,如Piasini Serial Suite。
十一、ECU 固件升級工具的實現
有兩種實現,一種是 EOBD 的實現,可以支持大部分車型,可以參考 AUTOSAR 或 VCI 來實現,MCU從V850、C16X、Tricore、MPC5XX、MPC5XXX、HC12X、SH705X、SH72XXX 選取,或者選取常見的 MCU,如 ST的 STM32、NXP 的 LPC、MircoChip 的 PIC 等。
文章 http://bbs.pediy.com/showthread.php?t=213087 可供參考,注意該文章中關于 ECU 的描述是錯誤的;另一種是 Boot Mode 的實現,可以參考 XCP 來實現,雖然該實現是最通用的,硬件成本比 EOBD 的實現低,但在固件實現上需要實現各主流 MCU 的 Bootloader,還要實現各 EEPROM/Flash 芯片的讀寫,難度很大。還有一種可能是選取 K-TAG、KESS V2、CMD FLASH 一種,逆向其固件,并重寫其固件,這些升級工具 PCB 應該是單層的,逆向其 PCB 也是可能的。三大 ECU 升級工具(K-TAG、KESS V2、CMD FLASH)價格不菲,動輒上萬,硬件成本最多價值1000,可以看出診斷數據很值錢,并且它們都不能完美支持 Renesas 旗下的 MCU 固件升級。
十二、ECU 固件逆向
需要了解的匯編語言有:Infineon/ST C16X/ST10、Infineon/ST Tricore、PowerPC(MPC5XX/MPC5XXX)、M68K(HC12X)、Renesas V850 E1/E2、Renesas SH2/SH4、Renesas M16/M32、Renesas H8SX、8051、ARM、PIC、AVR、X86/X64等。
固件逆向通常是逆向固件加解密算法、固件檢驗算法、Bootloader解鎖算法/解鎖密鑰、MAP 表檢驗算法、ECU 安全訪問算法、UDS中汽車診斷協議的實現、UDS 中 ECU 固件升級的實現、UDS 消息檢驗算法、隨機數生成算法等。對于大部分 MCU 固件,IDA 都能反匯編,如果不能反匯編還需要編寫反匯編插件,IDA 并不知道固件 Bin 的內存映射方式,還需要編寫 ECU 固件 Bin 的Loader 插件。IDA 插件編寫方式有 IDAPython 和 IDA SDK 兩種,推薦IDAPython。從這里可以看出,固件逆向主要是逆向算法,如果能實現一種 IDA插件,該插件能夠識別包含算術運算符、邏輯運算符的循環塊,則將會大幅度減少固件逆向所需要的時間,實現該插件應該需要控制流分析方面的知識。
如果 BCM、PCM、PAM 有使用操作系統,還要知道使用哪種操作系統,越來越多的汽車 PCM 采用的 MCU 是 Tricore、MPC5XXX、SH72XXX,越來越多的 ECU 固件根據 AUTOSAR 標準開發。
十三、汽車改裝
動力相關的汽車改裝,個人認為可以分為以下 5 個等級:
1、外觀改裝,根據空氣動力學進行動力升級等。
2、修改 PCM 固件中的MAP表,修改 UDS 中的汽車診斷協議,修改BCM固件中與PCM和PAM的通信協議,用探針檢測汽車各部件運行狀態。該等級只涉及軟件改裝,主要涉及的 MAP 表有:Driver wish map、Torque limiter map、Smoke limiter map、Injection duration map、Boost target map、Boost limit map 、Single value boost limiter map、EGR map、Pump voltage table等,當然日系并不是這些表。使用的ECU MAP修改軟件有:ECM Titanium、WinOls、官方軟件(不容易獲取)等。這個步驟也就是通常我們所說的ECU調校(ECU tuning)。因為在這個等級上進行改裝很容易出現問題,所以需要在UDS中增加汽車診斷消息,并且還要修改BCM固件中PCM和PAM的通信協議,用探針檢測汽車各部件運行狀態。探針好像價格不菲,很多ECU調校只是修改MAP表,汽車很容易出現問題。嚴格意義上講,一個map表是一個或多個偏微分方程的解,當然在實踐中都是根據經驗進行修改map表。在這個等級上,汽車動力能提升10%-30%左右,要想再提升就需要下一個等級。
3、替換傳感器、噴油嘴、變速箱、剎車片等。在這個等級上,等級2改裝是必備的,汽車動力能提升50%-70%左右,要想再提升就需要下一個等級。
4、替換 PCM、PAM、發動機等。在這個等級上,等級2、等級3改裝是必備的,汽車動力提升
80%-100%左右,要想再提升的話就可能要涉及汽車底盤。
5、增加 ECU。在這個等級上,主要是減少等級 4 的改裝復雜度的,因為等級4要想更換 PCM、
PAM 等 ECU 是非常困難的,所以是采用外掛 ECU 進行硬件 hook 來實現。當然,還有可能是增加汽車更多的功能。
國外關于汽車改裝的相關產業已非常成熟,等級1-5都有實現,而國內呢,還處在等級1的外觀美容上,大量的等級2改裝只是國外的代理,只有少量的等級2改裝是本地的。
十四、總結
汽車診斷,涉及多方面的內容,本文主要是對非射頻相關的 ECU 中的發動機ECU 進行初探,對于射頻相關的ECU(WIFI、汽車鑰匙等),尚未關注,對于ECU使用的EEPROM/Flash,尚未關注,對于汽車診斷中的探針部件,尚未關注。
總結
以上是生活随笔為你收集整理的汽车 ECU 升级初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 瀚高数据库解锁
- 下一篇: c语言中应用程序错误,大师搞定win7系