汽车Bootloader流程
根據(jù)ISO14229-1 寫的汽車行業(yè) Bootloader流程
- 1 編程前
→ 先讀取軟硬件版本號
22 F1 XX? 軟件信息
22 F1 XX? 硬件信息
→ 進入擴展會話extend diagnostic sessions 功能尋址
10 03
→ 編程條件檢測routine control?:ECU升級條件的判斷,如車速,檢測車的型號
31 01 02 03
→ 關閉DTC檢測,(由于很多節(jié)點收不到其它節(jié)點的報文后會記錄DTC故障)功能尋址
85 02
→ 關閉診斷通訊(禁止各個節(jié)點的應用報文發(fā)送,網(wǎng)絡管理報文發(fā)送)功能尋址
28 03 01
- 2:編程中
→ 進入編程會話
10 02 單片機重啟(進入Boot),重啟后相應 50 20
→ 解鎖 安全訪問
27 11 等級11 (seed)
27 12 發(fā)送KEY
→ 寫入指紋信息
2E F1 84 XX XX XX(寫入的參數(shù) 年月日)
? 下載內(nèi)存驅(qū)動 Flashdrive
1,請求下載 34 大小 內(nèi)存地址
2,發(fā)送數(shù)據(jù) 36
3,請求退出 37
4,CRC校驗 31 01 CRC
→ 擦除單片機內(nèi)存 31 01 FF 00
→ 請求下載 34? 大小 內(nèi)存地址
→ 發(fā)送數(shù)據(jù) 36
→ 請求退出 37
→ 一致性校驗 31 01 FF 01
在“編程”階段,首先進入編程會話模式,然后進行安全訪問,下載應用程序?qū)闹噶顢?shù)據(jù)。
通過執(zhí)行被復制到指定RAM空間中的Flash驅(qū)動程序,擦除并燒寫應用程序Flash數(shù)據(jù)。
應用程序數(shù)據(jù)下載并燒寫完成后,對數(shù)據(jù)進行校驗,校驗通過后,在數(shù)據(jù)Flash中存儲“應用程
序有效標志”
- 3 編程后
→11 01 硬件復位
→28 00 01 使能通訊? ?功能尋址
→85 01 使能DTC? 功能尋址
在“編程后”階段,首先進入擴展會話模式,然后通過功能尋址的UDS服務恢復各個節(jié)點的
應用報文發(fā)送、網(wǎng)絡管理報文發(fā)送,然后恢復各個節(jié)點的DTC檢測
?
- Boot 前的準備? ----? MCU中具體的處理
接收到10 02 進入編程會話
MCU 關閉外狗(防止單片機重啟),在RAM的固定地址寫 bootflag=1;
MCU 關閉所有中斷,
MCU 重啟(可以門狗復位,但看門狗復位 RAM是沒有擦除的)
-----------------------------------------------------------------------------------------
MCU 重啟后 ----- main函數(shù),3種情況
1> 進入Bootloader程序
if bootflag == 1 外部請求進入Boot段,響應 10 02 的報文
g_u8StayInBootFlag = (*(__far uint8_t*)(0xffe19)); // 讀取RAM中的值 if(g_u8StayInBootFlag == PROGRAM_REQUESTED_FLAG) {DiagnosticInit();Diagnostic_1002_Response();BootLoaderLoop(); }? ? ?Boot完成后, 在Flash中寫 AA 55 AA 55 說明擦寫成功 寫bootflag =0;?
2> Bootloader 擦寫不成功
若 讀取固定地址 ROM數(shù)據(jù),若沒有 AA 55 AA 55 ,證明APP段刷寫不成功,需要重新刷寫
EEProm_Read(APP_VALID_ADDRESS, FLAG_SIZE, AppValid); if(AppValid != APP_VALID) {DiagnosticInit();BootLoaderLoop(); }3> Bootloader 成功
?if bootflag == 0 ,直接跳到APP段,執(zhí)行程序
JumpAppFunc = *((void(*)(void))(0X04000));//程序跳到4000的位置?
?
?
總結(jié)
以上是生活随笔為你收集整理的汽车Bootloader流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电视剧《乡村爱情2》之演员表(ZT)
- 下一篇: 手把手教你使用Admob广告中介