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