KWP2000协议和OBD-K线

KWP2000最初是基于K线的诊断协议,

但是由于后来无法满足越来越复杂的需求,以及自身的局限性,厂商又将这套应用层协议移植到CAN上面,所以有KWP2000-K和KWP2000-CAN两个版本。

这篇文章主要讲基于K线的早期版本协议,认识一下这种基于串口的协议格式,借鉴借鉴。

K线

链路层

1)标准通讯速率10400 比特每秒

可最高支持124800 比特每秒 用于快速刷写

2)数据包包含目标地址和源地址,根据地址的不同实现主从的应答

3)K线是半双工模式的一根双向数据线

4)K线电平为12~24V

对于发送者,大于VB的80%认为是逻辑1,小于VB的20%认为是0,

对于接收者,二者比例是70%和30%。

VB即总线正常工作电压最大值,一般为24V或12V。

总结:对单片机来说,K线就是一个串口通信。具体的电平转换由特殊的K线电压转换芯片完成。

快速初始化

K线建立通讯之前,必须要有一个快速初始化的过程。

ECU端实现了一个硬件检测功能,必须要检测到总线上25ms低电平,

在信号唤醒之后的第一个下降沿,诊断仪发送ECU通讯报文,

如果ECU给与响应,则通信建立。

应用层

下图列出来几种常见的K线通讯协议格式:

1)首字节+SID+DATA+CS

这种一般首字节表示长度,SID表示服务ID,Data为有效数据,CS为1byte的校验和

这种格式简单适用于简单命令控制和数据高速传输

2)首字节+Tgt+Src+SID+Data+cs

这种格式添加了,1byte 目标地址 和 1byte源地址,是最常见和正常的通讯格式。

其中首字节一般为0x80+长度或者0xC0+长度

3)首字节+Tgt+Src+SID+Len+Data+cs

与格式2类似,所不同的是首字节一般固定尾0x80或0xC0,具体长度位要去取Len位置数据。

总结

虽然K线芯片现在基本停产,转到CAN、FDCAN等等,但是这种通讯协议值得参考。

可以用到单片机与其它的模块的串口通信。

实现数据解析

实现这样一种串口通讯协议。

1)需不需要做超时判定

根据自己的应用场景决定是否需要判断超时。

假如需要且超时设定为2s,则每次接收到数据就启动超时定时器,定时器到期则判断数据接收长度,如果仍有数据未处理,则强制推送。

2)确定接收处理方式

a. 单字节接收处理

设置接收非空闲中断,收到1个字节处理1个字节

b. 串口空闲中断或DMA传输

收到一段数据后单字节循环方式处理

猜你喜欢

转载自blog.csdn.net/weixin_38743772/article/details/126683052