s32k144 bootloader


                s32k144 bootloader升級

mcu       : s32k144

can_tool : kvaser 

  摘要:實現can升級app程序,現在網上大多是CAN_FD升級bootloader 的程序,CAN_FD在消費型轎車可能已經使用,而隊友許多大型汽車,目前用的還是can通訊,所以實現can升級制定mcu的app程序就顯得尤為重要。本次發送的是摩托羅拉公司定義的s19文件(srec),上位機解析文件,發送。CAN_FD一幀數據能發64個字節,而CAN一幀數據只能發送8個字節(不包括ID等其他信息),而s19文件除了第一行可能超過64個字節外,其他行一般小於64個字節,所以CAN_FD的方式會很簡單,而can的方式會很麻煩。本文分為三個部分:boot loader、app、上位機軟件。

1.bootloader:    

(1)bootloader主要實現功能:

        

(2)分析一下跳轉部分:

   ① s32k的棧頂地址為0x00000000,而stm32的棧頂地址一般為0x08000000。復位向量表起始地址 = 棧頂地址+4 ;我們平時復位地址就是這個地址。各部分程序映射地址如下圖

 

 

圖中使用的APP地址偏移量是0x00004000(8k)的大小,通過查看要燒錄的文件發現2k字節的大小是完全足夠的,我們此次就是用的地址為0x00002000

②單片機的函數名就是地址,運行函數其實就是將PC指針跳到函數的入口去執行程序

1 typedef void (*bootloader_fun)(void);          /*定義函數指針類型*/
2 bootloader_fun jump2app;                       /*定義函數指針*/
3 ..........      
4 /* 函數指針指向app的復位向量表的地址。注意將地址強轉成函數入口地址 */
5  jump2app = (bootloader_fun)*(uint32_t*)(APP_ADDR + 4);      
6 /* 設置棧頂指針*/
7 MSR_MSP(APP_ADDR);   
8   /*將pc指針指向入函數地址(app地址)運行*/
9   jump2app();                                                          

PS.在跳轉之前還得can_deinit()和關閉全部的中斷 __asm volatile ("cpsid i" : : : "memory");

(3)其他注意要點

  ① bootloader中提供的外部接口:

    Ⅰ.緩存buff的size

    Ⅱ.bootloader的等待值

              Ⅲ.app的棧頂地址

    Ⅳ.和上位機通信的can幀ID

    Ⅴ.要擦除app扇區的數量

  ②bootloader 注意:

    Ⅰ.沒有使用獨立看門狗,s32k144的獨立看門狗從上電復位到掉電只能被初始化一次,所以app使用,bootloader沒有使用。以后版本會使用到

    Ⅱ.進行flash操作的時候,不可能處理完一行的srec的值就寫入flash中,可以用一個buff緩存,這個buff的大小直接決定了更新速度。下面兩點要注意:

      □ 為提高flash寫入速度,app扇區在第一次寫flash時就擦出全部app扇區,這個地方要注意擦除的地址要小於自己配的eeprom的地址,不然會將以前的數據擦除。

                 □ 在進行flash操作的時候不能被中斷打斷,所以返回上位機一條忙碌的信息,使其阻塞。

      □ 緩存buff必須動態分配,跳轉前必須釋放

 

2.app

 (1).修改app的鏈接文件

  keil的話直接在output選項卡中修改棧頂地址就行,而我此次用的是S32DS,需要修改工程的鏈接文件如下圖  

 

 

 

 

 

 

(2).在主函數中設置中斷向量表的偏移地址,並打開全局中斷

 /* 此處偏移地址必須和bootloader中的一樣 */
S32_SCB->VTOR = 0x00002000 ;
/* 關閉全局中斷*/
__asm volatile ("cpsie i" : : : "memory");

(3).添加CAN特殊ID

當接收到的幀ID是某一特定ID時,判斷接收到的值 unsigned char resetmcu[] ={0x52,0x45,0x53,0x45,0x54,0x4d,0x43,0x55};這些值對應RESETMCU的asicii碼對應的十六進制值

當正確時復位看門狗,mcu重新從0x00000000開始運行,完成更新軟件復位,從而更新程序

(4).app至少需要的接口 :引起看門狗復位的CAN_ID

3.kavser 上位機軟件

  (1)主要功能如下圖:

 

 (2)提供外部接口: 與MCU通訊的幀ID 

   PS :控制好一鍵復位和發送第一幀數據的時間間隔,太快就會丟失這一幀,太慢,bootloader已經跳到app中去了

 

 4.量產燒錄

出廠第一次燒錄的時候必須將bootloader 的srec文件和app的srec文件合成一個srec文件,並用J-FLASH燒錄到MCU,J-FLASH可以合並文件和分段燒錄是一個比較非常好用的工具,非常方便

 

體會:本次發現C#是很好用的,以后可能用到着,一切皆工具

 

 

 

                   

 

 

                             


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM