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的协议,由于太晚了,所以也准备休息了,明天继续分享我的开发经验。如果大家有什么更好的思路,欢迎分享交流哈。
Kwp2000协议的应用(硬件原理使用篇)的更多相关文章
- Kwp2000协议的应用(程序原理篇)
作者:良知犹存 转载授权以及围观:欢迎添加微信:becom_me 总述 接上篇文章Kwp2000协议的应用(硬件原理使用篇),本篇针对kwp2000协议标准的服务ID详细介绍,以及针对程序实现 ...
- TCP协议、算法和原理
TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获. 关于TCP这个协议的细节,我还是推荐你 ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- arm-linux内存管理学习笔记(1)-内存页表的硬件原理
linux kernel集中了世界顶尖程序猿们的编程智慧,犹记操作系统课上老师讲操作系统的四大功能:进程调度 内存管理 设备驱动 网络.从事嵌入式软件开发工作,对设备驱动和网络接触的比較多. 而进程调 ...
- SSL协议与数字证书原理
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- Nodejs的运行原理-架构篇
前言 本来是想只做一个Nodejs运行原理-科普篇,但是收到了不少私信,要我多分享一些更进阶,更详细的内容,所以我会在接下来的两个月里继续更新Nodejs运行原理. PS:此系列只做Nodejs的运行 ...
- Ajax原理一篇就够了
Ajax原理一篇就够了 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简 ...
- Atitit.协议的转换smb2http 原理
Atitit.协议的转换smb2http 原理 1. 协议的转换原理 stream的转换.. 2. 常用协议转换的情形 android通过SMB访问局域网共享文件 作者:: ★(attilax)&g ...
- Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】
本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464779 一.基本概念 帧缓冲(Framebuffer)是Linux系统为显示设备提供 ...
随机推荐
- Redis缓存篇(四)缓存异常
这一节,我们来学习一下缓存异常.缓存异常有四种类型,分别是缓存和数据库的数据不一致.缓存雪崩.缓存击穿和缓存穿透. 下面通过了解这四种缓存异常的原理和应对方法. 缓存和数据库的数据不一致 缓存和数据库 ...
- 「珍贵历史资料鉴赏」CF786B 题解
写在前面 偶然翻到一篇 2019-08-07 18:58 写的未发布的题解. 给大家找点乐子玩. 正文 知识点:线段树优化建图 线段树优化建图 用于解决 类似 从 x 向区间[L,R]的 区间连边问题 ...
- jquery表格插件Datatables使用、快速上手
Datatables使用 一.简介 官网:https://datatables.net/ 中文官网:http://datatables.club/ Datatables是一款jquery表格插件.它是 ...
- PAT天梯赛练习 L3-004 肿瘤诊断 (30分) 三维BFS
题目分析: 可能是我的理解能力比较差,在读题的时候一直以为所有的切片是可以排列组合的,并不是按照输入顺序就定死的,那么这题就变得十分的复杂啦~~~~~,查看的题解之后发现所有的切片并没有所谓的自由组合 ...
- MySQL查询优化之 index 索引的分类和使用
索引的分类 主键索引 (PRIMARY KEY) 唯一的标识符, 主键不可重复, 只能有一列作为主键 唯一索引 (Unique KEY) 避免重复的列出现, 唯一索引可以重复, 多个列都可以标识为唯一 ...
- 【排序基础】1、选择排序法 - Selection Sort
文章目录 选择排序法 - Selection Sort 为什么要学习O(n^2)的排序算法? 选择排序算法思想 操作:选择排序代码实现 选择排序法 - Selection Sort 简单记录-bobo ...
- 映泰主板H100系列安装win7的各种坑
自100系列主板发布以来,windows7好像就被遗弃一样,原因就在于安装win7的时候,会出现USB设备无法使用导致无法安装的问题.主要在于Win7系统没有整合USB的XHCI驱动,而100系列芯片 ...
- 深入理解Redis之简单动态字符串
目录 SDS SDS与C字符串的区别 SDS获取字符串长度复杂度为O(1),C字符串为O(N) SDS杜绝了缓存区溢出 减少修改字符串时带来的内存重分配次数 二进制安全 Redis没有直接使用C语言传 ...
- 误删数据库怎么办?mysql 回滚,撤销操作,恢复数据
刚刚不小心把数据库删掉了,于是想着上网上找找有没有可以恢复数据库的方法,没想到还真有,除了备份以外,还有以下方法. 在mysql有时执行了错误的update或者delete时导致大量数据错误恢复的办法 ...
- STGAN: A Unified Selective Transfer Network for Arbitrary Image Attribute Editing 阅读笔记和pytorch代码解读
一.论文采用的新方法 1.AttGan中skip connect的局限性 由于encoder中对特征的下采样实际上可能损失部分特征,我们在decoder中进行上采样和转置卷积也无法恢复所有特征,因此A ...