設計自己的ISP程式

2023-02-10 19:36:07 字數 4097 閱讀 4211

許多應用系統中都需要進行程式**公升級,如果程式**在外部flash儲存其中,實現程式**公升級可以對外部flash直接操作,分塊擦除和程式設計。但對於一些系統程式**在微控制器內部的,就要求此微控制器支援iap(in-application-programming)功能。本文即介紹此情況下的isp(in-system-programming)程式設計方法,以及在sst和stc微控制器上的具體實現。

一. isp實現基本結構

isp實現方式有很多種,但大致都遵循以下流程:

其中,判斷使用者isp選擇,一般有以下幾中方式:

1. 連線計算機系統,由系統的命令選擇

進入使用者isp選擇判斷時,先由微控制器傳送特定特徵資料,然後等待命令資料,如果在一定的時間內,接收到計算機系統發出的選擇命令則進入使用者**公升級,否則直接跳轉使用者**執行。

2. 由使用者板上的跳線選擇

一般利用微控制器空餘的埠,設計乙個**公升級選擇跳線。進入使用者isp選擇判斷時,微控制器可以直接根據此埠的狀態判斷進入使用者**公升級還是直接跳轉使用者**執行。

3. 由使用者板操作功能選擇

在使用者板的功能選單或功能組合中允許使用者選擇**公升級功能,同時,在外部儲存器中存放相應的標誌。當選擇**公升級功能時,在外部儲存器中寫入特定資料,然後程式復位,進入使用者isp選擇判斷時,判斷外部儲存器中的資料,如果符合條件則進入使用者**公升級,否則直接跳轉使用者**執行。

二. iap程式設計

目前許多微控制器都支援iap功能,一般這些微控制器內部都包含兩個flash塊,在一塊flash中執行的程式可對另一塊flash進行擦除和重新程式設計。一般我們都將isp程式存放在容量較小的一塊flash中(block1),而將使用者**存放在容量較大的一塊flash中(block0)。block1中的isp程式對block0中的使用者**進行擦除和重新程式設計。

我們以兩種51系列相容的flash微控制器為例,介紹iap的程式設計。一種是sst89c54,另一種是stc89c516rd。

1. sst89c54相關特性:

sst89c54內部有20k(16k+4k)程式儲存器,統一編址。block0:0000h~3fffh;block1:

f000h~ffffh;block1可以選擇對映到0000h位址開始的1k/2k/4k程式區。

2. stc89c516rd相關特性:

sst89c516rd內部有72k(64k+8k)程式儲存器。block0:0000h~ffffh,block1可以選擇對映到0000h位址開始的8k程式區(上電復位確省為位址對映)。

sst與stc微控制器的iap操作幾乎完全相同,附件中給出了iap函式的c程式源**。要特別注意的是,block0_erase函式中對於block0的選擇,兩種微控制器是不同的(正好相反)。

三. isp程式到使用者**的切換

在設計中一般都將isp程式設計為上電復位後執行的程式,如果不需要使用者**公升級或公升級完成後,就要將程式切換到使用者**執行。isp程式到使用者**的切換,不同的微控制器各不相同。

1. sst89c54程式區block1到block0的切換實現:

sst89c54微控制器在燒錄時,將isp程式寫到block1,並且燒錄對映選擇位rb0/rb1(re-map[1:0])。這樣,程式上電復位時,自動將block1對映到0000h位址開始的4k程式區,進入isp程式執行。

由於block1同時還分配在位址:f000h~ffffh,因此,編譯生成isp程式**時,設定所有的位址範圍都在f000h~ffffh。需要切換到使用者**(block0)執行時,修改sfcf[7]控制位vis,將block1的0000h位址對映取消,然後程式跳轉到位址0000h執行,則開始執行block0中的使用者**程式。

附件中給出了isp的c程式源**。要注意的是:此程式在keil-c中要建立工程檔案,包含函式以及並且在和中都要去掉stc的定義。

為了將位址範圍設定到f000h~ffffh,要將中程式入口位址由0改為0f000h,如下:

cseg at 0f000h

?c_startup: ljmp startup1

還要修改編譯選項設定target選項卡中off-chip code memory:start =0xf000;size=0x1000;還要設定c51選項卡中interrupt vectors at address:0xf000。

2. stc89c516rd程式區block1到block0的切換實現:

stc89c516rd微控制器在燒錄時,將isp程式寫到block1。(注意:並不燒錄sc0/sc1位)。

微控制器上電復位時,由於預設地block1對映到0000h位址開始的8k程式區,進入isp程式執行。需要切換到使用者**(block0)執行時,isp修改sfcf[1]控制位swr,產生乙個軟復位(software reset)。由於sc0和sc1都未燒錄,程式軟復位後,block1將不再對映到0000h位址映,則開始執行block0中的使用者**程式。

附件中給出了isp的c程式源**。要注意的是:此程式在keil-c中要建立工程檔案,包含函式,並且在和中都要保留stc的定義。

四. 與計算機連線的通訊協議

公升級使用者**時,需要與計算機進行通訊,一般採用rs232序列通訊,資料協議採用簡單協議。此協議參考了aduc812微控制器的isp資料協議。(aduc812微控制器硬體內建isp程式)

1. 復位命令(計算機->微控制器)

計算機傳送四位元組復位命令:21h,5ah,00h,a6h,微控制器返回復位資訊。

2. 復位資訊(微控制器->計算機)

復位資訊為25位元組,前三位元組為微控制器公司特徵字元(如:「adi」「sst」「stc」),最後一位元組為效驗和。

3. 資料報格式(計算機->微控制器)

計算機傳送資料報格式:07h,0eh,長度,資料,效驗和(長度與資料的效驗和)。

4. 擦除命令

計算機傳送資料報,其中資料只有一位元組,內容為:字元』a』或』c』。微控制器擦除使用者程式區後返回一位元組06h表示成功;05h表示失敗。

5. 程式設計命令

計算機傳送資料報,其中資料內容:』w』,00h,位址高位元組,位址低位元組,程式資料。微控制器返回一位元組06h表示成功;05h表示失敗。

6. 執行使用者程式

計算機傳送資料報,其中資料只有一位元組,內容為:字元』u』。微控制器返回一位元組06h表示成功,然後跳轉使用者程式執行。

附件提供了計算機**軟體的c程式源**。

五. 結束語

根據以上isp程式設計思路和例項,大家可以修改isp初始**,或者豐富其他的isp功能(如:讀功能,口令控制等),嘗試設計自己的isp程式,定可以為自己的系統增色不少。

魏東 2004-7-25

附件一:

sst和stc微控制器iap操作函式

魏東(2004.7.23

#define stc定義為stc微控制器(如果是sst微控制器則去掉此行)*/

* sfr memory addresses

sfr sfcf = 0xb1; /*superflash configuration*/

sfr sfcm = 0xb2; /*superflash command*/

sfr sfal = 0xb3; /*superflash address low*/

sfr sfah = 0xb4; /*superflash address high*/

sfr sfdt = 0xb5; /*superflash data*/

sfr sfst = 0xb6; /*superflash status*/

* mcu iap commands

#define sfcm_be 0x0d; /*block-erase iap cmd*/

#define sfcm_se 0x0b; /*sector-erase iap cmd*/

#define sfcm_vb 0x0c; /*byte-verify iap cmd*/

#define sfcm_pb 0x0e; /*byte-program iap cmd*/

bit iap_error=0;

void block0_erase(void);

void sector_erase(unsigned int);

void byte_program(unsigned int, unsigned char);

unsigned char byte_verify(unsigned int);

unsigned char ready(void);

ISP方案設計

現況評估,明確問題確定目標,制定指標 採取策略 責任人,完成時間 張明有因藥物依從性差導1 增加對精神健康的認識,預防 1 有關藥物 對保持心理健康重要張明 個案管理員致精神 症 的病史2 認識到疾病 的方式和早期症狀性的健康教育,提供健康教育資料 3 定時定量服藥,定時複診2 確認 的跡象和症狀持...

主題班會設計自己的事自己做

5 訪問家長。由小組長帶領到各家長面前訪問 另設訪問提綱 6 主持人請各組匯報訪問情況。主持 原來,有的同學在家裡能主動做力所能及的事,為父母分擔,主動搞好學習,免父母操心 但也有的同學每天都要父母的監督 提示來生活。不過沒關係,只要我們能改正,也能行,就好像接下來的下品 好孩子 中的小明那樣,通過...

主題班會設計 自己的事自己做

一 活動目標 1 在學校能做團結友愛,善於合作的小夥伴 在家能成為孝敬父母,自己的事自己做的好孩子。2堅持每天在家自己的事自己做,不會做的學著做。如 自己洗衣服 打掃房間 做飯 買菜 3堅持養成孝敬父母的好習慣,如 每天給父母沏杯茶 好吃的東西請長輩先嚐 自主 主動學習,不讓父母操心 耐心傾聽父母的...