K线诊断协议驱动器设计_第1页
K线诊断协议驱动器设计_第2页
K线诊断协议驱动器设计_第3页
K线诊断协议驱动器设计_第4页
K线诊断协议驱动器设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、K线诊断协议驱动器设计Time:2012-03-22 11:49:41  Author:  Source:中电网关键字:K线诊断,汽车电子把握单元,协议驱动器共享到: 引言:随着汽车电子把握单元功能的增加及升级换代的需要,诊断功能已经成为ECU不行或缺的重要组成部分,因此,深化争辩诊断协议及其实现格外必要。基于K线的ISO14230和基于CAN总线的ISO15765是业内广泛接受的两种诊断标准【1】,K线是ISO9141定义的诊断通信总线,ISO14230在ISO9141的基础上将K线电压扩展到24V,并扩展了诊断服务。相比较于CAN总线,K线诊断既能满

2、足要求,又能节省成本,在国产车上得到大规模应用。不同于CAN总线有特地的协议驱动器,用户直接进行应用程序的编写而不用管理底层的通信,K线没有特地的协议驱动器,一般要在SCI模块的基础上用软件实现其底层通信管理,笔者为某国产车设计了一款带K线诊断功能的车身把握模块,结合ISO14230规范,首先分析K线诊断协议驱动器的功能,然后介绍协议驱动器的关键设计技术,最终用CANoe进行测试。1 协议驱动器功能ISO14230-1定义了K线物理层协议,ISO14230-2定义了数据链路层协议,ISO14230-3定义了应用层协议【2】,其与OSI模型对应关系如表1所示。OSI模型K线诊断协议应用层ISO1

3、4230-3表述层N/A会话层N/A传输层N/A网络层N/A数据链路层ISO14230-2物理层ISO14230-1表1 ISO14230与OSI模型的对应关系物理层定义了规律位与物理电平的对应关系,同时定义了信号位的上升时间和下降时间,数据链路层协议定义了K线数据格式、诊断报文格式、定时参数及通信错误判定及处理机制,应用层协议定义了基于恳求/响应的诊断过程及各项诊断服务。做为待诊断ECU节点,K线协议驱动器实现的主要功能包括:1、诊断报文的封装和发送、接收和解析,依据报文格式填充/提取SID和数据;2、通过初始化过程建立与诊断仪之间的诊断通信;3、保持正确的帧间定时、字节间定时,检测诊断仪报

4、文的定时错误及其它通信错误;4、依据诊断仪的诊断恳求和ECU当前状态返回相应的诊断响应,管理诊断会话;下面结合数据链路层的协议分析及其数据结构、驱动程序的设计介绍下K线诊断协议驱动器的原理及实现。2 协议驱动器设计K线基于异步串行通信接口,在底层传输上接受8N1格式的SCI串行数据链路格式:8个数据位+1个停止位、无奇偶校验,由于K线在物理层上是单根线,在发送时也会触发接收中断,所以K线报文的发送和接收解析统一在SCI接收中断处理函数中以状态机的形式实现【3】。下面从报文收发及解析、初始化、定时管理三个方面介绍下数据链路层的实现。2.1 报文收发及解析K线诊断报文结构如表2所示:报文头数据字段

5、校验和FmtTgtSrcLenSidDataCS最大4个字节最大63字节或255字节1个字节       表2 K线诊断报文结构K线报文由报文头、数据字段及校验和组成。报文头包含格式字节Fmt、目标地址Tgt、源地址Src和可选附加长度信息Len,Fmt指定目标地址的形式(物理地址/功能地址),当报文头中不包含可选Len字段时指定数据字段的长度;数据字段包括服务标识符Sid和数据Data,其长度由Fmt和Len打算;CS为单字节校验和。设计报文结构体如下: typedef struct  k_state

6、state;  uchar fmt;  uchar tgt_addr;  uchar src_addr;  uchar datalen;  uchar sid;  uchar *data;   uchar checksum;  uchar msgdatalen;  uchar done;   k_msg;typedef enum  k_FMT=0,  k_TGTADDR,  k_SRCADDR,  k_DATALEN,  k_SID,&

7、#160; k_DATA,  k_CSk_state;成员变量state表示当前K线通信数据是报文中的哪个组成部分,msgdatalen用于数据字段字节数的统计,done表示该报文是否发送或接收完成,其它成员变量与报文结构组成部分一一对应。 void k_ifc_rx(void)  k_u8 ch,SciSr1;    SciSr1=Kline_periphSCISR1;  ch=Kline_periphSCIDRL;  TimerStop(k_TP4);  switch(k_curmsg.state) 

8、 case k_FMT:    if(k_REP=k_drvhandle.mode)      if(ch=k_curmsg.fmt)        k_curmsg.state=k_TGTADDR;        k_SendChar(k_curmsg.tgt_addr);           e

9、lse      k_curmsg.state=k_TGTADDR;      k_curmsg.fmt=ch;        break;  case k_TGTADDR:    .    break;  case k_SRCADDR:    .    break;  case k_DA

10、TALEN:    if(k_REP=k_drvhandle.mode)      if(ch=k_curmsg.datalen)        k_curmsg.msgdatalen=0;        k_curmsg.state=k_SID;        k_SendChar(k_curmsg.sid

11、);          else      k_curmsg.msgdatalen=0;      k_curmsg.datalen=ch;      free(k_curmsg.data);k_curmsg.data=malloc(k_curmsg.datalen);      k_curmsg.state=k_SI

12、D;          break;  case k_SID:     if(k_REP=k_drvhandle.mode)      if(ch=k_curmsg.sid)        k_curmsg.msgdatalen+;  if(k_curmsg.msgdatalen=k_curmsg.datalen)   

13、0;      k_curmsg.state=k_CS;   k_SendChar(k_curmsg.checksu);         else          k_curmsg.state=k_DATA;         k_SendChar(k_curmsg.data0); 

14、60;                else      k_curmsg.sid=ch;      k_curmsg.msgdatalen+; if(k_curmsg.datalen=k_curmsg.msgdatalen)        k_curmsg.state=k_CS;  &#

15、160;    else        k_curmsg.state=k_DATA;                     break;  case k_DATA:    .    break;  case k_CS:   &#

16、160; k_curmsg.state=k_FMT;    if(k_REP=k_drvhandle.mode)      if(ch=k_curmsg.checksum)        k_curmsg.done=1;            else      k_curmsg.checksum=ch;&#

17、160;     k_curmsg.done=1;            break;     if(k_REQ=k_drvhandle.mode)&&(k_FMT!=k_curmsg.state)    TimerStart(k_REP_P4MS,k_TP4,0,1);      2.2 初始化在开头诊断服务之前,诊断仪必需对ECU进行初始化,通过ECU的响应猎取ECU

18、支持的报文头格式和定时参数,建立诊断通讯【4】。初始化过程如图1所示,诊断仪发送一个25ms 0、25ms1的WuP(WakeUp Pattern),然后发送STC(StartCommunication) Request,ECU检测出WuP并接收到正确的STC Request后返回STC Response,该报文的Data字段为由两个字节构成的“关键字(Key Word)”,指定了ECU所支持的报文头和定时参数信息,如Key Word指定为0x8fea即表示在报文头中接受附加长度信息Len表示数据字段长度,同时接受默认的定时参数。图1 初始化过程初始化之前K线处于空闲状态,ECU禁止SCI功能

19、并使能SCI的RXD引脚为IO模式,检测到下降沿时通过定时器统计RXD引脚的IO低电平的持续时间,检测到上升沿时开头统计RXD引脚的IO高电平持续时间,推断是否为有效的WuP;也可以设置SCI的波特率为200bps,推断是否能接收到数据0xf0(0xf0在总线上表现为5个0,5个1),检测出正确的WuP后,使能SCI功能,设置波特率为10400bps,等待诊断仪发送的STC Request,接收到恳求后返回STC Response确定响应,建立诊断通讯。2.3 定时管理ISO14230定义了4个定时参数管理字节间定时和报文间定时,诊断仪和ECU需要共同遵守这些定时约束以保证正常的诊断通讯,表2给出了这4个定时参数的含义及取值区间。 参数变量描述最小值(ms)最大值(ms)P1ECU响应的字节间时间间隔020P2诊断仪恳求和ECU响应之间的时间间隔,或两个ECU响应之间的时间间隔2550P3ECU响应和诊断仪恳求之间的时间间隔555000P4诊断仪恳求的字节间时间间隔020表2 定时参数P1和P4是报文内字节间定时,P2和P3为报文间定时。诊断仪在初始化完成后或接收到诊断响应后需要在P3时间内发送诊断恳求,否则ECU端退出诊断会话

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论