KWP2000学习一

简介

  KWP2000(Keyword Protocol2000)是欧洲汽车领域广泛使用的一种车载诊断协议标准,该协议实现了一套完整的车载诊断服务,并且满足E-OBD(EuropeanOn BoardDiagnose)标准。KWP2000最初是基于K线的诊断协议,由于K线物理层和数据链路层在网络管理和通讯速率上的局限性,‍使得K线无法满足日趋复杂的车载诊断网络的需求。而CAN网络(ControllerArea Network‍)由于其非破坏性的网络仲裁机制、较高的通讯速率(可达1Mbps)和灵活可靠的通讯方式,在车载网络领域广受青睐,越来越多的汽车制造商把CAN总线应用于汽车控制、诊断和通讯。

项目特定的kw2000服务的子组件:
      KWP2000学习一
  
外部通信软件由两部分组成:
• Communication handler
• Command Interpreter
        KWP2000学习一
  

报文结构:

     
一个报文包含: 报文头、数据域、校验和
每个字节在该报文结构中包含:1 开始位、8 数据位(最低有效位开始)、1 停止位
        KWP2000学习一

(1)字节是可选的,取决于报文格式字节
(2)服务标识是数据域的一部分
     
Format byte - Fmt:包含2 bits地址信息和6 bits长度信息。
    

A1 A0 L5 L4 L3 L2 L1 L0

KWP2000学习一

   
Target address byte - Tgt: 目的地址信息
     
Source address byte - Src:源(传输设备)地址信息,是一个物理地址,此字节是可选的(总是与目标地址字节一起使用),并且仅在多节点总线拓扑上是必需的。对于点到点的连接,可以省略它。
    
Target and Source address bytes
    

Byte Tester -> ECU ECU -> Tester
Target address ECU address (0x10) Tester address (0xXX)
Source address Tester address (0xXX) ECU address (0x10)

    
Length Byte - Len:如果头字节(L0到L5)的长度设置为零,则提供此字节。它允许单元传输数据域超过63字节的报文。低于63的可能被省略。
     
Data Bytes:数据域可能包含63字节或255字节的信息,取决于长度信息。第一个字节是服务标识,根据所选择的服务,后边可能紧跟着参数和数据。
    
Data byte information

Sld Service Identification byte
Data Data bytes max 254

   
Checksum: 校验和。
    

服务概述

    
支持诊断模式
    

DM [Hex] Diagnostic Mode (DM) Security access required? Security access Mode [hex]
81 Default Mode NO
82 End Of Line Upload Mode YES 0x01 / 0x02
83 End Of Line Download Mode YES 0x03 / 0x04
85 ECU Programming Mode YES 0x07 / 0x08
86 ECU Development Mode YES 0x09 / 0x0A
87 ECU Adjustment Mode YES 0x0B / 0x0C
88 EOL VehicleUpload Mode YES 0x11 / 0x12
89 EOL VehicleDownload Mode YES 0x13 / 0x14
90 EOL Vehicle Customer Service Upload Mode YES 0x15 / 0x16
91 EOL Vehicle Customer Service Download Mode YES 0x17 / 0x18
92 EOL End Customer Service Uoload Mode YES 0x19 / 0x1A
93 EOLEndCustomerServiceDownloadMode YES 0x1B / 0x1C

   
部分服务列表
    

诊断服务名称 请求码(十六进制) 诊断服务名称 请求码(十六进制) 诊断服务名称 请求码(十六进制)
startCommunication 81 securityAccess 27 Read Status Of Diagnostic Trouble Codes 17
stopCommunication 82 readEcuIdentification 1A Read Diagnostic Trouble Codes By Status 18
accessTimingParamerters 83 ecuReset 11 clearDiagnosticInformation 14
CommunicationControl 28 readDataByLocalIdentifier 21 readFreezeFrameData 12
startDiagnosticSession 10 readMemoryByAddress 23 requestUpload (read Flash) 35
Control Diagnostic Trouble Codes Setting 85 requestDownload (write Flash) 34 transferData 36
requestTransferExit 37 writeMemoryByAddress 3D writeDataByLocalIdentifier 3B

    
   
KWP 请求报文
   

Data byte Parameter name Hex value Mnemonic
#1 Diagnostic service name $xx SID
#2 Request parameter #1 $xx PARAM1(参数1)
#3 to #n Other request parameters $xx PARAMn(参数2)


KWP 积极响应(positive response)

Data byte Parameter name Hex value Mnemonic
#1 Diagnostic service name OK SID + $40 SID OK
#2 Response parameter #1 $xx RES1
#3 to #n Other response parameters $xx RESn


KWP 消极响应(negative response)

Data byte Parameter name Hex value Mnemonic
#4 Negative response $7F NR
#5 Code of service received by ECU $xx SID
#6 Negative response code $xx RC


negative response code table

Hex Definition of Response Code Mnemonic
00 reservedByDocument 此值不应用作响应代码。 RBD
10 generalReject 服务被拒绝,但是ECU没有指定拒绝的原因 GR
11 serviceNotSupported 不支持请求的服务 SNS
12 subFunctionNotSupported-invalidFormat 请求报文的参数或格式不匹配,此响应代码不影响通信计时! SFNS-IF
21 busy-RepeatRequest 已接收请求,但未在最大响应时间内完成操作 BRR
22 conditionsNotCorrectOrRequestSequenceError 未满足先决条件,可能序列请求顺序错误。 CNCORSE
23 routineNotCompleteOrServiceInProcess 正在执行,还未完成 RNCOSP
31 requestOutOfRange 发现越限的值 ROOR
33 securityAccessDenied-securityAccessRequested 安全策略不满足,访问被拒绝 SADSAR
35 invalidKey **不匹配 IK
36 exceedNumberOfAttempts 客户端试图获取比允许的更多的安全访问次数,失败。 ENOF
37 requiredTimeDelayNotExpired 在服务器需要的时间超时后,发起请求。 RTDNE
40 downloadNotAccepted 由于某些故障不能完成下载。 DNA
41 improperDownloadType ECU不支持请求下载数据的类型 IDT
42 canNotDownloadToSpecifiedAddress 不能识别可用的下载地址 CNDTSA
43 canNotDownloadNumberOfBytesRequested 不能识别可用的下载字节数 CNDNOBR
50 uploadNotAccepted 由于某些故障条件不能完成上传 UNA
51 improperUploadType不支持上传类型 IUT
52 canNotUploadFromSpecifiedAddress 不能识别可用的上传地址 CNUFSA
53 canNotUploadNumberOfBytesRequested 不能识别可用的上传字节数 CNUNOBR
77 blockTransferDataChecksumError 校验和不一样 BTDCE
80 serviceNotSupportedInActiveDiagnosticMode 在当前活动的诊断模式中,服务器(ECU)不支持所请求的服务。 SNSADM
81-8F reservedByDocument 此值不应用作响应代码。 RBD
90-9F vehicleManufacturerSpecific 这一范围的值是预留给汽车制造商的特定用途。 VMS
FA checksumError an application-RAM or flash-EPROM checksum error.
FB ECUErasingFlash ECU当前正在擦除flash-EPROM。 RC_ERASE
FC ECUProgrammingFlash ECU目前正在为flash-EPROM编程。 RC_PROG
FD erasingError 擦除flash-EPROM出错。 RC_ERER
FE programmingError flash-EPROM编程出错。 RC_PRERR
FF reservedByDocument 此值不应用作响应代码。 RBD