新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 設(shè)計(jì)的ISP程序基礎(chǔ)解析

設(shè)計(jì)的ISP程序基礎(chǔ)解析

作者: 時(shí)間:2012-06-08 來(lái)源:網(wǎng)絡(luò) 收藏

許多應(yīng)用系統(tǒng)中都需要進(jìn)行代碼升級(jí),如果代碼在外部Flash存儲(chǔ)器中,實(shí)現(xiàn)代碼升級(jí)可以對(duì)外部Flash直接操作。但對(duì)于在單片機(jī)內(nèi)部的一些系統(tǒng)程序代碼,就要求此單片機(jī)支持IAP(In-Application-Programming)功能。本文即介紹此情況下的(In-System-Programming)程序方法,以及在SST和STC單片機(jī)上的具體實(shí)現(xiàn)。

本文引用地址:http://m.butianyuan.cn/article/171331.htm

1 實(shí)現(xiàn)基本結(jié)構(gòu)

的實(shí)現(xiàn)方式有很多種,但大致都遵循圖1所示流程。


圖1

其中,判斷用戶(hù)ISP選擇,一般有以下幾種方式。

(1) 連接計(jì)算機(jī)系統(tǒng),由系統(tǒng)的命令選擇

進(jìn)入用戶(hù)ISP選擇判斷時(shí),先由單片機(jī)發(fā)送特定特征數(shù)據(jù),然后等待命令數(shù)據(jù),如果在一定的時(shí)間內(nèi),接收到計(jì)算機(jī)系統(tǒng)發(fā)出的選擇命令則進(jìn)入用戶(hù)代碼升級(jí),否則直接跳轉(zhuǎn)到用戶(hù)代碼執(zhí)行。

(2) 由用戶(hù)板上的跳線(xiàn)選擇

一般利用單片機(jī)空余的端口,一個(gè)代碼升級(jí)選擇跳線(xiàn)。進(jìn)入用戶(hù)ISP選擇判斷時(shí),單片機(jī)可以直接根據(jù)此端口的狀態(tài)判斷進(jìn)入用戶(hù)代碼升級(jí)還是直接跳轉(zhuǎn)到用戶(hù)代碼執(zhí)行。

(3) 由用戶(hù)板操作功能選擇

在用戶(hù)板的功能菜單或功能組合中,允許用戶(hù)選擇代碼升級(jí)功能,同時(shí),在外部存儲(chǔ)器中存放相應(yīng)的標(biāo)志。當(dāng)選擇代碼升級(jí)功能時(shí),在外部存儲(chǔ)器中寫(xiě)入特定數(shù)據(jù),然后程序復(fù)位。進(jìn)入用戶(hù)ISP選擇判斷時(shí),判斷外部存儲(chǔ)器中的數(shù)據(jù),如果符合條件則進(jìn)入用戶(hù)代碼升級(jí),否則直接跳轉(zhuǎn)到用戶(hù)代碼執(zhí)行。

2 IAP程序

目前,許多單片機(jī)都支持IAP功能,一般這些單片機(jī)內(nèi)部都包含兩個(gè)Flash塊,在一塊Flash中運(yùn)行的程序可對(duì)另一塊Flash進(jìn)行擦除和重新編程。一般都將ISP程序存放在容量較小的一塊Flash中(Block1),而將用戶(hù)代碼存放在容量較大的一塊Flash中(Block0)。Block1中的ISP程序?qū)lock0中的用戶(hù)代碼進(jìn)行擦除和重新編程。

下面以?xún)煞N51系列兼容的Flash單片機(jī)為例,介紹IAP的程序設(shè)計(jì)。一種是SST89C54,另一種是STC89C516RD。

(1) SST89C54相關(guān)特性

SST89C54內(nèi)部有20KB(16KB+4KB)程序存儲(chǔ)器,統(tǒng)一編址。Block0為0000H~3FFFH;Block1為F000H~FFFFH。Block1可以選擇映射到0000H地址開(kāi)始的1KB/2KB/4KB程序區(qū)。

(2) STC89C516RD相關(guān)特性

SST89C516RD內(nèi)部有72KB(64KB+8KB)程序存儲(chǔ)器。Block0為0000H~FFFFH,Block1可以選擇映射到0000H地址開(kāi)始的8KB程序區(qū)(上電復(fù)位缺省為地址映射)。

SST與STC單片機(jī)的IAP操作幾乎完全相同。要特別注意的是,Block0_erase函數(shù)中對(duì)于block0的選擇,兩種單片機(jī)是不同的(正好相反)。


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉