汽车诊断工具的实现

本文是最基本的汽车诊断工具的实现概述,如果有错误的地方,恳请斧正。
一、概述
  实现基于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。

你可能感兴趣的:(CAN)