1. 概述
1.1 功能描述
本範例將使用 S32DS for ARM 平台操作,由 S32K34X_EVB 燒錄 bootloader 的程式,實現 bootloader 功能並使用 UDS 協議方式,文件說明 UDS 協議內容,與 AES 加密服務,應用於 bootloader 上。
1.2 硬體開發工具
S32K34X-EVB 評估板
PEmicro Multilink Universal 燒錄器
1.3 軟體開發工具
S32 Design Studio for ARM
1.4 參考相關程式碼
S32K344_CAN_UDS_Bootloader
2. SDK 說明與使用
2.1 概述
S32 SDK PA 可以在 S32 Design Studio IDE 開發環境中使用 Processor Expert 工具配置使用者需要的設置,並自動生成設置檔案,提供快速便捷的 Device 與 IP 設置方式。
2.1.1 SDK 版本說明
SDK 的版本分為以下三種:
EAR : Early Assess Release,早期評估版,是 SDK 最先發布的版本,提供基本的SDK 功能,可以做為早期軟體評估使用。
BETA : Beta 版是修復 EAR 版若干 Bug 後發布的 SDK 版本,相較於 EAR 版本,功能更加完善。
RTM : Ready To Manufacture,最終量產版本,提供最完善的 API 接口及外設 IP 配置選項,修復
2.1.2 S32 Design Studio IDE 的使用方式與安裝方式
關於 S32 Design Studio for S32 的使用方式,請參考文件 “ S32 Design Studio for S32 Architecture 平台安裝教學 ”。
3. UDS 協議
3.1 SID ( Service Identifier )
下面圖表說明不同 SID 所代表的服務功能
而在請求功能的 SID 數值加上 0X40 即為回覆功能的 SID
以下為常用的 SID ,圖片來源為維基百科,除了常用的 SID 之外還有其他 SID ,這裡便不多做介紹 ( 例如 : 請求 SID 0X3D 寫入 memory address 等等 )
3.2 Subfunction
不同的 SID 會有不同的 Subfunction ,這裡使用 SID ( 0x19 ) 來說明 Subfunction
下列為 0x19 的 28 種 Subfunction ,0x19 為讀取 DTC 資訊的 SID
0x01 : Report number of DTC by Status Mask ;
0x02 : Report DTC by Status Mask
0x03 : Report DTC Snapshot Identifi cation
0x04 : Report DTC Snapshot Record by DTC number
0x05 : Report DTC Snapshot Record by Record number
0x06 : Report DTC Extended Data Record by DTC number
0x07 : Report number of DTC by Severity Mask Record
0x08 : Report number of DTC by Severity Mask Record
0x09 : Report Severity Information of DTC
0x0A : Report Supported DTC
0x0B : Report First Test Failed DTC
0x0C : Report First Confi rmed DTC
0x0D : Report Most Recent Test Failed DTC
0x0E : Report Most Recent Confi rmed DTC
0x0F : Report Mirror Memory DTC by Status Mask
0x10 : Report Mirror Memory DTC Extended Data Record by DTC number
0x11 : Report number of Mirror Memory DTC by Status Mask
0x12 : Report number of Emissions Related OBD DTC by Status Mask
0x13 : Report Emissions Related OBD DTC by Status Mask
0x14 : Report DTC Fault Detection Counter
0x15 : Report DTC with Permanent Status
3.3 請求 & Positive & negative
3.3.1 請求格式
SID + subfunction + data
3.3.2 Positive response 肯定響應
( SID + 0x40 ) + subfunction + data
3.3.3 Negative response 否定響應
7F + SID + NRC
3.4 NRC
常用 NRC
0x11 : SID 不支援
0x12 : Subfunction 不支援
0x13 : 請求長度或格式不正確
0x31 : 請求超出範圍
0x7E : 當前狀態下 SID 不支援
0x7F : 當前狀態下 Subfunction 不支援
4. AES 加密服務
車用上的 UDS 應用,會需要安全相關加密服務,這裡使用 AES 加密服務,全名為 Advanced Encryption Standard ,是利用矩陣的方式來進行加密,廣泛的為全世界所使用,加密步驟分別為 4 種,對應不同功能,步驟如下 :
AddRoundKey 步驟 :將每個狀態中的位元組與該回合金鑰做互斥或(⊕)。
SubBytes 步驟 :矩陣中各位元組被固定的8位元尋找表中對應的特定位元組所替換,S; bij = S(aij).
ShiftRows 步驟 : 矩陣中每一列的各個位元組循環向左方位移。位移量則隨著列數遞增而遞增。
MixColumns 步驟 : 每個直列都在modulo { x^{4}+1}之下,和一個固定多項式c(x)作乘法。
利用此 4 個步驟對矩陣與金鑰來做操作,達到加密功能
參考資料 : 維基百科
5. 程式碼說明
5.1 AES 加密程式
5.1.1 extendkey
5.1.2 SubBytes
5.1.3 addRoundKey
5.1.4 shiftRows
5.1.5 mixColums
5.2 UDS subfunction 範例
5.3 UDS NRC範例
5.4 UDS 功能範例
5.1.1 diagnose mode control
5.1.2 communication control
5.1.3 control DTC setting
5.1.4 security access
5.1.5 write data by identifier
5.1.6 request download data
5.1.7 transter data
5.1.8 request exit transfer
5.1.9 reset ECU
5.1.10 diagnose mode control
第五章節內容與相關程式碼請聯絡 Michael
聯絡方式 Michael.Gao@wpi-group.com
評論
huagang
2023年3月9日