歡迎您光臨本站 登入註冊首頁

概述

不用編程器的C8051F單片機在線更新程序的方法C8O5lF系列單片機具有與MCS-51指令集完全兼容的高速CIP-51內核,峰值速率可達100MIPS,該晶元內集成了構成一個單片機數據採集或控制系統……

不用編程器的C8051F單片機在線更新程序的方法
C8O5lF 系列單片機具有與 MCS-51 指令集完全兼容的高速 CIP-51 內核,峰值速率可達100MIPS,該晶元內集成了構成一個單片機數據採集或控制系統所需要的大部分模擬和數字外設及其他功能部件.具有大容最的可在系統( ISP )和在應用(I-AP )編程的Flash存儲器。
C8O51F 系列單片機都有一個片內符合 IEEE 1149.1 規範的JTAG接和邏輯,提供生產和在系統測試所需要的邊界掃描功能,支持快閃記憶體的讀和寫操作,以及非侵人式在系統調試。對於程序更新,最方便的辦法是使用JTAG進行程序下載,但是這需要使用專用的編程器。而本文將介紹不需要專用編程器的程序更新方法.
一、整體思路
本文介紹採用串口在線更新程序的方法,所涉及的程序分為主程序和 bootloader 兩部分。整體思路為:
1 .在 MCU 複位時,由主程序向上層 PC 發送握手信號,並等待回復;
2 .如果上層代收到握手信號則發送握手確認信號;
3 .如果 MCU 在一段時間內(一般為200ms)沒有收到握手確認信號,則返回到主程序;
4 .如果 MCU 收到握手確認信號,則發送確認信號,告訴 PC 可以進行程序更新,同時, MCU 進人 Boot 腸 ader 程序,準備接收更新數據;
5 . PC 發送準備更新信號;
6 . MCU 清除Flash,發送確認信號,準備接收數據;
7 . PC 發送一幀數據,然後等待確認;
8 . MCU 將收到的數據寫人Flash ,然後發送確認幀;
9 . PC 在收到確認幀后回到第 7 步發送下一幀數據,直到數據全部發送完畢;
10 . MCU 收完全部數據、寫入Flash併發送確認幀后,將寫人Flash的全部數據分幀一次性發送給PC;
11 . PC 對收到的數據進行校驗;
12 .如果校驗失敗,則回到第 5 步,重新進行程序更新;
二、程序定位與絕對地址調用
在 Bootloader 程序中,需要刪除主程序部分的Flash,而BootLader 程序則必須在整個程序運行過程中都存在.因此,必須將兩部分程序進行分別定位。由於主程序中要用到中斷,而中斷向量表必須放在程序空間的低地址,所以,一般將主程序放在由 0 地址起始的位置工預設情況也是如此),將 BootLoader 程序放在高地址。筆者的程序中,主程序約為 20kB 位元組,在給其一定余量后,決定將 Bootloader 程序放在 40kB 起始的位置,即0xA000 開始的地方。程序的分塊有兩種方法:
1 .使用連接程序( link )命令,將BootLoader“程序中的所有毛數進行絕對定位.
這種辦法存在很大弊端。 Keil C5l 在對程序進行優化的過程中,會對程序中的公用模塊進行調用,比如 BootLoader程序中只是簡單的一個對數組變蛋的賦值,就有可能調用主程序中相類似的模塊,如果這時主程序已經被刪除,則會使程序跑飛。如果採用降低優化等級的辦法禁止公用模塊,則會使程序體積大大增加,因此,此方法不可取。
13 .如果校驗正確則更新完成。
2 .建立兩個項目,分別是主程序和 BootLoader 程序,分別進行編譯。
對BootLoader程序中的函數進行絕對
定位,使其定位於0xA000之後,可以徹底解決上面的問題。這樣,在生成Hex文件后需要將兩個Hex文件進行合併(具體方法見后),雖然會增加一些麻煩,卻可以解決很多問題。
在採用 LX51 進行鏈接的情況下,打開項目設定對話框,在 LX51頁的User Segments框中,對需要絕對定位的程序進行設定。
Keil C5l 中對於不同的程序類型有著不同名稱前綴,比如,對於用戶函數採用
"PR"前綴,而對於庫函數採用"C"前綴,對於用戶使用 code 定義的常最則使用"CO", 前綴。對於函數.一般格式為 PR FUN FILE ,其中 FUN 為用戶函數名大寫,FILE


[admin via 研發互助社區 ] 不用編程器的C8051F單片機在線更新程序的方法已經有4410次圍觀

http://cocdig.com/docs/show-post-39632.html