基于UDS协议的Bootloader
參考上汽標(biāo)準(zhǔn):SMTC 2 800 004 電控單元診斷開(kāi)發(fā)的技術(shù)要求
一、概述
二、Bootloader要求
三、刷新流程
四、刷新示例
一、概述
Bootloader概述:使用UDS協(xié)議服務(wù)實(shí)現(xiàn)應(yīng)用軟件,應(yīng)用數(shù)據(jù)(包括網(wǎng)絡(luò)配置數(shù)據(jù)和標(biāo)定數(shù)據(jù))的更新。Bootloader主要用于:研發(fā)、生產(chǎn)、售后。
?
二、Bootloader要求
?總體要求:
1.bootloader應(yīng)支持刷新電控單元的應(yīng)用軟件、應(yīng)用數(shù)據(jù)(包括網(wǎng)絡(luò)配置數(shù)據(jù)和標(biāo)定據(jù))。
2.bootloader負(fù)責(zé)驗(yàn)證應(yīng)用軟件和應(yīng)用數(shù)據(jù)是否正確。
3.當(dāng)應(yīng)用軟件或應(yīng)用數(shù)據(jù)丟失或需要更新時(shí),電控單元須進(jìn)行刷新以恢復(fù)功能
4.數(shù)據(jù)傳輸基于CAN 總線并滿(mǎn)足 ISO 15765-2 和 ISO 14229-1 的要求
5.任何情況下電控單元都不應(yīng)支持?jǐn)?shù)據(jù)上傳功能
6.應(yīng)用軟件、網(wǎng)絡(luò)配置數(shù)據(jù)和標(biāo)定數(shù)據(jù)應(yīng)可單獨(dú)進(jìn)行刷新。引導(dǎo)加載程序禁止自更新
7.對(duì)于同一物流數(shù)據(jù)標(biāo)識(shí)符,分別從應(yīng)用軟件和引導(dǎo)加載程序獲取到的信息應(yīng)相同?
通信要求1.引導(dǎo)加載程序應(yīng)使用固定的 CAN ID,與增強(qiáng)型診斷的 CAN ID相同
2.診斷請(qǐng)求和應(yīng)答報(bào)文的數(shù)據(jù)長(zhǎng)度固定 8字節(jié),不足填充0x00
3.網(wǎng)絡(luò)層時(shí)序參數(shù)要求遵照ISO 15765-2定義
4.流控要求
5.應(yīng)用層時(shí)序要求
安全要求1.電控單元應(yīng)保證從應(yīng)用軟件跳轉(zhuǎn)至bootloader時(shí)的狀態(tài)是安全的
2.測(cè)試設(shè)備應(yīng)使用種子和密鑰進(jìn)行安全訪問(wèn),以防止未授權(quán)刷新。
3.bootloader應(yīng)使電控單元輸入輸出端口設(shè)置為安全狀態(tài)
4.bootloader程序應(yīng)被保護(hù),不可刷新,在刷新失敗時(shí)應(yīng)能再次刷新
5.電控單元應(yīng)將刷新計(jì)數(shù)存儲(chǔ)于非易失性存儲(chǔ)器,每次加1
6.電控單元應(yīng)計(jì)算每個(gè)數(shù)據(jù)塊CRC并在退出傳輸服務(wù)請(qǐng)求的肯定應(yīng)答中返回CRC(CRC遵守CTII-16)
7.電控單元應(yīng)對(duì)下載到存儲(chǔ)器的數(shù)據(jù)進(jìn)行完整性檢查
8.電控單元應(yīng)驗(yàn)證應(yīng)用軟件與引導(dǎo)加載程序是否兼容、應(yīng)用數(shù)據(jù)與應(yīng)用軟件是否兼容
9.電控單元退出刷新會(huì)話(huà)時(shí)應(yīng)根據(jù)軟件完整性狀態(tài)和軟件兼容性狀態(tài)的參數(shù)值更新軟件有效標(biāo)志位,都有效時(shí)置1,bootloader才能運(yùn)行
會(huì)話(huà)管理要求1.電控單元應(yīng)在收到請(qǐng)求報(bào)文 DSC:02 后500 ms 內(nèi)進(jìn)入引導(dǎo)加載程序的刷新會(huì)話(huà)
2.流程
?a) 電控單元運(yùn)行在應(yīng)用軟件時(shí)接收到子功能為 0x02 的服務(wù)$10 請(qǐng)求報(bào)文,應(yīng)置刷新入口標(biāo)志位為真(1)并存儲(chǔ)于非易失性存儲(chǔ)器。
?b) 電控單元復(fù)位。
?c) 電控單元啟動(dòng),進(jìn)入引導(dǎo)加載程序的默認(rèn)會(huì)話(huà),并檢查刷新入口標(biāo)志位的值判斷之前應(yīng)用軟件是否請(qǐng)求進(jìn)入刷新會(huì)話(huà)。(刷新入口標(biāo)志位判斷需在啟動(dòng)時(shí)間20 ms 內(nèi)完成。)
?d) 若為真,電控單元進(jìn)入刷新會(huì)話(huà)并將刷新入口標(biāo)志清零。
?e) 若為否,電控單元保持運(yùn)行在引導(dǎo)加載程序中的默認(rèn)會(huì)話(huà)。僅當(dāng)啟動(dòng)時(shí)間超過(guò)20 ms 且軟件有效標(biāo)志位為真時(shí),電控單元從引導(dǎo)加載程序跳轉(zhuǎn)到應(yīng)用軟件
存儲(chǔ)器分配要求電控單元存儲(chǔ)器分為 4 個(gè)分區(qū)
1)應(yīng)用軟件
2)網(wǎng)絡(luò)配置數(shù)據(jù)
3)標(biāo)定數(shù)據(jù)
4)Bootloader程序
診斷服務(wù)要求
?
???? bootloader應(yīng)支持的服務(wù)
診斷服務(wù)要求??? 請(qǐng)求下載服務(wù)($34)
n診斷服務(wù)要求??? 傳輸數(shù)據(jù)服務(wù)($36)
注: 發(fā)生序號(hào)錯(cuò)誤,序號(hào)超過(guò)長(zhǎng)度都應(yīng)終止數(shù)據(jù)傳輸
注:將下載循環(huán)中傳輸?shù)臄?shù)據(jù)塊的循環(huán)冗余校驗(yàn)值發(fā)送給測(cè)試工具。校驗(yàn)算法為多項(xiàng)式 CRC16(CITT)。
多項(xiàng)式:0x1021
初始值:0xFFFF
三、刷新流程
刷新步驟
?
?步驟 a(標(biāo)準(zhǔn)步驟):
?????? 刷新事件由一個(gè)會(huì)話(huà)類(lèi)型為刷新會(huì)話(huà),物理尋址/功能尋址的診斷會(huì)話(huà)控制($10)服務(wù)開(kāi)始。電控單元接收到請(qǐng)求報(bào)文后應(yīng)為程序刷新分配一切必須的資源。
步驟 b(標(biāo)準(zhǔn)步驟):
?????? 測(cè)試工具獲取電控單元的物流數(shù)據(jù),如車(chē)輛識(shí)別代碼、電控單元硬件號(hào)等。
步驟 c(標(biāo)準(zhǔn)步驟):
?????? 測(cè)試工具解鎖電控單元使能刷新相關(guān)的服務(wù)。 所有可刷新的電控單元應(yīng)支持安全訪問(wèn) ($27)服務(wù)。
步驟 d(備選步驟):
?????? 為了允許應(yīng)用軟件/應(yīng)用數(shù)據(jù)下載,電控單元應(yīng)擦除存儲(chǔ)器相應(yīng)的區(qū)域。該功能使用程序控制($31)服務(wù)執(zhí)行存儲(chǔ)器擦除程序。
注:該步驟可選且不推薦使用。電控單元應(yīng)在接收到一個(gè)有效的請(qǐng)求下載($34)服務(wù)請(qǐng)求報(bào)文時(shí)執(zhí)行存儲(chǔ)器擦除操作。
步驟 e(標(biāo)準(zhǔn)步驟):
???? 每次將連續(xù)的數(shù)據(jù)塊下載到非易失性存儲(chǔ)器時(shí)應(yīng)遵循下面的服務(wù)序列:
a) 請(qǐng)求下載($34) ;
b) 傳輸數(shù)據(jù)($36) ;
c) 請(qǐng)求退出傳輸($37)。
????? 在請(qǐng)求下載、傳輸數(shù)據(jù)和請(qǐng)求退出傳輸序列正確執(zhí)行時(shí),電控單元僅支持測(cè)試工具保持連接服務(wù),忽略其它服務(wù)。如果塊長(zhǎng)度超出了網(wǎng)絡(luò)層緩存大小,單個(gè)數(shù)據(jù)塊須使用多個(gè)傳輸數(shù)據(jù)($36)請(qǐng)求報(bào)文才能傳輸完全。
????? 電控單元接收到請(qǐng)求退出傳輸服務(wù)的請(qǐng)求報(bào)文時(shí),應(yīng)計(jì)算下載到非易失性存儲(chǔ)器的數(shù)據(jù)塊的CRC16 校驗(yàn)值,并在肯定應(yīng)答報(bào)文中將該值發(fā)送給測(cè)試工具。測(cè)試工具將電控單元計(jì)算的校驗(yàn)值與工具端的校驗(yàn)值相比較。若二者相等,則證明數(shù)據(jù)塊下載成功。電控單元與測(cè)試工具均采用表 23 中規(guī)定的多項(xiàng)式 CRC16(CITT)算法。刷新文件中的數(shù)據(jù)塊應(yīng)能按地址遞升序列向電控單元傳輸。
?步驟 f(標(biāo)準(zhǔn)步驟):
?????? 當(dāng)所有數(shù)據(jù)塊下載完成后,測(cè)試工具應(yīng)通過(guò)程序控制($31)服務(wù)啟動(dòng)完整性檢查程序驗(yàn)證下載是否成功,并更新軟件完整性狀態(tài)參數(shù)。
步驟 g(標(biāo)準(zhǔn)步驟):
?????? 若軟件完整性檢查的結(jié)果為真,則電控單元應(yīng)執(zhí)行刷新相關(guān)性檢查,并根據(jù)檢查結(jié)果更新軟件兼容性狀態(tài)參數(shù)。
步驟 h(標(biāo)準(zhǔn)步驟):
?????? 在應(yīng)用軟件/應(yīng)用數(shù)據(jù)下載之后, 測(cè)試工具應(yīng)更新物流數(shù)據(jù),如刷新信息域、電控單元零件號(hào)等。
步驟 i(標(biāo)準(zhǔn)步驟):
?????? 電控單元須復(fù)位使下載的應(yīng)用軟件/應(yīng)用數(shù)據(jù)生效。電控單元當(dāng)退出刷新會(huì)話(huà)時(shí)應(yīng)更新軟件有效標(biāo)志位。
刷新程序標(biāo)識(shí)符規(guī)定
?
0xDFFF:檢查刷新完整性
????? 該數(shù)值用于檢查電控單元存儲(chǔ)器刷新的完整性,包括應(yīng)用軟件、網(wǎng)絡(luò)配置數(shù)據(jù)和標(biāo)定數(shù)據(jù)等。
0xFF00:擦除存儲(chǔ)器
??? 該數(shù)值用于啟動(dòng)電控單元存儲(chǔ)器擦除程序
0xFF01:檢查刷新相關(guān)性
???? 該數(shù)值用于檢查電控單元存儲(chǔ)器刷新的相關(guān)性
引導(dǎo)加載程序特定數(shù)據(jù)標(biāo)識(shí)符
?
AFFC:刷新計(jì)數(shù)
AFFD:軟件完整性狀態(tài)
AFFE:軟件兼容性狀態(tài)
AFFF:軟件有效性標(biāo)志位
四、刷新示例
示例假電控單元物理請(qǐng)求CAN ID 為 0x7E0;電控單元物理應(yīng)答 CAN ID 為0x7E8;功能請(qǐng)求 CAN ID 為 0x7DF
使用子功能為 0x02 的服務(wù)$10 讓車(chē)輛 CAN總線上的所有電控單元進(jìn)入刷新會(huì)話(huà)。 不可刷新的電控單元應(yīng)進(jìn)入安靜模式,避免干擾刷新事件
使用服務(wù)$22 從電控單元獲取車(chē)輛識(shí)別代碼、車(chē)輛特征信息和電控單元硬件號(hào)
使用下載數(shù)據(jù)前使用服務(wù)$27 解鎖電控單元。沒(méi)有合法的訪問(wèn)授權(quán),測(cè)試工具和電控單元均不能繼續(xù)刷新流程
測(cè)試工具請(qǐng)求開(kāi)始下載數(shù)據(jù)并將該數(shù)據(jù)塊的起始地址和尺寸通知電控單元。多個(gè)數(shù)據(jù)庫(kù)需重復(fù)請(qǐng)求下載、傳輸數(shù)據(jù)和請(qǐng)求退出傳輸?shù)姆?wù)序列
使用服務(wù)$36 向電控單元下載所有數(shù)據(jù)。在服務(wù)$34 所描述的數(shù)據(jù)塊下載完成前,測(cè)試工具一直重復(fù)該服務(wù)。
在一個(gè)完整的數(shù)據(jù)塊下載后, 測(cè)試工具使用服務(wù)$37 退出數(shù)據(jù)傳輸。如果還有其它數(shù)據(jù)需要下 載 , 測(cè) 試 工 具 應(yīng) 重 復(fù) 該 服 務(wù) 序 列($34,$36,$37)下載下一數(shù)據(jù)塊
激活 0xDFFF 程序以檢查刷新完整性
激活 0xFF01 程序以檢查刷新相關(guān)性
電控單元刷新成功后,更新電控單元零件號(hào)、刷新信息域和網(wǎng)絡(luò)信息域-當(dāng)前數(shù)據(jù)
復(fù)位電控單元使新下載的應(yīng)用軟件或標(biāo)定數(shù)據(jù)生效
總結(jié)
以上是生活随笔為你收集整理的基于UDS协议的Bootloader的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ANSYS 简支梁的约束
- 下一篇: ANSYS——固定斜度的变截面变截面的定