Kwp2000协议的应用(硬件原理使用篇)

作者:良知犹存

转载授权以及围观:欢迎添加微信:becom_me

    发现K线没有过多的文章描述,作为一个开发过K线的人,不写些文章帮助后来的人岂不是太浪费开发经验了呢。

总述

    KWP2000是一套协议,它符合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线协议的。

一、物理接口

K线的特点:

最大通讯速率达10.4 kbit/s(和现在动辄几十、几百M的通讯速度来比,确实很小)

诊断报文最大长度255Byte,k线是单总线,属于关键字协议,通过不同ID实现主从的应答。

总线电平:0~12V

一般电喷的摩托车的ECU不是BOSH就是德尔福或者日本产的,它负责控制整车的运动相关的逻辑,就是整车的CPU。

设备开发K线电路的选择

一般我们开发时候会选择相应的通讯的芯片,如图为K线芯片的电路,使用的是SI9241的k线芯片,一端连接到MCU的串口TX RX引脚,另一端接入K线

    

    K线通讯现在基本上属于被逐渐淘汰的使用,只不过在摩托车电喷的领域还在使用。所以K线芯片也大都停产了,现有的芯片也基本都是以库存料为主,量不大但是很贵,所以设计有一套其他方式做的K线电路,一边连接到K线,一边连接到MCU的串口引脚,通讯很稳定,可以给大家做参考。

 

其次,大家也可以在某宝购买一些K线测试的开发板,用作测试,用来加快开发的进度。

如图为K线完整的一次初始化应答的信息抓取:

二、通信关键字

 

   搭建好了硬件,这个时候我们需要进行软件的攻关了。首先准备好相关ECU的协议介绍手册。查看相应的协议规则,以及相应的关键词识别位置。

如图K线通讯几种常见的数据格式:

大家看到上面的一些数据格式刚开始可能有些头疼,但是实际上我们用的时候只会有一种使用,我以我使用过的举例解释(如上第二种数据格式)。

StartCommunication:

TEST->ECU  (设备端发往ECU请求应答的数据)hex:C1 33 F1 81 66

ECU ->TEST (ECU 应答设备的回复)hex :83 F1 11 C1 E9 8F BE

其中:0xF1代表 设备端的默认地址,0x11代表 ECU的地址

C1(FMT格式字节,0xC1转化为2进制为,11000001,bit7~6 为11,代表请求信息,bit5~0 为1,数据字节长度为1,如下只有一个数据byte SDIRQ) 

33(Target字节) 

F1(Source字节)

81(SDIRQ,关键字,属于数据段) 

66(0xC1+0x33+0xF1+0x81 = 0x266,取一个byte的大小,所以去掉高位变成0x66)

此时候关键字就是81

由上可以知道,K线通讯的注意点:

1.信息里面包括该信息的数据段的长度;

2.协议数据在最后一个byte进行累加和的校验,用来判断数据;

3.协议信息中进行读取关键ID即可判断出当前应答服务的机制;

通过这些信息,我们大致对协议就有一个判断,我们可以通过一些关键词的填写,进行与ECU通信,获得我们需要的信息。例如读取ECU的故障码。

如下是不同的服务ID对应的不同ECU应答信息

 

 这就是我分享的开发Kwp2000的协议,由于太晚了,所以也准备休息了,明天继续分享我的开发经验。如果大家有什么更好的思路,欢迎分享交流哈。

posted @ 2020-06-09 09:20  良知犹存  阅读(1628)  评论(2编辑  收藏  举报