天天看點

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

51單片機IAP線上更新

愛矽半導體E85F3325單片機IAP線上更新教程,此處可檢視更新及demo下載下傳

文章目錄

  • 前言
  • 一、ROM資源
  • 二、KEIL有關知識
    • 1.BL51連接配接器:
    • 2.LX51連接配接器:
  • 三、Keil其他相關項說明:
  • 四、MCU啟動檔案說明:
  • 五、例程BOOTLOADER使用說明
  • 六、例程使用可更改說明:
  • 七、程式使用通信方式:XMODEM
  • 八、APP程式說明
  • 九、APP代碼更新說明
  • 十、代碼合并燒寫

前言

擴充-IAP 主要用于産品出廠後應用程式的更新作用 ,類似于其他引導裝載更新程式的方法,在系統中必須始終

存在一段用于程式裝載的代碼(bootloader),該代碼在啟動時被運作。其基本功能是根據外部條件來判斷是運

行現有版本的程式還是從主機下載下傳新程式。可用于使用序列槽下載下傳器替換專用下載下傳器進行下載下傳,硬體裝置的軟體

的遠端更新等功能。

一、ROM資源

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

如圖0x0000到0x3fff為程式空間,可将程式空間進行配置設定,此處分為兩個空間分别存儲兩個程式,共兩個工程,一段為BootLoader(引導加載程式),一段為application(使用者程式),MCU啟動先執行BootLoader程式,檢測有無更新标志位,再跳轉入application程式執行,是以将BootLoader程式放在MAIN FLASH 空間最前面,晶片上電既運作BootLoader程式,再由BootLoader程式跳轉到app程式執行。例程程式為BootLoader,空間配置設定為0x0000-0x0A00,共2.5k程式空間作為BootLoader程式存放空間 。0x0A00-0x3FFF空間可用作app空間。

二、KEIL有關知識

本例程使用keil作為編譯工具,keil已經為我們做好了程式空間配置設定的相關功能,并能使用相應的連接配接器連接配接程式代碼,不同的連接配接方式儲存空間的配置設定方式不同,下面介紹keil的兩種連結器。

Keil連接配接器介紹:keil有兩種連接配接器,一種為BL51是keil預設連接配接器,一種為LX51是BL51擴充連接配接器,兩種連接配接器均可設定keil代碼存放空間。以下圖檔均可作為例程APP代碼配置。

1.BL51連接配接器:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

在device頁籤中去掉LX51的√即選用BL51連接配接器,即可選用KEIL預設連結器BL。

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

在BL51locate頁籤中,Use memory layout from target dialog選項為使用預設代碼存放位,代碼存放位址為0x0000起始開始,去掉勾後可改變代碼存放位址,code range為代碼存放位址,即ROM空間,xdata為RAM空間配置設定,可預設,跳轉後可重新配置設定,如:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

2.LX51連接配接器:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

在device頁籤中勾上LX51的√即選用LX51連接配接器

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

Use memory layout from target dialog選項為使用預設代碼存放位,代碼存放位址為0x0000起始開始,去掉勾後可改變代碼存放位址,user classes配置設定代碼空間,如:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

配置設定代碼空間為0x0A00-0x3FFF,具體可自己按格式定義。

三、Keil其他相關項說明:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

Memory model:預設變量配置設定,small預設配置設定變量為idata,large預設配置設定變量為xdata。 Code rom size:small程式代碼最大2k,Large程式代碼最大64k。

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

Level:程式優化等級,考慮到程式優化時的配置設定,建議app程式優化等級不可超過8。

Interrupt vector at address:中斷偏移位址。

四、MCU啟動檔案說明:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

CSEG AT 0A00h

啟動位址為0x0A00。

MCU程式跳轉語句:

((void (code *) (void)) 0x0A00) ();定義函數指針指向0x0A00位址。

五、例程BOOTLOADER使用說明

程式占用空間:例程程式大小大約占0x0000-0x0900,因為flash分頁設定及BootLoader餘量考慮,BootLoader程式占用空間為0x0000-0x0A00。

程式運作順序:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

程式以P05腳為檢測标志位,可自行更改,P05設定為上拉輸入,拉低為需要更新程式,更新程式時先擦除flash,再寫入,可寫入的flash空間為0x0A00-0x3FFF。不可超出此空間。寫入完成後會跳轉到app程式執行。

六、例程使用可更改說明:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

更改啟動檔案裡中斷偏移量,與app起始位址相同。

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

更改燒寫位址,與app起始位址相同

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

定義觸發更新IO口。其中序列槽定義為P03 (RX),P04(TX)腳。

完成程式更改。

七、程式使用通信方式:XMODEM

XModem是一種在序列槽通信中廣泛使用的異步檔案傳輸協定,分為XModem和1k-XModem協定兩種,前者使用128位元組的資料塊,後者使用1024位元組即1k位元組的資料塊。本例程限于RAM大小使用XModem協定。

1. XModem資訊包格式

XModem協定最早由Ward Christensen在20世紀70年代提出并實作的,傳輸資料機關為資訊包,資訊包格式如下:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

2. 校驗和的計算

所有的資料位元組都将參與和運算,由于校驗和隻占一個位元組,如果累加的和超過255将從零開始繼續累加。

3. 字段定義

01H

04H

06H

15H

18H

4. 校驗和方式的XModem傳輸流程

傳輸流程如圖所示:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

對于發送方僅僅支援校驗和的傳輸方式,接收方應首先發送NAK信号來發起傳輸,如果發送方沒有資料發送過來,需要逾時等待3秒之後再發起NAK信号來進行資料傳輸。對于資料傳輸正确,接收方需要發送ACK信号來進行确認,如果資料傳輸有誤,則發送NAK信号,發送方在接收到NAK信号之後需要重新發起該次資料傳輸,如果資料已近傳輸完成,發送方需要發送EOT信号,來結束資料傳輸。

5. 如何取消資料傳輸

當接收方發送CAN表示無條件結束本次傳輸過程,發送方收到CAN後,無需發送EOT來确認,直接停止資料的發送。

八、APP程式說明

App程式主要注意以下幾點

1. 定義代碼存放位置,詳見上面連接配接器有關知識。

2. 中斷偏移,詳見keil其他相關項說明

3. 代碼啟動位置,詳見啟動項說明。

4. 代碼空間,注意不能超出剩餘代碼空間,否則程式燒寫不完整。

九、APP代碼更新說明

一般代碼更新有兩種方式,PC端軟體更新或通過另一子產品更新。更新前要下載下傳BootLoader程式到晶片并置位相應的腳觸發更新信号。

PC端更新

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

使用支援xmodem協定的序列槽助手。

十、代碼合并燒寫

考慮到出廠時要先燒寫IAP 再燒寫APP應用程式要燒寫2次增加勞工勞動力的基礎上寫了“ IAP+APP ==>雙劍合一,減少燒寫次數,增加燒寫效率。 代碼合并軟體,此處使用Notepad++。

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

直接打開兩個工程生成的HEX檔案

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

滑到檔案最下方可以看到:00000001FF 這句話,這句話為檔案結束語句,删除,然後Copy另一檔案全部資料,加入到檔案後方,如圖:

51單片機IAP線上更新前言一、ROM資源二、KEIL有關知識三、Keil其他相關項說明:四、MCU啟動檔案說明:五、例程BOOTLOADER使用說明六、例程使用可更改說明:七、程式使用通信方式:XMODEM八、APP程式說明九、APP代碼更新說明十、代碼合并燒寫

即完成兩個hex的合并,可以使用量産程式設計器下載下傳驗證。

程式等在我的資源裡可下載下傳,已打包好。程式下載下傳

繼續閱讀