MSP430FR5969 遠程升級

MSP430 遠程升級功能:

基於

1、片外EEPROM(片內flash夠大也可使用片內)

2、射頻通信

3、上位機軟件(傳輸升級文件)


總結點:

1、程序運行總是從復位中斷向量開始尋址入口執行,中斷向量就是保存每個中斷觸發滿足後的中斷函數的入口地址的存儲單元。
根據數據手冊上訴說The interrupt vectors are located in the address range 0FFFFh to 0FF80h, for a maximum of 64 interrupt
sources
 ,默認中斷向量位置爲0XFF80~0XFFFF,長度爲0x80.

MSP430FR5969的頭文件中定義復位向量爲 #define RESET_VECTOR        (55 * 2u) /* 0xFFFE Reset [Highest Priority] */

默認值0XFFFE~0XFFFF這兩個字節是復位中斷向量,存儲是主函數在FLASH的運行起始地址。如主函數保存在

P(CODE)CODE=4400-4A00

則0XFFFE內保存的是0X00,0XFFFF內保存的是0X44;則系統復位後,就到0XFFFE,0XFFFF中去尋找主函數的入口地址。

其他中斷函數的運行地址也保存在相應的向量中,當觸發中斷的條件滿足後,程序根據中斷向量內所指的地址去尋址中斷函數的入口地址。

工程建立產生一個link文件(.xcl文件),文件中定義了內存劃分,CODE代碼段存儲位置,中斷向量表默認值從0XFF80~0XFFFF表述爲

-Z(CONST)SIGNATURE=FF80-FF8F
-Z(CONST)JTAGSIGNATURE=FF80-FF83
-Z(CONST)BSLSIGNATURE=FF84-FF87
-Z(CONST)IPESIGNATURE=FF88-FF8F
-Z(CODE)INTVEC=FF90-FFFF
-Z(CODE)RESET=FFFE-FFFF

2、要進行遠程文件升級,則需要將代碼劃分爲兩段代碼:BOOT、應用程序APP兩段代碼,若有升級文件,在應用程序中接收文件存儲入片外epprom,再使用BOOT將文件搬移到應用程序區。

3、前面談到程序運行總是從中斷向量表中啓動,那麼內存中有兩段代碼(BOOT、應用程序APP),他們的中斷向量指向的位置就不能一致,即需要修改link文件。

我們使BOOT代碼的啓動位置爲默認值,修改應用程序的啓動區和代碼區存儲位置

BOOT的link文件

-P(CODE)CODE=4400-4A00
-Z(CODE)CODE_PAD
// ---------------------------
// Constant data
//
-Z(CONST)DATA20_C,DATA20_ID,CODE_ID=4400-4A00,
// -------------------------------------
// Signature memory and interrupt vectors
//
-Z(CONST)SIGNATURE=FF80-FF8F
-Z(CONST)JTAGSIGNATURE=FF80-FF83
-Z(CONST)BSLSIGNATURE=FF84-FF87
-Z(CONST)IPESIGNATURE=FF88-FF8F
-Z(CODE)INTVEC=FF90-FFFF
-Z(CODE)RESET=FFFE-FFFF

應用程序的link文件

-P(CODE)CODE=5000-FE7F,10000-13FFF
-Z(CODE)CODE_PAD
// ---------------------------
// Constant data
//
-Z(CONST)DATA20_C,DATA20_ID,CODE_ID=5000-FE7F,10040-13FFF
// -------------------------------------
// Signature memory and interrupt vectors
//
-Z(CONST)SIGNATURE=FE80-FE8F
-Z(CONST)JTAGSIGNATURE=FE80-FE83
-Z(CONST)BSLSIGNATURE=FE84-FE87
-Z(CONST)IPESIGNATURE=FE88-FE8F
-Z(CODE)INTVEC=FE90-FEFF
-Z(CODE)RESET=FEFE-FEFF

表述爲BOOT應用程序代碼存儲位置從0X4400開始,中斷向量默認

應用程序代碼存儲位置從0X5000開始,中斷向量修改爲從0XFE80~0XFEFF


4、BOOT程序設計和應用程序設計

應用程序設計:(上位機軟件->射頻升級文件傳輸->設備接收)設備接收存儲入片外EEPROM,將中斷向量修改爲BOOT的向量表

memcpy((ST_UINT16 *)0xFF80, (ST_UINT16 *)0xFF00, 0x80);/* 中斷向量改成boot的起始地址。FF00爲boot的向量備份 */

重啓代碼,程序從BOOT開始運行;

BOOT程序設計:檢測片外EEPROM是否有升級文件,若有則將數據拷貝到片內存儲(),擦除片外EEPROM

memcpy((ST_UINT16 *)0xFF00, (ST_UINT16 *)0xFF80, 0x80);
/* 還原中斷相量 */
memcpy((ST_UINT16 *)0xFF80, (ST_UINT16 *)0xFE80, 0x80);

將BOOT的中斷向量備份到0XFF00,將應用程序的中斷向量0XFE80拷貝到FF80,重啓程序BOOT程序(0xFF80),程序即從應用程序指定的位置(0xFE80)開始執行應用程序。


5、將boot和應用程序同時燒進單片機

boot程序生成TXT文件,應用程序生成TXT文件,使用工具將兩個文件拼接生成.bin與.txt文件,使用FET-Pro430燒寫進430單片機

首次程序運行爲從默認0XFF80開始運行,開始執行BOOT程序,檢測到EEPROM無升級文件,備份BOOT中斷向量到0XFF00,將中斷向量改爲應用程序中斷向量0XFE80,重啓BOOT程序,則程序指向應用程序中斷向量,開始運行應用程序;

收到升級文件.bin,存儲數據,將BOOT的備份向量0XFF00拷貝到0XFE80,重啓應用程序,則程序指向BOOT中斷向量,開始執行BOOT程序。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章