宋慶華,宋慶國
(1.中國電子科技集團(tuán)公司第13研究所,石家莊 050051;2.石家莊聆風(fēng)暢想信息技術(shù)有限公司,石家莊 050000)
?
SPMC65P的算法設(shè)計(jì)與實(shí)現(xiàn)
宋慶華1,宋慶國2
(1.中國電子科技集團(tuán)公司第13研究所,石家莊 050051;2.石家莊聆風(fēng)暢想信息技術(shù)有限公司,石家莊 050000)
一次性編程(OTP)單片機(jī)具有一次性編程、經(jīng)濟(jì)實(shí)用、安全可靠、適合量產(chǎn)用戶等特點(diǎn)。在充分研究了OTP版單片機(jī)芯片的程序存儲(chǔ)器位元的結(jié)構(gòu)特點(diǎn)、工藝特性、燒寫技巧的前提下,針對(duì)6502CPU內(nèi)核兼容型單片機(jī)的特殊性和專用燒寫器操作流程的特殊性,規(guī)劃了一種前所未見的算法設(shè)計(jì)和解決方案,解決了如何重復(fù)燒寫和高效利用的實(shí)際問題。對(duì)于此類單片機(jī)的應(yīng)用項(xiàng)目開發(fā)者特別具有啟發(fā)作用和指導(dǎo)意義,對(duì)于其他流派OTP單片機(jī)的重復(fù)利用也會(huì)有借鑒意義。
單片機(jī);燒寫器;重復(fù)燒寫;算法設(shè)計(jì)
對(duì)于專業(yè)人員把調(diào)試成功的用戶程序燒寫到單片機(jī)內(nèi)部的程序存儲(chǔ)器,是單片機(jī)應(yīng)用開發(fā)過程后期的必不可少的一道工序。對(duì)于初學(xué)者在沒有專業(yè)仿真器的情況下,采用“盲調(diào)法”(或叫燒試法)也可以達(dá)到實(shí)時(shí)檢驗(yàn)用戶程序和用戶電路的基本目的。
針對(duì)窗口式電子可編程只讀存儲(chǔ)器(EPROM)單片機(jī)成本高、離線燒寫、紫外線擦除等缺點(diǎn),美國MicroChip公司率先推出價(jià)格低廉的OTP單片機(jī)PIC12C/16C系列,獲得極大成功,隨后許多世界著名公司也紛紛推出此類產(chǎn)品。比如, ELAN的EM78P系列,Holtek的HT46R/47R/48R/49R系列,Philips的P87C/P87LPC系列,NS的COP8系列,Hyundai的GMS97C/97L/87C系列,ST的ST62T系列,TI的MSP430P系列,Zilog的Z86E系列,SONiX的SN8P系列,MAXIM-DALLAS的DS87C系列,F(xiàn)reeScale的MC68HC705/MC68HC708/MC68HC711系列,MDT的MDT系列等。
其實(shí)OTP型就是不開天窗的EPROM型,它沒有擦除手段,所以只供用戶燒寫一次。本文中講解的樣板機(jī)型SPMC65P系列就屬于此類產(chǎn)品。雖然SPMC65P單片機(jī)的價(jià)格低廉(零售價(jià)不足10元),但是對(duì)于處于學(xué)習(xí)和演練階段的初學(xué)者和開發(fā)者來說,如果燒寫一次試驗(yàn)程序就報(bào)廢一顆,多次積累下來也是一筆不小的代價(jià)。那么,能否通過精心安排和巧妙變通,把OTP版的SPMC65P單片機(jī)進(jìn)行多次重復(fù)利用呢?答案是可行的!
凌陽科技最新推出的SPMC65系列單片機(jī)屬于8 位的通用單片機(jī)系列,是針對(duì)家電產(chǎn)品以及工業(yè)控制領(lǐng)域的高抗干擾性、高性價(jià)比的工業(yè)級(jí)芯片。SPMC65系列單片機(jī)提供了從低檔到高檔一系列產(chǎn)品,以滿足客戶的不同需求,包括不帶模/數(shù)轉(zhuǎn)換器(ADC)的輸入/輸出(I/O) 控制型單片機(jī)、帶ADC的I/O 控制型單片機(jī)等。SPMC65系列采用的8位通用CPU內(nèi)核是凌陽公司在6502的基礎(chǔ)上改進(jìn)后的CPU內(nèi)核(稱為65B02),除了支持6502的全部指令之外,還擴(kuò)充了一些位操作指令。
整個(gè)SPMC65系列的所有單片機(jī)型號(hào),其硬件結(jié)構(gòu)、寄存器的映射關(guān)系等都是相同的,不同的只是硬件模塊的刪減。SPMC65系列單片機(jī)根據(jù)片內(nèi)資源的情況,目前劃分了兩大類芯片[1]:(1)不帶ADC的通用單片機(jī)系列;(2)帶ADC 的通用單片機(jī)系列。本文將以SPMC65P2408A(以下簡稱2408A)單片機(jī)為例,它是目前SPMC65系列上市型號(hào)中資源較全的一種芯片。其突出特點(diǎn)是內(nèi)部資源豐富、性價(jià)比非常高、電磁兼容性好。
目前已經(jīng)發(fā)現(xiàn)中國臺(tái)灣和中國大陸地區(qū)出現(xiàn)了十余家生產(chǎn)以6502為CPU內(nèi)核(或兼容6502CPU)的單片機(jī)的微電子公司,凌陽公司就是其中的典型代表。
在構(gòu)思將一次性燒寫型單片機(jī)變通為多次重復(fù)利用的實(shí)施方法時(shí),需要精心分析和周密考慮以下幾個(gè)方面。
3.1 OTP存儲(chǔ)位元的特性
此類存儲(chǔ)器的每個(gè)存儲(chǔ)位元(Cell),也就是能夠存儲(chǔ)一位二進(jìn)制數(shù)的最小單位,其結(jié)構(gòu)是由一個(gè)浮動(dòng)?xùn)艠O場(chǎng)效應(yīng)晶體管構(gòu)成的。這個(gè)場(chǎng)效應(yīng)管的浮柵是一個(gè)與周圍絕緣的孤島形導(dǎo)體,利用該導(dǎo)體內(nèi)部是否存在積累電荷來記錄一個(gè)比特?cái)?shù)據(jù)。在原始狀態(tài)或空白狀態(tài)下,導(dǎo)體內(nèi)沒有蓄積電荷,場(chǎng)效應(yīng)管處于截止?fàn)顟B(tài),其漏極呈現(xiàn)高電平,以此來表示存儲(chǔ)位元中存儲(chǔ)的是一位“1”。在利用高電壓進(jìn)行燒寫操作時(shí),如果寫入的是“1”,則場(chǎng)效應(yīng)管不發(fā)生任何改變;如果寫入的是“0”,則會(huì)在高電壓激發(fā)下使一些載流子擊穿絕緣層而進(jìn)入場(chǎng)效應(yīng)管的浮柵導(dǎo)體,這樣就在導(dǎo)體內(nèi)部形成一定的蓄積電荷,使得場(chǎng)效應(yīng)管變?yōu)閷?dǎo)通狀態(tài),其漏極呈現(xiàn)低電平,以此來表示存儲(chǔ)位元中存儲(chǔ)的是一位“0”。
每個(gè)存儲(chǔ)位元具有以下的天然特性[2]: (1)在原始狀態(tài)或空白狀態(tài)下,本來的內(nèi)容為1; (2)如果原來內(nèi)容是1,在燒寫0時(shí),內(nèi)容變?yōu)?; (3)如果原來內(nèi)容是1,在燒寫或重復(fù)燒寫1時(shí),內(nèi)容不變,等于沒寫; (4)如果原來內(nèi)容是0,在燒寫或重復(fù)燒寫0時(shí),內(nèi)容不變,等于沒寫; (5)如果原來內(nèi)容是0,在燒寫或重復(fù)燒寫1時(shí),內(nèi)容不變,等于沒寫; (6)一旦寫入0后,其內(nèi)容再也無法恢復(fù)為1(空白值)。
由存儲(chǔ)位元的特性可以總結(jié)出一個(gè)結(jié)論:OTP存儲(chǔ)位元在1的基礎(chǔ)上燒寫0的次數(shù)只提供“1次”機(jī)會(huì),而在1的基礎(chǔ)上燒寫1,或在0的基礎(chǔ)上燒寫0或1的次數(shù)都不受限制。
3.2 單片機(jī)的指令編碼特點(diǎn)
SPMC65P指令系統(tǒng)的所有182條指令[1],其操作碼字段統(tǒng)統(tǒng)都是利用8位二進(jìn)制數(shù)編碼的(并且指令總長度不固定)。8位二進(jìn)制數(shù)碼理論上最多可以表達(dá)28=256種不同的編碼狀態(tài),實(shí)際上182條指令僅利用了其中的一部分。其中有2種特殊的編碼在此需要引起特別的注意,那就是全1的“FFH”和全0的“00H”。前者對(duì)應(yīng)著OTP存儲(chǔ)器單元的空白狀態(tài),后者對(duì)應(yīng)著OTP存儲(chǔ)器單元的所有存儲(chǔ)位全部被改寫。
(1) 機(jī)器碼為“FFFFH”的指令是“SET $FF,7”,既是一條2字節(jié)指令,也是一條位操作指令,也是一條把bit7置1的指令,還是一條攜帶著字節(jié)單元地址編碼的指令。其實(shí)現(xiàn)的具體功能是把0頁RAM的FFH單元的bit7給設(shè)置為1,并且不影響任何標(biāo)志位。如果保留隨機(jī)存取存儲(chǔ)器(RAM)的FFH單元不用,那么,就可以認(rèn)為這條位操作指令不會(huì)產(chǎn)生任何影響或者沒有帶來任何后果,只不過僅耗費(fèi)2個(gè)系統(tǒng)周期的執(zhí)行時(shí)間而已。
需要特別注意:操作碼字段為“FFH”的指令也必然是一條2字節(jié)的“SET aa,7”。當(dāng)CPU遇到FFH時(shí),會(huì)自動(dòng)順延再提取1個(gè)字節(jié),作為SET指令的第2字節(jié)。即把FFH鄰接的高地址單元內(nèi)容“aa”,提取出來作為被SET指令進(jìn)行位操作的目標(biāo)字節(jié)單元(aa為隨機(jī)編碼,這里應(yīng)該是用戶程序中第1條指令編碼的第1個(gè)字節(jié)內(nèi)容)。假若這樣一條指令被執(zhí)行,不僅指令本身帶來破壞,而且更重要的是破壞了用戶程序代碼的本來提取順序,導(dǎo)致用戶程序不能被正常執(zhí)行。因此,必須設(shè)法避免上述情況發(fā)生。
(2) 機(jī)器碼為“00H”的指令是“BRK”,這是一條單字節(jié)的軟件中斷指令。盡管在凌陽公司公布的SPMC65P單片機(jī)產(chǎn)品手冊(cè)中[1]的資料層面上刪除了該指令,但是在語言工具層面上以及硬件芯片層面上,該指令仍然是存在的。該指令一旦被CPU執(zhí)行,將會(huì)進(jìn)入可屏蔽中斷服務(wù)程序。為了回避該指令帶來的負(fù)面影響,應(yīng)該盡量避免執(zhí)行到BRK指令。
在被燒寫的用戶程序中,合理地安排和填充上述2種指令代碼,是重復(fù)利用OTP單片機(jī)的算法基礎(chǔ)。
3.3 2408A片載OTP的分布特點(diǎn)
2408A單片機(jī)的OTP EPROM存儲(chǔ)器,其寬度為8 bit、長度為8212=4 + 4 + 12 + 8 186 + 6個(gè)字節(jié)單元。如果按功能劃分,可以分解為5個(gè)功能區(qū)段[2]。從低地址到高地址依次分別是:(1)4字節(jié)存放系統(tǒng)配置字節(jié)(7FE0H ~ 7FE3H);(2)4字節(jié)芯片串號(hào)(7FF0H ~ 7FF3H);(3)12字節(jié)存放產(chǎn)品信息(7FF4H ~ 7FFFH);(4)8 186(即8K - 6)字節(jié)用于存儲(chǔ)程序代碼(E000H ~ FFF9H);(5)6字節(jié)順序存放3個(gè)用戶矢量,NMI矢量、復(fù)位矢量和IRQ矢量(FFFAH ~ FFFFH)。
這些OTP存儲(chǔ)器的功能區(qū)段與Q-Writer和FortisIDE的操作界面的對(duì)應(yīng)關(guān)系,歸納如下:
(1) 系統(tǒng)配置字節(jié):是在FortisIDE開發(fā)界面中由用戶進(jìn)行設(shè)置的(其中的加密位除外)。在如圖1所示的項(xiàng)目設(shè)置對(duì)話框,當(dāng)中的Mast Option卡頁,對(duì)于其中6個(gè)選項(xiàng)的設(shè)置,將會(huì)記錄到OTP中對(duì)應(yīng)的4個(gè)系統(tǒng)配置字節(jié)中。FortisIDE開發(fā)環(huán)境自動(dòng)對(duì)于這些選項(xiàng)進(jìn)行了默認(rèn)設(shè)置,其對(duì)應(yīng)的系統(tǒng)配置字節(jié)值為:7FE0H~7FE3H=E7H,F(xiàn)FH,F(xiàn)EH,F(xiàn)FH。

圖1 Mast Option卡頁
(2) 芯片串號(hào):是在Q-Writer燒寫器操作界面中由用戶進(jìn)行設(shè)定的。Q-Writer系統(tǒng)默認(rèn)的芯片串號(hào)值為:7FF0H~7FF3H=FFH,F(xiàn)FH,F(xiàn)FH,F(xiàn)FH。
(3) 產(chǎn)品信息:也是在Q-Writer燒寫界面中由用戶進(jìn)行設(shè)定的。Q-Writer系統(tǒng)默認(rèn)的12字節(jié)產(chǎn)品信息值為:7FF4H~7FFFH=FFH,F(xiàn)FH,……,F(xiàn)FH。
(4) 程序代碼:就是在FortisIDE開發(fā)界面中,利用匯編器和連接器對(duì)源程序(.asm)進(jìn)行匯編和連接之后所生成的機(jī)器碼程序(.bin)。
(5) 用戶矢量:在FortisIDE開發(fā)環(huán)境下,始終作為源程序中不可缺少的一個(gè)組成部分,并且以一個(gè)獨(dú)特的邏輯段——矢量段的面貌出現(xiàn)在源程序中。在匯編、連接之后將被固定地定位到地址最高的FFFAH ~ FFFFH的6個(gè)字節(jié)單元中。
(6) 加密信息位:位于系統(tǒng)配置字節(jié)空間的加密位具有特殊性。將其改寫為“0”來實(shí)施程序保護(hù)的唯一方法是,在Q-Writer界面中設(shè)置了一條加密命令“Secure”。
3.4 燒寫器的工作特點(diǎn)
凌陽科技公司為SPMC65準(zhǔn)備的套裝開發(fā)工具——仿真燒寫一體化開發(fā)裝備,采用的是“一套硬件裝備配合兩套支持軟件”的搭配方式[2]。即支持仿真器功能的PC機(jī)端軟件為FortisIDE,支持燒寫器功能的PC機(jī)端軟件為Q-Writer。
(1) 燒寫器需要與其支持軟件Q-Writer相互配合才能工作。
(2) 在Q-Writer燒寫界面中不能在下傳和上傳程序窗口內(nèi)修改程序代碼。
(3) 在燒寫過程中,Q-Writer是把一個(gè)單片機(jī)內(nèi)部的所有OTP單元?jiǎng)澐譃?個(gè)相對(duì)獨(dú)立的部分,分別利用2條操作命令(Program和Secure),并且分別經(jīng)歷2次不同的燒寫活動(dòng)來單獨(dú)實(shí)現(xiàn)燒寫的。
(4) 對(duì)于一次代碼燒寫活動(dòng),燒寫器總是把除了加密信息之外的所有OTP單元全部燒寫一遍,而并不管具體程序的代碼長度是多大。
(5) 在一次代碼燒寫過程中,總是從低地址到高地址的OTP單元依次逐個(gè)單元燒寫的。
(6) 在代碼燒寫過程中每燒寫完一個(gè)字節(jié)單元,都會(huì)再讀回到上傳緩沖區(qū)中來,并且與下傳緩沖區(qū)的原始代碼字節(jié)進(jìn)行逐個(gè)比較。只有所有OTP單元完全對(duì)應(yīng)相同才會(huì)宣告成功。
(7) 在伴隨燒寫過程所同步進(jìn)行的比較活動(dòng)中,如果發(fā)現(xiàn)某一個(gè)OTP單元內(nèi)容不同于下傳緩沖區(qū)的原始代碼,則會(huì)宣告失敗。
(8) 只要發(fā)現(xiàn)有任何一個(gè)OTP單元燒寫失敗就會(huì)立刻中途停止,同時(shí)也就放棄了對(duì)于后面高地址單元的燒寫行為。
(9) 由于無論操作模式如何定義,自動(dòng)燒寫命令Function>Auto Run都是從空檢操作開始的。只有芯片空白時(shí)才能夠繼續(xù)后面的燒寫等操作,因此,在對(duì)于非空白片進(jìn)行非首次的重復(fù)燒寫時(shí),該命令絕對(duì)不能使用!
針對(duì)OTP本身的固有特性,順勢(shì)而為,借力施力,就可以達(dá)到重復(fù)利用的目的。實(shí)質(zhì)上,一片OTP單片機(jī)被重復(fù)利用的過程,就是在一個(gè)較大的OTP存儲(chǔ)空間內(nèi),多次布局一些較小的實(shí)驗(yàn)程序代碼的過程,其重復(fù)利用的效率和質(zhì)量,就取決于對(duì)所有OTP空間重復(fù)布局方法的好壞程度。
2408A單片機(jī)具有的OTP,其主體部分的容量為8 kB。重復(fù)燒寫的實(shí)現(xiàn)方法主要就是采取分塊措施,來重復(fù)利用這8 kB的OTP。分割方案如圖2所示。

圖2 2408A的OTP分割方案
把8kB的OTP從低地址到高地址分割為一大一小的2塊。大塊為7 680字節(jié),用于分段分次燒寫程序代碼;小塊為512字節(jié),用于分段分次燒寫一條中斷程序入口指令JMP。
這里設(shè)計(jì)的OTP分割方案,暫時(shí)沒有考慮利用率極低的非屏蔽中斷NMI。假如單片機(jī)應(yīng)用項(xiàng)目中確實(shí)有必要啟用NMI功能,在本方案的基礎(chǔ)上實(shí)現(xiàn)起來也很容易。例如,將大塊末尾的0.5 kB再分離出來,安置NMI服務(wù)程序的入口指令;可以參照可屏蔽中斷程序的布局,及其IRQ中斷矢量的設(shè)置等處理手法。
盡管“JMP xxxx”指令的代碼長度只有3個(gè)字節(jié),但是這里每次燒寫時(shí)還是為它分配了4字節(jié),以避免SET指令帶來的破壞。同理,當(dāng)用戶代碼長度為奇數(shù)時(shí),為了湊成偶數(shù),就在程序開端添加一條空操作指令“NOP”(也可以在程序的任何部位插入1條NOP)。
如果按照如圖2所示的分割方案,1片2408A單片機(jī)最多可以提供126次的燒寫機(jī)會(huì)。理由是,(512-6)字節(jié)÷4字節(jié)/次=126次(取整)。如果一片2408A單片機(jī)的市場(chǎng)價(jià)為8元人民幣,均攤到每次試驗(yàn)的成本也就僅6分多錢。況且,開發(fā)一個(gè)小型項(xiàng)目也許用不著燒試這么多次。
如果在按照前面的一些方法重復(fù)利用OTP單片機(jī)的過程中,當(dāng)剩余的OTP存儲(chǔ)器空間只有2 kB(甚至1 kB)左右時(shí)就停止燒試。也就是不要再繼續(xù)把該單片機(jī)用作練習(xí)品,而是把它保留起來以用于燒寫成熟程序,即把它當(dāng)作項(xiàng)目最終定型的單片機(jī)使用。具有2 kB程序空間的單片機(jī),還是能夠滿足大部分小型電子產(chǎn)品項(xiàng)目的需要。如此以來,前面多次燒試的成本就幾乎可以被忽略掉。這就是作者專門為廣大SPMC65單片機(jī)初學(xué)者、應(yīng)用開發(fā)者設(shè)計(jì)的一種“0成本OTP重復(fù)燒試算法”,對(duì)于我們這個(gè)單片機(jī)消費(fèi)大國無疑具有巨大的經(jīng)濟(jì)效益和積極意義。
本文講解重復(fù)利用OTP單片機(jī)的操作方法,以及重復(fù)燒寫OTP單片機(jī)的算法設(shè)計(jì)。這些方法和算法都是針對(duì)SPMC65P系列單片機(jī)的特性、燒寫器的工作特點(diǎn)、匯編器和連接器的處理方法等因素,經(jīng)過作者精心設(shè)計(jì)和推敲、反復(fù)試驗(yàn)和改進(jìn)之后探索出來的,可以供廣大讀者分享。
另外,作者根據(jù)自己的體驗(yàn)也想在此提出一點(diǎn)建議:如果把燒寫器的操作流程和燒寫算法由“逐個(gè)字節(jié)燒寫后立即自動(dòng)核對(duì),不符即刻中止”修改為“整體燒寫終了再自動(dòng)核對(duì),或者手動(dòng)核對(duì)”,將會(huì)給重復(fù)燒寫OTP型SPMC65P系列單片機(jī)帶來更多的便利。
[1] 李學(xué)海.凌陽8位單片機(jī)——基礎(chǔ)篇[M].北京:北京航空航天大學(xué)出版社,2005.
[2] 李學(xué)海.凌陽8位單片機(jī)——提高篇[M].北京:北京航空航天大學(xué)出版社,2006.
Algorithm Design and Realization of SPMC65P
SONG Qing-hua1,SONG Qing-guo2
(1.The 13th Electronic Research Institute,CETC,Shijiazhuang 050051,China;2.Shijianzhuang Leafchanson Information Technology Co.,Ltd,Shijiazhuang 050000,China)
One time programming (OTP) monolithic computer has characteristics of one-time programming,being economical and practical,safe and reliable,being suitable for mass production of user.Based on studying the structural characteristics,process characteristics,programming techniques of OTP monolithic computer chip's program memory bits,aiming at the particularity of 6502CPU kernel compatible monolithic computer and the particularity of special programmer operation processes,this paper plans an unprecedented algorithm design and solution scheme to solve the practical problems how to repeat programming and use effectively,which is of elicitation action and guidance meaning for the usage developers of such monolithic computer,and is of reference meaning for reuse of other genre OTP monolithic computers.
monolithic computer;programmer;repeat programming;algorithm design
2015-02-06
TP368
B
CN32-1413(2015)04-0116-05
10.16426/j.cnki.jcdzdk.2015.04.029