工作日志之KWP2000协议的理解和使用

您所在的位置:网站首页 k=*p1*(*p2) 工作日志之KWP2000协议的理解和使用

工作日志之KWP2000协议的理解和使用

2024-06-22 19:52| 来源: 网络整理| 查看: 265

什么是KWP2000?

   在做嵌入式开发这一行的同学可能对KWP2000这个协议听到比较少,而CAN(下期提到)协议就使用的比较多了,很多开发板上的CAN总线使用频率还是很高的。KWP2000呢是欧洲汽车领域广泛使用的一种车载诊断协议标准,该协议实现了一套完整的车载诊断服务,并且满足E-OBD(EuropeanOn BoardDiagnose)标准。它满足OSI七层协议模型,但在汽车诊断中我们常常将它总结成三种基本模型,即ISO14230-1,ISO14230-2,ISO14230-3,ISO14230-4这4个协议文件。 ISO14230-1协议规定了物理层标准,要求使用K线,ISO14230-2 规定了链路层,即帧格式、计时器等、错误处理机制以及交换关系,ISO14230-3 规定了应用层,及链路层中的数据域是如何解析的,怎么样为用户提供服务(请求数据、接受数据、解析数据),这部分参考了ISO14229-1协议。ISO14230-4 则是对一种特殊应用(排放相关系统要求),他分别对ISO14230-1,ISO14230-2,ISO14230-3作出了特例化要求和一些补充,又形成了一个体系协议(这个不太相关)。目前欧洲汽车领域广泛采用了基于CAN总线的KWP2000,即ISO 15765等协议,而基于K线的KWP2000物理层和数据链路层协议基本淘汰,国内也只有一些底端车型有用,但是在摩托车领域,电喷普及进程中,ECU广泛使用BOSH和德尔福等厂家设备的时候,都在同步使用KWP2000协议,开发相关设备的时候,还是需要懂k线协议的。

 一.物理层

通常采用波特率10416; 空闲电平通常为12V;数据位格式为1+8+1,没有校验位。 系统进入初始化 有快速初始化和5bps初始化两种方式。其中5bp初始化常是车型年限较老的,或者柴油卡车类型。 快速初始化:由诊断仪发送25ms的拉低电平(常态是高电平),然后是25ms的高电平,再发送系统进入数据,系统进入数据通常为5个字节,ECU响应7个字节,完成系统初始化交互。具体参见下图:

 

 bps初始化:诊断仪发送5bps的地址码,回馈若干个字节作为回应,回馈的字节来源于字节,回馈的第一字节是0x55,ECU响应0x55方波,测试仪根据测试此方波的时间间隔来计算波特率KW1,KW2,设备对KW2取反发回给ECU(也可能不发,如果不发,这初始化直接完成),ECU对地址码取反发回给设备,完成系统初始化交互。其中0x55这个字节用来规定后面的通信波特率。  

快速进入: Req: 00 81 11 F1 81 04 Ans: 83 f1 10 c1 e9 8f 00 Req: 81 11 F1 3E C1 Ans: 81 f1 10 7e 00 慢速进入: Addr: 33 Ans: 55 e9 8f Req: KW2 取反 Ans: addr取反 Req: c1 33 f1 81 66 Ans: 83 f1 10 c1 e9 8f 00 Req: 81 11 F1 81 04 Ans: 83 f1 10 c1 e9 8f 00

二.数据链路层

     常见帧格式:

 帧类型: 8X,80,68/48,CX,C0,0X,00, 8X是物理格式,针对某个系统而言。例如读到的故障码只能是该系统的故障码。 CX是功能格式,针对某个功能而言。例如读到的故障码会包括所有系统的故障码

关键字 常见的关键字: 81 进系统 21 读数据流 1A 读版本信息 18/58 读故障码 13/14 清故障码 3E 链路命令 82 退系统

回命令要把关键字加0x40 如:80 11 F1 01 81 CS 81 F1 11 C1 CS 故障码类型: 0000~3fff: P码 Powertain 动力系统 4000~7fff: C码 Chassis 地盘 ABS防抱死刹车系统 8000~bfff: B码 Body 车身 SRS安全气囊等车身系统 c000~ffff:: U码 Network 网络 网络系统

KWP2000通讯电压 KWP2000根据车型的不同,通讯电压有5V、12V和24V的区别。(汽油一般为12V,柴油一般为24V),通讯逻辑为正逻辑方式。 KWP2000要求进系统前,处于高电瓶状态1,被拉低拉高各25ms后,才开始通讯。

KWP2000诊断座 以16Pin(脚)为例,4#、5#为地线,7#为K线(信号线,即诊断仪和ECU通过该引脚进行通讯)、15#为L线、16#为电源。 通过4#(5#)和16#的组合,可以给诊断仪供电。 通过7#可以实现KWP2000通讯。 通过7#和15#可以实现KL(KWP2000的一种)双线通讯。

KWP2000(通讯属性) KWP2000规定通讯波特率一般为10416 bps,当然也有其他非主流的波特率,如9600、57600 bps等。符合标准串口数据1+8+1格式,即一个起始bit,,8个数据bit,,一个停止bit,,动力系统一般为7号脚通讯。

KWP2000(时间控制) P4:( 5~ 20ms)诊断仪发送命令时,字节与字节,之间的时间间隔。 P2:(25~ 50ms)诊断仪命令发出后,到,ECU开始回复,之间的时间间隔。 P1:( 0~ 20ms)ECU回复命令时,自己与字节,之间的时间间隔。 P3:(55~5000ms)ECU回复命令后,到,诊断仪开始新的请求,之间的时间间隔。

ISO1230—2 数据链路层协议:报文结构、初始化过程、通讯连接管理、定时参数和错误处理等内容。报文结构:报文头,数据域,验校和。报文头:格式字节,目标地址(可选),源地址(可选),附加长度信息(可选)。 在开始诊断服务之前,诊断设备必须对ECU进行初始化,通过ECU的响应获取ECU的源地址、通讯波特率、支持的报文头格式、定时参数等信息。ECU所支持的报文头和定时参数信息包含在ECU返回的“关键字(Key Word)”中(这也是协议命名的由来)。 主要函数 read_code_home_page 显示”正在执行操作…” wait_data 向汽车发送信息,收到帧则返回1;否则返回0. Exit_sys 显示”正在退出系统…” WellKeyTit 显示左下角操作提示信息 outtextxy_16 显示字符串 Cleardevice,clear_dis_win(); 清除窗口 pull_down 返回所选项的选择编号 info_win 带框输出字符串 enter_sys 检测通道能否进入系统,可以则返回1,否则返回0 goto_mid1,make_win 创建窗口 下面是常见的一些命令:

81 c1 进入系统 82 c2 退出系统 3e 7e 链路保持 1a 5a 版本号 21 61 读数据流 3b 7b 写数据流 17 57 读故障码状态 18 58 读故障码 12 52 读冻结帧 14 54 清故障码 30 70 输入输出控制 31 71 开始运行时 32 72 停止运行时 33 73 请求运行时结果 34 74 请求下载 36 76 传递数据 37 77 请求传输退出 27 67 加密 83 c3 访问通信参数 10 50 开始诊断会话 20 60 停止诊断会话 11 51 重置ECU 26 66设置数据速率 1a 90 5a 90 读取VIN码(车辆识别号)

否定应答:

7f SID 10 拒绝应答 SID 7f SID 11 不支持该功能 SID 7f SID 12 子功能不支持不合法的格式 SID 7f SID 21 ECU 繁忙,重新请求 SID 7f SID 22 条件不满足,或请求错误 SID 7f SID 23 事务未完成 SID 7f SID 31 请求越界 SID 7f SID 33 安全访问被拒绝,重新请求 SID 7f SID 35 错误键 SID 7f SID 36 超越目标数 SID 7f SID 37 请求时间延时过短 SID 7f SID 40 拒绝下载 SID 7f SID 41 不合适的下载类型 SID 7f SID 42 无法下载到指定的地址 SID 7f SID 43 无法下载请求字节的数量 SID 7f SID 50 拒绝上传 SID 7f SID 51 不合适的上传类型 SID 7f SID 52 无法从制定的地址上传 SID 7f SID 53 无法上传请求字节的数量 SID 7f SID 71 传递被暂停 SID 7f SID 72 传递失败 SID 7f SID 74 传递块中存在不合法的地址 SID 7f SID 75 传递块中存在不合法的字节 SID 7f SID 76 非法的传递块类型 SID 7f SID 77 传递块数据校验错误 SID 7f SID 78 请求被正确接收,但未决定回复 SID 7f SID 79 传递块中存在不正确的字节 SID 7f SID 80 在活动的诊断模式下,不支持该服务

总结:

KWP2000广泛用于汽车诊断行业,国内很多上市公司都有研发汽车诊断仪器的经验,都有不错的效果,大家对汽车协议感兴趣的可以了解一下KWP2000,这些都是我在工作中的总结,写的不好大家见谅!

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3