社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 7999|回复: 7

[经验] 浅谈汽车ECU升级(转载)

[复制链接]

1023

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-1-8 14:56:24 | 显示全部楼层 |阅读模式
  ECU固件升级,类似于手机固件升级,大概流程是实现Bootloader,完成EEPROM/Flash的读写,当然需要了解ECU所使用的MCU,MCU内部EEPROM/Flash和外部EEPROM/Flash的读写,学习门槛很高,别的不说,光是ECU固件逆向就不容易,因为需要了解10多种MCU汇编语言,还需要编写各种IDA插件,难度很大。本文对ECU固件升级进行基本的阐述,如果有错误的地方,恳请斧正。


此帖出自汽车电子论坛


回复

使用道具 举报

1023

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-1-8 14:56:44 | 显示全部楼层
一、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



回复

使用道具 举报

1023

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-1-8 14:57:03 | 显示全部楼层
二、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用的好像比较多。



回复

使用道具 举报

1023

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-1-8 14:57:22 | 显示全部楼层
七、MCU
  汽车有非常多个的ECU,非射频相关可称为APApplication Processor,射频相关可称为BPBaseband Processor),本文讨论的是AP,主要ECU有:BCMBody Control Module,PCMPower Control Module,PAMPark Assist Module)。BCM,即主板,需要了解BCM固件中PAMPCM的通信;PCM,发动机ECU,需要了解该ECU固件中MAP表的处理过程;UDS有可能集成在BCMPAM,需要了解该ECU固件中汽车诊断协议的处理过程。本文假设BCMPCMPAM三者独立存在,当然PCMPAM有可能集成,还有可能与BCM集成。PCMPAM这两个ECU非常关键,需要了解PCMPAM这两个ECU所采用的ECU厂商,ECU厂商所使用的MCU,以及ECU厂商所使用的EEprom/Flash等,本文主要关注PCM
  1PCM
  主要使用的MCU有:Infineon/ST C16X/ST10Infineon/ST Tricore TC17XXFreescale/Motorola MPC5XXFreescale/Motorola MPC5XXXFreescale/Motorola HC12XRenesas SH 70XXRenesas SH 72XXXRenesas V850Renesas M16/M32Renesas H8SX等。
  2PAM
  主要使用的MCU有:Renesas V850Freescale/Motorola HC12XRenesas M16/M32、常见MCU(8051PICAVR)等。主要使用V850HC12X
  3BCM
  可以分为主模块和副模块。主模块已知使用的MCUARMM16/M32,副模块可以认为是CAN模块,已知使用的MCUV850HC12X
  4EEPROM/Flash
  尚未关注。MCU外部EEPROM/Flash读写方式有:SPII2CMircoWire4Wire等。
八、ECU厂商
  1BOSCH
  采用的MCU3个版本:EDC15EDC16MED7MD7使用C16X;EDC16+U/C/CPMED9MD9使用MPC 5XX/MPC 5XXXEDC17MED17MD17使用Tricore。使用Tricore TC1796/TC1797的有:EDC17CPMED17MD17
  2SIEMENS CONTINENTAL
  主要使用C16X/ST10TricoreMPC5XXMPC5XXX,少量使用SH705XSH72XXX。使用Tricore TC1796/TC1797的有:Siemens SIMOS 8/12/18Siemens SID 208/807Siemens SDI4Continental PCR 2.1
  3DELPHI
  主要使用C16X/ST10TricoreMPC5XXMPC5XXX,部分使用SH705XSH72XXX。使用Tricore TC1766/TC1767的有:MT80/MT86,使用MPC 5566/5567的有:DCM3.5DCM3.7,使用SH72543/SH72544的有DCM3.7
  4MAGNETI MARELLI
  主要使用C16X/ST10MPC5XXMPC5XXXHC12X
  5MOTOROLA
  主要使用MPC5XXMPC5XXXHC12X
  6FORD EFI
  主要使用MPC5XXMPC5XXXHC12X
  7TRW
  主要使用MPC5XXMPC5XXXHC12X
  8TEMIC
  主要使用C16X/ST10MPC5XXMPC5XXXHC12X
  9DENSO:
  主要使用SH705XSH72XXXH8SXRenesas旗下的MCU都有可能使用。
  10MITSUBISHI MELCO
  主要使用M16/M32SH705XSH72XXXRenesas旗下的MCU都有可能使用。
  11SAGEM
  主要使用SH705XSH72XXXRenesas旗下的MCU都有可能使用。
  12VALEO
  主要使用SH705XSH72XXXRenesas旗下的MCU都有可能使用。



回复

使用道具 举报

1023

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-1-8 14:57:47 | 显示全部楼层
九、汽车厂商
  1、日系
  主要使用的MCUSH70XXSH72XXX,当然日系旗下的豪华品牌(本田讴歌、丰田雷克萨斯、日产英菲尼迪等)好像不一样,还有可能使用MPC5XXMPC5XXXC16XTricore等。
  2、福特与通用
  UDS使用的CAN协议不同,福特使用高速和中速CAN,通用使用高速和低速CAN,正常的是使用高速CAN。主要采用的MCU有:MPC5XXMPC 5XXXC16XTricore
  3、其它
  BoschECU厂商中的市场份额最大。国产、韩系如果使用Tricore,好像只采用Tricore TC1766/TC1767,应该没有采用TC1796/TC1797
十、ECU固件升级方式
  有两种方式,一种是调用ECU已经实现的BootLoader完成升级,这种方法称为通过EOBDEnhance On-Board Diagnostic)进行固件升级,另一种是独立实现Bootloader,这种方法称为通过Boot Mode进行固件升级,第二种方法还有一种表现形式称为BDM模式。实际上,通过EOBD升级能够支持大部分车型,对于采用TricoreMPC5XXXSH72XXXECUBootloader已锁,需要知道解锁算法/解锁密钥才能通过EOBD进行固件升级,对于这种情况,主流的升级工具都是采用Boot Mode进行固件升级。主流的升级工具好像很少考虑Renesas MCU,以K-TAGKESS V2CMD FLASH为例,这三大升级工具都不能完美支持Renesas MCU固件升级,KESS V2支持Renesas MCU相对比较好,倒是有专门针对Renesas MCU的固件升级工具,如Piasini Serial Suite
十一、ECU固件升级工具的实现
  有两种实现,一种是EOBD的实现,可以支持大部分车型,可以参考AUTOSARVCI来实现,MCUV850C16XTricoreMPC5XXMPC5XXXHC12XSH705XSH72XXX选取,或者选取常见的MCU,如STSTM32NXPLPCMircoChipPIC等。
  文章http://bbs.pediy.com/showthread.php?t=213087可供参考,注意该文章中关于ECU的描述是错误的;另一种是Boot Mode的实现,可以参考XCP来实现,虽然该实现是最通用的,硬件成本比EOBD的实现低,但在固件实现上需要实现各主流MCUBootloader,还要实现各EEPROM/Flash芯片的读写,难度很大。还有一种可能是选取K-TAGKESS V2CMD FLASH一种,逆向其固件,并重写其固件,这些升级工具PCB应该是单层的,逆向其PCB也是可能的。三大ECU升级工具(K-TAGKESS V2CMD FLASH)价格不菲,动辄上万,硬件成本最多价值1000,可以看出诊断数据很值钱,并且它们都不能完美支持Renesas旗下的MCU固件升级。



回复

使用道具 举报

1023

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-1-8 14:58:11 | 显示全部楼层
十二、ECU固件逆向
  需要了解的汇编语言有:Infineon/ST C16X/ST10Infineon/ST TricorePowerPCMPC5XX/MPC5XXX)、M68KHC12X)、Renesas V850 E1/E2Renesas SH2/SH4Renesas M16/M32Renesas H8SX8051ARMPICAVRX86/X64等。
  固件逆向通常是逆向固件加解密算法、固件检验算法、Bootloader解锁算法/解锁密钥、MAP表检验算法、ECU安全访问算法、UDS中汽车诊断协议的实现、UDSECU固件升级的实现、UDS消息检验算法、随机数生成算法等。对于大部分MCU固件,IDA都能反汇编,如果不能反汇编还需要编写反汇编插件,IDA并不知道固件Bin的内存映射方式,还需要编写ECU固件BinLoader插件。IDA插件编写方式有IDAPythonIDA SDK两种,推荐IDAPython。从这里可以看出,固件逆向主要是逆向算法,如果能实现一种IDA插件,该插件能够识别包含算术运算符、逻辑运算符的循环块,则将会大幅度减少固件逆向所需要的时间,实现该插件应该需要控制流分析方面的知识。
  如果BCMPCMPAM有使用操作系统,还要知道使用哪种操作系统,越来越多的汽车PCM采用的MCUTricoreMPC5XXXSH72XXX,越来越多的ECU固件根据AUTOSAR标准开发。
十三、汽车改装
  动力相关的汽车改装,个人认为可以分为以下5个等级:
  1、外观改装,根据空气动力学进行动力升级等。
  2、修改PCM固件中的MAP表,修改UDS中的汽车诊断协议,修改BCM固件中与PCMPAM的通信协议,用探针检测汽车各部件运行状态。该等级只涉及软件改装,主要涉及的MAP表有:Driver wish mapTorque limiter mapSmoke limiter mapInjection duration mapBoost target mapBoost limit map Single value boost limiter mapEGR mapPump voltage table等,当然日系并不是这些表。使用的ECU MAP修改软件有:ECM TitaniumWinOls、官方软件(不容易获取)等。这个步骤也就是通常我们所说的ECU调校(ECU tuning)。因为在这个等级上进行改装很容易出现问题,所以需要在UDS中增加汽车诊断消息,并且还要修改BCM固件中PCMPAM的通信协议,用探针检测汽车各部件运行状态。探针好像价格不菲,很多ECU调校只是修改MAP表,汽车很容易出现问题。严格意义上讲,一个map表是一个或多个偏微分方程的解,当然在实践中都是根据经验进行修改map表。在这个等级上,汽车动力能提升10%-30%左右,要想再提升就需要下一个等级。
  3、替换传感器、喷油嘴、变速箱、刹车片等。在这个等级上,等级2改装是必备的,汽车动力能提升50%-70%左右,要想再提升就需要下一个等级。
  4、替换PCMPAM、发动机等。在这个等级上,等级2、等级3改装是必备的,汽车动力提升
80%-100%左右,要想再提升的话就可能要涉及汽车底盘。
  5、增加ECU。在这个等级上,主要是减少等级4的改装复杂度的,因为等级4要想更换PCM
PAMECU是非常困难的,所以是采用外挂ECU进行硬件hook来实现。当然,还有可能是增加汽车更多的功能。
  国外关于汽车改装的相关产业已非常成熟,等级1-5都有实现,而国内呢,还处在等级1的外观美容上,大量的等级2改装只是国外的代理,只有少量的等级2改装是本地的。
十四、总结
  汽车诊断,涉及多方面的内容,本文主要是对非射频相关的ECU中的发动机ECU进行初探,对于射频相关的ECUWIFI、汽车钥匙等),尚未关注,对于ECU使用的EEPROM/Flash,尚未关注,对于汽车诊断中的探针部件,尚未关注。
  PS:附件带有KESS V2支持的汽车品牌列表,根据本文可以推断出各汽车品牌所使用的MCU(日系主要使用Renesas MCU,国产主要使用C16X/ST10Tricore



回复

使用道具 举报

402

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-2-9 21:29:29 来自手机 | 显示全部楼层
这是CAN升级么?

点评

目前来说支持CAN升级的ECU是极少的, 更过的是通过CAN来升级MAP表。  详情 回复 发表于 2018-2-11 10:05


回复

使用道具 举报

1023

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-2-11 10:05:23 | 显示全部楼层

目前来说支持CAN升级的ECU是极少的,
更过的是通过CAN来升级MAP表。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-4-23 17:29 , Processed in 0.226978 second(s), 17 queries , Redis On.

快速回复 返回顶部 返回列表