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传输

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值