新聞中心

        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表示數據字段長度,同時采用默認的定時參數。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: SHOW| 香河县| 凭祥市| 宾阳县| 浦江县| 景东| 新安县| 布拖县| 特克斯县| 成安县| 开鲁县| 浮梁县| 安顺市| 淮北市| 福州市| 巢湖市| 黑龙江省| 珠海市| 新疆| 元朗区| 岗巴县| 灵台县| 龙门县| 沾化县| 宝应县| 游戏| 富民县| 黑山县| 甘肃省| 太谷县| 宁陵县| 华坪县| 台南县| 遂平县| 肃南| 隆化县| 林甸县| 巴东县| 雷山县| 秦安县| 清镇市|