設(shè)計(jì)的ISP程序基礎(chǔ)解析
許多應(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)功能。本文即介紹此情況下的ISP(In-System-Programming)程序設(shè)計(jì)方法,以及在SST和STC單片機(jī)上的具體實(shí)現(xiàn)。
本文引用地址:http://m.butianyuan.cn/article/171331.htm1 ISP實(shí)現(xiàn)基本結(jié)構(gòu)
ISP的實(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ī)空余的端口,設(shè)計(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程序設(shè)計(jì)
目前,許多單片機(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ī)是不同的(正好相反)。
評(píng)論