轉載來自:http://www.rafavi.com/index.php/cn/private-shopping/87-can-tp2-0
https://wenku.baidu.com/view/93f9e620dd36a32d73758142.html
TP2.0 的應用層的數據是根據大眾KWP2000 定義的,命令定義及數據流格式相同,編程時用統一的數據轉換函數。
對於大眾CAN TP2.0 協議,由於用CAN 自定義參數據的方法與ECU 通訊對編程有一定的難度, TL718 V1.7 版本新增了G 號協議,以使通過PC串口可方便從大眾CAN 診斷口通訊,並且由TL718 自動建立及保持通訊鏈路。
大眾很多CAN 診斷的車可以通過ISO15765 進入診斷,這個是OBD2(ISO15031-5)的診斷規范, 不在這個討論范圍, 可用標准的OBD2 診斷程序診斷,可參考SCANTOOL 源代碼。
CAN TP2.0 是使用11 位ID 500KBPS 波特率進行數據通訊的。
TP2.0 的應用層的數據是根據大眾KWP2000 定義的,命令定義及數據流格式相同,編程時用統一的數據轉換函數。
TP2.0 的鏈路分析
首先我們從一個儀表系統的CAN 診斷過程來了解CAN 鏈路。這個過程是VAS5053 在與AUDIA6L 儀表通訊過程中用TL718 ATMA ** 的數據。
儀表系統診斷過程( TL718 ** 到的數據)
發送和接收數據 | 數據分析 |
200 07 C0 00 10 00 03 01 | 系統診斷觸發請求地址碼0x07 |
207 00 D0 00 03 51 07 01 | ECU 應答,系統地址碼0x0751,0x0300為接收地址,高位在后。 |
751 A0 0F 8A FF 32 FF 300 A1 0F 8A FF 4A FF |
建立命令進入系統,並設置T1 /T3。 T1=10*10ms=100ms T3=50*100us=5ms T1=10*10ms=100ms T3=10*1ms=10ms 第一句是建立連接的請求, 第二句是ECU 建立應答。 這一步是TP2.0 協議定義要求的時間參數及進入系統的命令格式。 |
751 10 00 0210 89 300 B1 300 10 00 0250 89 751 B1 |
10 是設備發送的報文控制字, 1 代表請求ECU 數據,0 是計數值,設備每次請求應將此值加1,在0-F 間循環。 請求連接診斷10 89(KWP2000定義的數據) 02 是設備發送的數據的長度, 02 前面的字節00不能變。 B1,開始發送多楨數據,序號為1。高4 位B 代表是確認報文,后面無數據,設備不需要應答, ECU 會繼續發送后面的數據。 1 是序列號,從1 開始,以后每次設備請求, ECU 都+1,在0-F 間循環。 10,ECU 應答報文控制字節,高位半字1 代表是數據報文的最后一幀數據,接收后需要設備應答, 后面是有效的數據,就是說設備完整接收該報文后,需要在T3 時間內發送應答報文給ECU。低位字節0 是一個0-F 間的計數據值。 如果高位半字是2,同樣代表該報文是有效數據,但設備接收到該報文后,應繼續接收后面的報文。 這是只有一個幀的情況第一字節為10。 診斷議已接收, 751 B1 設備接收后,響應B1(1 是計數值,是最后一幀接收到的報文的計數值加1,在0-F 間的值。 高4 位B 代表是確認報文,后面無數據,設備不需要應答, ECU 會繼續發送后面的數據。1 是序列號,從1 開始,以后每次設備請求, ECU 都+1,在0-F 間循環。 10,ECU 應答報文控制字節,高位半字1 代表是數據報文的最后一幀數據,接收后需要設備應答, 后面是有效的數據, 就是說設備完整接收該報文后,需要在T3 時間內發送應答報文給ECU。低位字節0 是一個0-F 間的計數據值。 如果高位半字是2,同樣代表該報文是有效數據,但設備接收到該報文后,應繼續接收后面的報文。 這是只有一個幀的情況第一字節為10。 診斷議已接收, 751 B1 設備接收后,響應B1(1 是計數值,是最后一幀接收到的報文的計數值加1,在0-F 間的值。 |
751 11 00 02 1A 9B | 讀版本信息指令: 1A 9B 11 是設備發送的報文控制字, 1 代表請求ECU 數據,1 是計數值,設備每次請求應將此值加1,在0-F 間循環。 請求連接診斷1A 9B(KWP2000 定義的數據) 02 是設備發送的數據的長度, 02 前面的字節00 不能變。 |
300 B2 300 21 00 30 5A 9B 34 46 30 300 22 39 31 30 39 30 30 43 300 23 20 20 30 31 32 30 03 300 24 00 08 5F 07 EA 05 EC 300 25 04 74 4B 4F 4D 42 49 300 26 49 4E 53 54 52 2E 20 300 27 4D 37 33 20 48 31 33 300 18 20 |
返回多包數據,注意ECU 前面一條響應已經發回過一個數據包,所以這個計數據值為B2,同樣后面的流數據從21 開 始,因為前條指令已發了一條。 30 0x30=48 是數據的總長度,陰影部分總長 最后一幀 |
751 B9 | 診斷議已接收,響應B9(9 是計數據值) |
751 12 00 0431 B8 00 00 | 讀功能選擇判斷協議,見協議部分 |
300 B3 300 29 00 1071 B8 01 02 01 300 2A03 01 04 01 06 01 07 300 1B 01 08 01 0C |
10 是有效數據的長度,總計16 字節 |
751 BC | |
751 A3 300 A1 0F 8A FF 4A FF 751 A3 300 A1 0F 8A FF 4A FF |
空閑幀命令應答, TP2.0 協議規定的格 式 |
注:這里有2 對計數值是獨立的,不要混, 1、設備請求計數。ECU 接收到后注:這里有2 對計數值是獨立的,不要混, 1、設備請求計數。ECU 接收到后確認的確認應答計數,是設備的請求值+1。2、ECU 發送數據的計數設備接收完成后的應答計數是ECU 的發送最后一楨數據的記數值加一。
TL718 如何工作與編程
為了方便PC 串編程, TL718 已以為你建立了TP2.0 數據鏈路部分數據的通訊,為了方便PC 串編程, TL718 已以為你建立了TP2.0 數據鏈路部分數據的通訊,只要使用方便的OBD 命令可直接讀取,發送數據。
TL718 的診斷過程如下:
**************************************************************
>atspg 選擇協議 G
OK
>atiia07 設定觸發地址0x07 為儀表
OK
>atsw19 設定鏈路保持時間1S
OK
**************************************************************
>10 00 02 10 89 發送診斷開始命令( 11 位ID 由TL718 自動設置)
300 B1 ECU 應答
300 10 00 02 50 89 ECU 返回的數據,代表進入診斷成功
******** 在這過程中TL718 做了什么? ************
1、TL718 發送了觸發命令
2、接收后根據ECU 的系統自動設置了發送的11 位ID ,及接收ID
3、接着發送了建立連接命令。
4、連接建立后發送了10 00 02 10 89 的診斷開始命令。
5、接收完成后,自動應答ECU 接收完成。就是下列表格內的數據。接收回來是ECU 對1089 請求的應答數據。
6、同時如果總線上在1S 內沒有通訊, TL718 會自動發送鏈路保持數據, 並接收以保持鏈路正常。
200 07 C0 00 10 00 03 01 207 00 D0 00 03 51 07 01 |
751 A0 0F 8A FF 32 FF 300 A1 0F 8A FF 4A FF |
751 10 00 02 10 89 300 B1 300 10 00 02 50 89 751 B1 |
下一步你只要跟據需要發送各種請求即可
**************************************************************
>11 00 02 1a 9b 讀ECU 版本信息
300 B2 |
300 21 00 30 5A 9B 34 46 30 |
300 22 39 31 30 39 30 30 43 |
300 23 20 20 30 31 32 30 03 |
300 24 00 08 5F 08 31 0D EC |
300 25 15 7C 4B 4F 4D 42 49 |
300 26 49 4E 53 54 52 2E 20 |
300 27 4D 37 33 20 48 31 32 |
300 18 20 |
(接收完成后的應答與TL718 內部自動完成,不用應用程序發送)
應用程序接收到這些數據后應進行重組並處理,取消無用的字節。
**************************************************************
>12 00 04 31 B8 00 00 讀菜單功能項
300 B3 |
300 29 00 10 71 B8 01 02 01 |
300 2A03 01 04 01 06 01 07 |
300 1B 01 08 01 0C |
**************************************************************
>13 00 04 18 00 FF 00 讀故障碼
300 B4 |
300 1C 00 0B 58 00 00 00 00 |
讀到0 個故障碼
**************************************************************
注意:加粗的字節值的變化規律。
每次發送OBD 診斷請求命令時要求計數值加一,發送的數據不用包含每次發送OBD 診斷請求命令時要求計數值加一,發送的數據不用包含CAN 幀內的長度字節,長度字節由TL718 發送時自動插入。接收時的CAN 幀內的長度字節TL718 自動取消。所以你使用時沒用CAN 定義的長度字節。
**************************************************************
>A8 退出診斷,這是TP2.0 定義的結束指令>A8 退出診斷,這是TP2.0 定義的結束指令
NO DATA
**************************************************************
>ATPC 發送ATPC 指令關閉協議>ATPC 發送ATPC 指令關閉協議
OK
**************************************************************