TSMaster 可以少代碼甚至零代碼就可以完成診斷流程開發,診斷開發人員只需要熟悉診斷流程,就能打通研發、產線、售后整條鏈路環節。
TSMaster 的 UDS 診斷功能不僅支持 CAN, LIN,同時也支持以太網的 DoIP 的診斷功能,TSMaster 的 CAN UDS 診斷操作指南(上)篇,主要是針對UDS 診斷模塊的創建、CAN UDS 診斷傳輸層配置和TSMaster 基礎診斷配置進行講解。
本文關鍵詞:UDS,基礎診斷,診斷系統變量
目錄
Catalog
1.TSMaster 的 UDS 診斷模塊的創建
2.CAN UDS 診斷傳輸層配置
3.TSMaster 基礎診斷配置
TSMaster 的 UDS 診斷模塊的創建
TSMaster 的 UDS 診斷模塊的創建流程如下:
Step1:診斷模塊位于主菜單【應用】->【診斷模塊】,如下圖 1-1。
圖 1-1 診斷模塊
Step2:【添加基礎診斷】模塊,可以添加多個 CAN 基礎診斷模塊,如圖 1-2。
圖 1-2 添加 CAN 基礎診斷模塊
TSMaster 支持創建多個診斷模塊,并通過多通道的同星 CAN 卡進行綁定,可以同時與多個UDS診斷 ECU進行連接和診斷交互,進一步可以實現多個ECU的同步診斷刷寫功能。
CAN UDS 診斷傳輸層配置
TSMaster 提供了診斷傳輸層的配置功能,用戶可以根據需求配置相應的傳輸層配置比如總線類型、請求和應答 ID、FD 可變波特率、安全算法等等一系列配置。
1.
診斷傳輸層
CAN 診斷傳輸層 ISO TP,包含診斷傳輸層和診斷服務層參數,如圖 2-1 所示。
圖 2-1 診斷傳輸層 ISO TP 配置
其中診斷傳輸層 ISO TP 的具體參數如下分類介紹:
● 總線類型:診斷傳輸層類型
使用同星 UDS on CAN/CANFD 功能可以選擇總線類型為【CAN】或者【CANFD】,通過下拉列表可以選擇,如圖 2-2 所示:
圖 2-2 CAN/CANFD 診斷總線類型
● 通道:診斷模塊用到的邏輯通道
TSMaster 支持多個診斷模塊同時在線工作,這里用于選擇當前診斷模塊的應用邏輯通道,通過下拉列表進行選擇,如圖 2-3 所示:
圖 2-3 傳輸層通道選擇
● 請求 ID: 設置診斷模塊 PC 工具端的診斷請求 ID。
● 請求 ID 類型:設置診斷模塊 PC 工具端的診斷請求 ID 類型,0 是標準幀(11 位),1 是擴展幀(29 位),如圖 2-4 所示。
圖 2-4 請求 ID 類型選擇
● 應答 ID:設置診斷模塊 PC 工具端的診斷應答 ID
● 應答 ID 類型:設置診斷模塊 PC 工具端的診斷應答 ID 類型,0 是標準幀(11 位),1 是擴展幀(29 位)。
● 功能 ID:設置診斷模塊 PC 工具端的診斷功能 ID
● 功能 ID 類型:設置診斷模塊 PC 工具端的診斷功能 ID 類型,0 是標準幀(11 位),1 是擴展幀(29 位)。
● 發送填充字節:傳輸過程中,實際有效字節不足一個 CAN 報文數據端的時候,剩余數據段進行填充字節。比如一幀 CAN 報文 8 個字節,如果有效傳輸字節是[0x02,0x10,0x02],填充字節是 0xAA,則實際的報
文字節是[0x02,0x10,0x02,0xAA,0xAA,0xAA,0xAA,0xAA]。
●接收幀間隔:接收連續幀最小幀間隔(ms)。TSMaster 診斷模塊作為接收端,在接收連續幀報文的時候能夠支持的診斷幀之間的最短時間間隔,這個參數是回復給診斷客戶端的。設置為 0,表示支持以最短的時間間隔接收。
● 用戶自定義發送幀間隔:發送連續幀最小間隔由用戶確定,具體間隔時間由【發送幀間隔】的值設定。
● 發送幀間隔:發送連續幀最小間隔。
● 發送塊大小:TSMaster 診斷模塊作為發送端,在發送連續幀報文的時候一次能夠發送的數據塊的大小。設置為 0,表示一次性能夠發送任意大小的數據塊。
● FC 幀后間隔:表示發送流控幀與發送第一幀連續幀之間的最大時間間隔。
● FD 最大 DLC:FD 幀的最大 DLC 值,該參數只在有【總線類型】為CAN FD 模式下才有效。如圖 2-5 所示:
圖 2-5 FD 幀的最大 DLC
● FD 可變波特率:可以選擇是否開啟可變波特率模式。
● 最大長度:服務層數據包的最大長度。該參數對于普通 CAN/LIN 是無意義的。
比如,多幀傳輸時 DLC 長度=8 字節,首幀(First Frame)采用第 0 字節低四位加第一個字節的 8 位,共 12Bit 表示一次傳輸的包的大小,也就是最多 4095個字節,如下表所示:
當使用 CANFD 協議時,設置 DLC 長度>8 字節,可以采用更多的 Bits 來傳輸信息。因此,CANFD 的傳輸層支持采用第 2,3,4,5 四個字節共 32bit 來傳輸一個數據 Block 的長度,換句話說,CANFD 的傳輸層一次支持傳輸最多 4 個 G 的數據。具體支持多少,可由用戶自主進行配置。
注意:第一個字節 Byte0 的高四位=1,表示該幀是首幀(First Frame),無論是 CAN 還是 Classical CAN 的傳輸層都是如此。
2.
診斷服務層
診斷服務層參數主要包含路由激活,S3,P2 時間參數,以及加載 SeedKey的安全訪問。如圖 2-6 所示:
圖 2-6 診斷服務層參數
2.1 P2 時間參數
【P2 超時時間】:表示 ECU 收到診斷請求幀過后,最短回復的時間間隔。對于診斷工具端,該參數可以作為發送請求過后,等待回復的超時判斷參數。比如診斷工具發送了一個診斷報文,P2 超時時間段內都沒有收到回復,則認為請求失敗,超時退出。
【P2 擴展時間】:當診斷工具發出診斷報文過后,被測 ECU 來不及在 P2 超時時間段內做出應答,則回復一幀 7F XX 78 報文,告訴診斷工具端自己來不及響應,需要延長等待時間再回復。ECU 發送了延遲等待報文后,則把等待時間參數切換為 P2 擴展時間。診斷工具端的超時判斷參數在收到延遲等待報文后,需要切換到 P2 擴展時間。
上述兩個參數可以點開【詳情】按鈕,查看圖示說明,如圖 2-7 所示:
圖 2-7 P2 時間參數設置
2.2 診斷儀在線
診斷儀在線包括 S3 服務器時間和 S3 客戶端時間參數。
【S3 服務器時間】:表示該 ECU 從默認會話(Default Session)被切換到其他會話過后,經過多長時間會自動切換回默認會話的超時時間。
【S3 客戶端時間】:表示作為診斷測試儀端,發送 TesterPresent 幀的時間間隔。
上述兩個參數的示意圖,可以點開【詳情】按鈕,查看圖示說明,如圖 2-8所示:
圖 2-8 S3 時間參數設置
【診斷儀在線】:TSMaster 斷模塊中,可以選擇配置并使能診斷儀在線命令,如圖 2-9 所示:
圖 2-9 診斷儀在線設置
當使能【診斷儀在線】,在診斷模塊上方會出現啟動【診斷儀在線】的開關。設置診斷儀在線為【打開】狀態,則按照設定的 S3 客戶端時間間隔發送該報文。
診斷儀在線的發送字節是可選的。支持三種類型:
【默認診斷儀在線服務】:為最常用的 0x3E 0x80。
【從基礎配置中選擇】:從基本診斷配置中選擇配置好的 3E 命令。
【用戶自定義】:用于自定義的字節
2.3 種子密鑰
TSMaster 中提供了兩種 SeedKey 種子密鑰的處理方法。第一種就是常用的加載主流的種子密匙的 DLL 動態鏈接庫;第二種是提供了內置的種子密鑰的解釋器,可以直接編寫 SeedKey 源代碼,并可以保存生成 DLL 動態鏈接庫。
2.3.1 載入動態鏈接庫
TSMaster 不僅支持了 C/C++,Delphi 等語言封裝的 DLL 文件,也新增支持基于 Dot Net 平臺如 C#,VB.Net 等語言編寫的 DLL 動態鏈接庫,可以高效兼容不同平臺生成的安全訪問 DLL,為工程師帶來更便捷的使用體驗。
載入動態鏈接庫加載界面,如圖 2-10 所示:
圖 2-10 載入動態鏈接庫
圖標從左往右依次為:
【1】 加載 DLL
【2】 刪除 DLL
【3】 打開 DLL 校驗器,通過 DLL 校驗器,用戶可以判斷加載的 DLL 接口是否正確,算法是否符合設計要求。比如,用戶選擇 Seed 的 Level 過后,輸入 Seed
值,點擊 GenKey 進行判斷。如果該 DLL 接口跟模板定義接口統一,則會輸出提示信息:Generate Key Success,然后用戶根據 Key 值跟目標值對比,進一步確認 DLL 中的算法是否符合設計要求。如圖 2-11。
圖 2-11 SeedKey 校驗器
【4】 可打開 TSMaster 安裝目錄下 Seed&Key 接口工程所在的文件路徑。
在 TSMaster 安裝目錄中,提供了封裝 Seed&Key 算法的模板工程。如GenerateKeyEx,GenerateKeyExOpt ASAP1A_CCP_ComputeKeyFromSeed,基于此模板工程開發即可得到能夠直接加載的 DLL 函數。TSMaster 默認支持SeedKey 函數接口具體為如下:
函數接口 1:
unsigned int GenerateKeyEx(
const unsigned char* ipSeedArray, /* Array for the seed [in] */
unsigned int iSeedArraySize,
/* Length of the array for the seed [in] */
const unsigned int iSecurityLevel,/* Security level [in] */
const char* ipVariant,
/* Name of the active variant [in] */
unsigned char* iopKeyArray,
/* Array for the key [in, out] */
unsigned int iMaxKeyArraySize, /* Maximum length of the array for the key
[in] */
unsigned int& oActualKeyArraySize);
/* Length of the key [out] */
函數接口 2:
unsigned int GenerateKeyExOpt(
const unsigned char* ipSeedArray, /* Array for the seed [in] */
unsigned int iSeedArraySize, /* Length of the array for the seed [in] */
const unsigned int iSecurityLevel, /* Security level [in] */
const char* ipVariant, /* Name of the active variant [in] */
const char* iPara, /* */
unsigned char* iopKeyArray, /* Array for the key [in, out] */
unsigned int iMaxKeyArraySize, /* Maximum length of the array for the key [in]
*/
unsigned int& oActualKeyArraySize) /* Length of the key [out] */
函數接口 3:
bool ASAP1A_CCP_ComputeKeyFromSeed(
const unsigned char* ipSeedArray, /* Array for the seed [in] */
unsigned short iSeedArraySize, /* Length of the array for the seed [in] */
unsigned char* iopKeyArray, /* Array for the key [in, out] */
unsigned short iMaxKeyArraySize, /* Maximum length of the array for the key
[in] */
unsigned short* opSizeKey) /* Length of the key [out] */
如何兼容其他函數接口
在日常使用中經常出現用戶已經開發好了 SeedKey DLL,同時該 DLL 的接口不是上述三種中的任何一種,則無法直接加載到 TSMaster 的診斷模塊中。對此,可以通過二次封裝的形式將存在的 SeedKey 算法庫進行包裝,生成可以直接加載到 TSMaster 診斷模塊中的 DLL 。
以一個實際的實例來講解如何兼容其他接口函數的 DLL 文件,二次封裝流程的示意圖,如圖 2-12。
圖 2-12 二次封裝流程
第一步,查看當前的DLL,名稱為 UserSeedKey.DLL。該函數內部的 API 函數有:
●Seed 等級為 1 的時候,調用函數 void GetKeyFromSeed01(byte* ASeed, byte*AKey);
●Seed 等級為 3 的時候,調用函數 void GetKeyFromSeed03(byte* ASeed, byte*AKey);
●Seed 等級為 11 的時候,調用函數 void GetKeyFromSeed11(byte* ASeed, byte*AKey);
進而得知當前 DLL 不支持上述三種函數接口,需要進行二次封裝。
第二步,選擇 TSMaster 安裝目錄中提供的 GenerateKeyEx 的模板工程,在該工程中用上述 DLL 的函數接口。基本思路是:
1. 采用 Loadlibrary 動態用戶現有的 DLL。
2. 根據傳入的 Level 參數,采用 GetProcAddress 函數動態獲取實際的用于計算Key 的函數指針。
3. 如果獲取函數指針成功,則使用該函數指針傳輸 Seed 值,并計算對應的 Key值。GenerateKeyEx 工程二次封裝示例,如圖 2-13。
圖 2-13GenerateKeyEx 工程二次封裝示例
第 三 步, 該 GenerateKeyEx 工 程 開 發 結 束 后 , TSMaster 直 接 加 載GenerateKeyEx 所在的 DLL。需要注意的是,用戶需要把現有的 UserSeedKey.DLL
拷貝到 TSMaster 根目錄或者 GenerateKeyEx.DLL 所在的目錄。如果不拷貝過去,GenerateKeyEx.DLL 執行的時候會出現找不到對應依賴 DLL 的情況,解鎖失敗。
2.3.2 編寫 SeedKey 代碼
在 TSMaster 的內置算法編輯器里的操作流程,示意如圖 2-14 所示。
圖 2-14 內置算法編輯器
【1】選擇 SeedKey 算法的函數;
【2】打開算法校驗器,可以于檢查算法結果是否正確;
【3】打開編寫代碼的窗口;
【4】可用于導出所編寫代碼的為 DLL 文件;
【5】選擇一個需要的 SeedKey 函數接口,并支持擴展自定義函數接口;
【6】SeedKey 源代碼編輯工作區,用于解密算法代碼的輸入與編輯。
值得注意的是,TSMaster 目前提供了最常用的算法函數的接口形式,如果使用自己特殊的函數接口形式,可以聯系上海同星支持,可將相應接口增加到選項中。
另外,所有的接口函數都定義了返回值類型為 s32。增加此約束,主要是增加函數的嚴謹性。其中,返回值為 0 表示成功,返回值為其他值則有對應的錯誤碼。因此,在編輯代碼的時候,最后一行需要加上 return 返回值,如圖 2-15 所示,否則系統執行函數過后會認為算法執行失敗,不予往后面執行。
圖 2-15 函數 return 返回值
TSMaster 基礎診斷配置
基礎診斷模塊包含基本診斷服務和組合服務。對于診斷過程中獨立執行的命令,在基本診斷服務中;用于文件下載的$34、$36 和$37 放入組合服務中。如圖3-1 所示:
圖 3-1 基礎診斷配置
1.
添加刪除服務命令
把鼠標放到需要添加和刪除的服務命令上方,右鍵展開,選擇是否需要添加和刪除該服務,如下圖所示:
圖 3-2 添加和刪除的服務命令
2.
配置基本診斷參數
以診斷會話控制為例,主要包含如下參數的配置,如圖 3-3:
圖 3-3 配置基本診斷參數
【1】 配置服務名稱:用戶可以配置一個易于理解和管理的服務名稱。
【2】 是否功能標識符:本診斷服務是否采用功能標識符發送診斷請求。
【3】 是否有回復:用戶可配置是否檢查此服務的回復內容。
【4】 選擇子服務類型:比如 Session Control 中的 DiagnosticSessionType 就包含如上圖所示的 Session 類型。
【5】 參數列表的字節序:支持 Motorola 和 Intel 字節序。
【6】 參數列表:診斷服務除了診斷 ID 和子服務類型 ID,還可以帶著參數發送給被測 ECU。參數列表包含請求和應答幀的參數列表,可以選擇增加/刪除多種類型的參數。如圖 3-4。
圖 3-4 新增與刪除參數
其中,根據不同服務指令,可以設置不同的 ID 參數。比如診斷請求會話里的診斷會話類型參數是必選設置,而參數列表是可選的。在修改配置后,界面上方會實時顯示實際診斷報文的示例報文,如請求協議數據包是:【10 01 xx xx】:xx 表示該參數是可變的,根據用戶實際填入的數據確定;診斷儀將要收到的應答協議數據包為【50 01 xx】。如圖 3-5 所示。
圖 3-5 請求與應答參數設置
3.
診斷服務參數
診斷模塊參數支持 7 種數據類型。包括:UInt,Int,Single,Double,HexArray,Ascii 和 SystemVar。如圖 3-6。
圖 3-6 診斷模塊參數類型
【1】 UInt:無符號整型,其數據長度必須小于 32bits,并且為 8 的倍數,可以為 8,16,24,32bits。
【2】 Int:有符號整形,其數據長度必須小于 32bits,并且為 8 的倍數,可以為8,16,24,32bits。
【3】 Single:單精度浮點數,數據長度為固定的 32bits。用戶直接輸入輸出浮點數據。
【4】 Double:單精度浮點數,數據長度為固定的 64bits。用戶直接輸入輸出浮點數據。
【5】 Hex Array:十六進制數組,數據長度為 8 的倍數。輸入數據滿足 16 禁止數據類型。
【6】 ASCII:ASCII 字符串,數據長度為 8 的倍數。輸入數據為 ASCII 字符數組,轉化為 16 進制后進行發送。
【7】 SystemVar:系統變量,數據長度為 8 的倍數。TSMaster 系統變量可支持Uint,Int,Single,Double,UintArray,DoubleArray,HexArray,String 等各種數據類型。其具體的數據類型由系統變量自身定義所決定。
4.
配置組合服務
診斷組合服務($343637 下載文件)共包含通用配置、擦除 Flash 配置、請求和傳輸數據配置、傳輸退出配置、擴展和輔助的配置。如下詳細介紹每個配置。
4.1 通用配置
通用配置中支持加載下載文件格式為 hex/bin/s19/mot/srec/vdf 等等。可以對起始地址和數據長度的字節數修改,調調整校驗和字節序和自定義 CRC 校驗算法導入和修改,并可通過下載文件查看器下載文件內容。如圖 3-7。
圖 3-7 通用配置
【1】服務名稱:配置該服務的名稱
【2】文件名稱:加載可執行文件,支持 hex\bin\s19\mot\srec\vdf...
【3】hex viewer:TSMaster 內置了可執行文件查看編輯器 TSHexViewer,用戶可以用該工具,查看載入 Hex 文件的詳細信息,如圖 3-8 所示。
圖 3-8 查看載入的下載文件
【4】地址和長度標識符。可修改起始地址和數據長度的字節。
【5】校驗和相關配置。校驗和字節序支持英特爾和摩托羅拉。在程序下載過程中,為了保證數據的完整性,需要引入 Checksum 算法對數據的完整性和有效性進行校驗。TSMaster 診斷模塊的符合服務中,引入了主流的 CRC 算法進行校驗。其選擇框如下圖所示,同時可實現自定義 CRC 校驗算法導入和修改,此處自定義算法只能是 DLL 文件的形式,如圖到 3-9。
圖 3-9 支持自定義 CRC 算法導入與修改
當加載好下載文件后,選擇指定的算法過,診斷模塊會對可執行文件計算其檢驗和值,包括該可執行文件每一個數據塊的檢驗和值以及文件整體的檢驗和值,如圖 3-10 所示。
圖 3-10 文件與數據塊檢驗和值
TSMaster 的診斷模塊能夠直接把系統變量作為參數,在計算好每一個數據塊與文件的檢驗和值過后,會進一步自動轉化成系統變量,如圖 3-11。
圖 3-11 檢驗和系統變量
生成好的檢驗和系統變量,可以通過系統變量的類型添加到服務參數中。以常用的校驗可執行文件的有效性為例,配置如下的 $31 例程控制服務命令,就可以實現對文件有效性的檢查,如圖 3-12:
圖 3-12 檢驗和系統變量添加到服務參數
4.2 擦除 Flash 配置
擦除 Flash 配置,可以配置無自動擦除、擦除 Hex 地址范圍、下載每一個數據塊之前擦除對應塊。期望回復值以實際 ECU 的響應進行填寫輸入。如圖 3-13。
圖 3-13 擦除 Flash 配置
4.3 請求和傳輸數據配置
請求傳輸數據命令的數據格式可以修改,比如從 00 修改為 AA。可以自定義最大傳輸數據塊的長度,默認為 0x202,實際傳輸層數據包為 514 字節。如圖3-14。
圖 3-14 請求和傳輸數據配置
4.4 傳輸退出配置
傳輸退出配置,可以設置如下配置,如圖 3-15:
● 無校驗
●在 ECU 端校驗($37+塊校驗和)
●用戶自定義
●在 PC 端校驗($37+塊校驗和)
●校驗和類型選擇無校驗或校驗每一個數據塊
圖 3-15 傳輸退出配置
4.5 擴展
擴展配置可以添加簽名文件、特殊的 CRC 算法,與通用配置-校驗和相關配置里的自定義 CRC 算法導入相比,此處更靈活可支持任意格式的文件,如圖 3-16。
圖 3-16 擴展配置
4.6 輔助
輔助中可對下載文件按連續地址的大小分割,比如將數據塊按 0x1000 進行分割。如圖 3-17。
圖 3-17 下載文件分割設置
-
CAN
+關注
關注
57文章
2715瀏覽量
463364 -
診斷系統
+關注
關注
0文章
36瀏覽量
11751 -
MASTER
+關注
關注
0文章
103瀏覽量
11260
發布評論請先 登錄
相關推薦
評論