一种实用的K线诊断协议驱动器设计

2012-03-21 21:54:37来源: 互联网

ISO14230-1

OSI

K

ISO14230-3

N/A

N/A

N/A

N/A

ISO14230-2

ISO14230-1

K2.1 报文收发及解析

K

Fmt

Tgt

Src

Len

Sid

Data

CS

1             

K

typedef struct

{

  k_state 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,

  k_DATA,

  k_CS

}k_state;

void k_ifc_rx(void)

{

  k_u8 ch,SciSr1;  

  SciSr1=Kline_periph[SCISR1];

  ch=Kline_periph[SCIDRL];

  TimerStop(k_TP4);

  switch(k_curmsg.state){

  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); 

      }

    }else{

      k_curmsg.state=k_TGTADDR;

      k_curmsg.fmt=ch;

    }

    break;

  case k_TGTADDR:

    ...

    break;

  case k_SRCADDR:

    ...

    break;

  case k_DATALEN:

    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);

      }

    }else{

      k_curmsg.msgdatalen=0;

      k_curmsg.datalen=ch;

      free(k_curmsg.data);

k_curmsg.data=malloc(k_curmsg.datalen);

      k_curmsg.state=k_SID;  

    }

    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){

          k_curmsg.state=k_CS;   

k_SendChar(k_curmsg.checksu); 

        }else{

          k_curmsg.state=k_DATA; 

        k_SendChar(k_curmsg.data[0]);

        }

      }

    }else{

      k_curmsg.sid=ch;

      k_curmsg.msgdatalen++; 

if(k_curmsg.datalen==k_curmsg.msgdatalen){

        k_curmsg.state=k_CS; 

      }else{

        k_curmsg.state=k_DATA;

      }       

    }

    break;

  case k_DATA:

    ...

    break;

  case k_CS: 

    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;

      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 初始化

2.3 定时管理

ISO14230

P1

ECU

0

20

P2

25

50

P3

ECU

55

5000

P4

0

20

P1 

 

线诊断,性能和稳定性达到预期设计要求。驱动器独立于处理器和操作系统,具有良好的通用性和灵活性,可以方便得集成到应用程序中,具有很高的实用价值和借鉴意义。

关键字:实用  诊断  协议  驱动器

编辑:鲁迪 引用地址:http://www.eeworld.com.cn/qcdz/2012/0321/article_5238.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
实用
诊断
协议
驱动器

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved