首页
社区
课程
招聘
汽车诊断工具的实现
发表于: 2016-10-7 00:55 16478

汽车诊断工具的实现

2016-10-7 00:55
16478

本文是最基本的汽车诊断工具的实现概述,如果有错误的地方,恳请斧正。
一、概述
  实现基于OBD-Ⅱ接口,实现协议有SAE J1850 PWM/VPW、ISO 9141-2、ISO 14230-4(KWP 2000)、ISO 15765-4(CAN)。CAN还分为高速CAN、福特中速CAN、通用单线低速CAN,福特中速CAN还分为福特中速诊断CAN和福特中速多媒体CAN。OBD-Ⅱ接口上,SAE J1850 PWM/VPW使用针脚2和10,ISO 9141-2/ISO 14230-4使用针脚7和15,高速CAN使用针脚6和14,福特中速诊断CAN使用针脚3和11,福特中速多媒体CAN使用针脚1和8,通用单线低速CAN使用针脚1。
二、开源实现
  Openxc:只支持高速CAN和福特中速CAN。
  CANtact:只支持高速CAN。
  AllPro:不支持福特中速CAN和通用单线低速CAN。
  G.E.M:“Gasoline Economy Management G.E.M.",类似AllPro。
三、实现
  协议的实现要有控制器和收发器。
  1、控制器
    多协议控制器:ELM327/STN1110和STN1170/STN2120。国内已经有山寨ELM327的芯片,很多支持蓝牙的产品就是山寨芯片实现的,AllPro就是基于ELM327控制器实现产品的开源实现,和山寨芯片的实现应该不同。这些控制器都有缺点:第一,都是基于MCU实现,只提供了串口方式,如果还有其它操作还要再加个MCU,这样倒不如就用MCU实现;第二,引脚功能固定,ELM327/STN1110的通用单线低速CAN的实现很麻烦,实现方法未知,如果按官方的推荐实现,ELM327/STN1110不支持福特中速诊断CAN和福特中速多媒体CAN,STN1170/ST2120不支持福特中速多媒体CAN,由于高速CAN和福特中速CAN只是OBD-Ⅱ针脚和速率的不同,必须重定向福特中速CAN到高速CAN,不推荐。
    SAE J1850 PWM/VPW:类似PWM,使用MCU的PWM作为控制器。
    ISO 9141-2/ISO 14230-4:类似串口,使用MCU的串口作为控制器。
    CAN:CAN控制器可以有1、2、3、4个,推荐使用1或2个控制器MCP 2515,或者选择集成1或2个CAN控制器的MCU。
  2、收发器
    SAE J1850 PWM/VPW:由于使用MCU的PWM作为控制器,收发器只需要区分SAE J1850 PWM和SAE J1850 VPW,需要1个电压比较器,SAE J1850 PWM使用OBD-Ⅱ接口针脚2和10,需要进行区分,需要1个电压比较器,SAE J1850 VPW使用OBD-Ⅱ接口针脚2,总共需要2个比较器,选择1个LM2903,带有2个电压比较器。
    ISO 9141-2/ISO 14230-4:由于使用了MCU的串口作为控制器,因此使用针对此协议的串口收发器。ISO 9141-2使用OBD-Ⅱ接口针脚7和15,需要2个,ISO 14230-4使用OBD-Ⅱ接口针脚7,总共需要2个,收发器选择Si9241A。
    CAN:高速CAN收发器选择SN65HD230,通用单线低速CAN收发器选择MC33897。高速CAN收发器可以有1、2、3个,通用单线低速CAN收发器有1个,使用1或2个高速CAN收发器。
  3、实现
  可能的两种实现的主要IC:
    高性能版本:1个LPC1769FB100+1个TJA 1048T+1个MC33897+1个LM2903+2个Si9241A。
    低功耗版本:1个dsPIC33EP256GP504+1个SN65HD230+1个MC33897+1个LM2903+2个Si9241A+1个ISP1181A。
四、VCI
  VCI,Vehicle Communication Interfaces,有SAE J2534和SAE J2534-2,区别是SAE J2534不支持通用单线低速CAN,而SAE J2534-2支持。
五、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_DIAGNOSTIC_CONTROL:0x10
    UDS_SID_ECU_RESET:0x11
    UDS_SID_READ_FAILURE_RECORD:0x12
    UDS_SID_CLEAR_DTC:0x14
    UDS_SID_READ_DTC: 0x19
    UDS_SID_READ_DID_BY_ID:0x1A
    UDS_SID_RESTART_COMMUNICATIONS:0x20
    UDS_SID_READ_DATA_BY_ID:0x22
    UDS_SID_READ_MEM_BY_ADDRESS:0x23
    UDS_SID_READ_SCALING_BY_ID:0x24
    UDS_SID_SECURITY_ACCESS:0x27
    UDS_SID_COMMUNICATION_CONTROL:0x28
    UDS_SID_READ_DATA_BY_ID_PERIODIC:0x2A
    UDS_SID_DEFINE_DATA_ID:0x2C
    UDS_SID_WRITE_DATA_BY_ID:0x2E
    UDS_SID_IO_CONTROL_BY_ID:0x2F
    UDS_SID_ROUTINE_CONTROL:0x31
    UDS_SID_REQUEST_DOWNLOAD:0x34
    UDS_SID_REQUEST_UPLOAD:0x35
    UDS_SID_TRANSFER_DATA:0x36
    UDS_SID_REQUEST_XFER_EXIT:0x37
    UDS_SID_REQUEST_XFER_FILE:0x38
    UDS_SID_WRITE_MEM_BY_ADDRESS:0x3D
    UDS_SID_TESTER_PRESENT:0x3E
    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
    UDS_SID_FORD_REQUEST_DATA_DIAGNOSTIC_DATA_PACKET:0xA0
    UDS_SID_FORD_DYNANICALLY_DEFINE_DIAGNOSTIC_DATA_PACKET:0xA1
    UDS_SID_FORD_DIAGNOSTIC_COMMAND:0xB1
    UDS_SID_GM_PROGRAMMED_STATE:0xA2
    UDS_SID_GM_PROGRAMMING_MODE:0xA5
    UDS_SID_GM_READ_DIAG_INFO:0xA9
    UDS_SID_GM_READ_DATA_BY_ID:0xAA
    UDS_SID_GM_DEVICE_CONTROL:0xAE
  福特UDS服务和通用UDS服务的SID未补全。
六、ECU
  常见ECU使用的CPU架构如下:
    大众:Infineon C167、Tricore。
    奔驰、日系:Renesas SH。
    宝马:Bosch PowerPC。
    福特、通用:Motorola M68K。
    菲亚特-克莱斯勒:TI Arm。
    CAN MCU:Renesas V850。
七、适配
  原厂诊断工具的特殊功能可能实现方式有软件实现、驱动实现、固件实现和硬件实现,适配困难度:硬件实现>固件实现>驱动实现>软件实现。理论上,只要实现方式不是硬件实现,都能完美适配。
八、大众诊断工具
  大众 5054A实现了SAE J1850 PWM和高速CAN,有可能实现SAE J1850 VPW、ISO 9141-2/ISO 14230-4,福特中速CAN应该没有实现,未实现通用单线低速CAN,特殊功能实现方式未知。主要IC如下:
    MCU:Infineon C167。
    CAN:TJA 1054A。
    SAE J1850 PWM:OKI MSM 6636。
    蓝牙:AMB 2300。
    USB:ISP1181A。
    RAM:三星IC。
九、成本
  基于山寨ELM327的产品价格不超过50元,因此预算200元。
十、总结
  大部分原厂设备都不能防御重放攻击,而通信双方只要有一方是非原厂设备就属于重放攻击,如果通信双方的原厂设备防御重放攻击都是用硬件实现(FPGA或ASIC),几乎不会出现非原厂设备。本文的实现可以看成是实现重放攻击,原厂诊断数据在诊断软件、驱动、诊断工具、ECU、UDS之间传输,诊断工具和ECU的传输数据是最准确的重放数据,可以用Fake ECU的方法进行监控,两个本文实现就是一个FAke ECU。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (10)
雪    币: 130
活跃值: (1005)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主的成果分享
在下很好奇 电脑软件安全与家电有什么牵连?? 之前也看到另外一坛友发出家电的检查、调试
2016-10-7 02:19
0
雪    币: 288
活跃值: (212)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
顶一个,支持楼主
2016-10-7 08:12
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
感谢科普~
2016-10-7 09:35
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
今天的微信公众号推广了此文

2016-10-7 17:22
0
雪    币: 3425
活跃值: (1479)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
6
希望有人能翻译“Gasoline Economy Management G.E.M.",文章详细说明各个协议,电路设计,手机Android客户端的实现,完全开源。
2016-10-7 23:48
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
是这文章吗?
http://www.eecs.ucf.edu/seniordesign/fa2014sp2015/g08/docs/SD2_FinalDocumentation_Print_Web.pdf

142页,有些多。不过若有价值,论坛可以组织人员来翻译。
2016-10-8 19:46
0
雪    币: 3425
活跃值: (1479)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
8
学习G.E.M,参考AllPro,修改OpenXC,G.E.M算是入门教程。
2016-10-9 22:44
0
雪    币: 3425
活跃值: (1479)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
9
注意本文关于ECU的描述是错误的。
2016-12-24 01:42
0
雪    币: 3425
活跃值: (1479)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
10
请参考另外一篇文章http://bbs.pediy.com/showthread.php?t=214792
2016-12-24 01:43
0
雪    币: 2710
活跃值: (1848)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
只是介绍了一下各种通讯,感觉没有介绍诊断工具的实现原理
2019-7-16 12:34
0
游客
登录 | 注册 方可回帖
返回
//