新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > K線診斷協議驅動器設計

        K線診斷協議驅動器設計

        作者: 時間:2014-03-19 來源:網絡 收藏

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

        在開始診斷服務之前,診斷儀必須對ECU進行初始化,通過ECU的響應獲取ECU支持的報文頭格式和定時參數,建立診斷通訊4。初始化過程如圖1所示,診斷儀發送一個25ms ’0’、25ms’1’的WuP(WakeUp Pattern),然后發送STC(StartCommunication) Request,ECU檢測出WuP并接收到正確的STC Request后返回STC Response,該報文的Data字段為由兩個字節構成的“關鍵字(Key Word)”,指定了ECU所支持的報文頭和定時參數信息,如Key Word指定為0x8fea即表示在報文頭中采用附加長度信息Len表示數據字段長度,同時采用默認的定時參數。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 赤城县| 西盟| 永平县| 农安县| 灵武市| 文成县| 灵川县| 广安市| 湘潭市| 汶上县| 宜城市| 黄浦区| 洛南县| 兴化市| 朝阳区| 衡山县| 朔州市| 全州县| 凌源市| 东源县| 乐都县| 海伦市| 奉化市| 虞城县| 普定县| 雷山县| 铜川市| 宁晋县| 富裕县| 安吉县| 闵行区| 集安市| 晋中市| 琼中| 托克逊县| 大连市| 锦屏县| 新兴县| 包头市| 大竹县| 平遥县|