宋慶華,宋慶國
(1.中國電子科技集團公司第13研究所,石家莊 050051;2.石家莊聆風暢想信息技術(shù)有限公司,石家莊 050000)
?
SPMC65P的算法設計與實現(xiàn)
宋慶華1,宋慶國2
(1.中國電子科技集團公司第13研究所,石家莊 050051;2.石家莊聆風暢想信息技術(shù)有限公司,石家莊 050000)
一次性編程(OTP)單片機具有一次性編程、經(jīng)濟實用、安全可靠、適合量產(chǎn)用戶等特點。在充分研究了OTP版單片機芯片的程序存儲器位元的結(jié)構(gòu)特點、工藝特性、燒寫技巧的前提下,針對6502CPU內(nèi)核兼容型單片機的特殊性和專用燒寫器操作流程的特殊性,規(guī)劃了一種前所未見的算法設計和解決方案,解決了如何重復燒寫和高效利用的實際問題。對于此類單片機的應用項目開發(fā)者特別具有啟發(fā)作用和指導意義,對于其他流派OTP單片機的重復利用也會有借鑒意義。
單片機;燒寫器;重復燒寫;算法設計
對于專業(yè)人員把調(diào)試成功的用戶程序燒寫到單片機內(nèi)部的程序存儲器,是單片機應用開發(fā)過程后期的必不可少的一道工序。對于初學者在沒有專業(yè)仿真器的情況下,采用“盲調(diào)法”(或叫燒試法)也可以達到實時檢驗用戶程序和用戶電路的基本目的。
針對窗口式電子可編程只讀存儲器(EPROM)單片機成本高、離線燒寫、紫外線擦除等缺點,美國MicroChip公司率先推出價格低廉的OTP單片機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系列等。
其實OTP型就是不開天窗的EPROM型,它沒有擦除手段,所以只供用戶燒寫一次。本文中講解的樣板機型SPMC65P系列就屬于此類產(chǎn)品。雖然SPMC65P單片機的價格低廉(零售價不足10元),但是對于處于學習和演練階段的初學者和開發(fā)者來說,如果燒寫一次試驗程序就報廢一顆,多次積累下來也是一筆不小的代價。那么,能否通過精心安排和巧妙變通,把OTP版的SPMC65P單片機進行多次重復利用呢?答案是可行的!
凌陽科技最新推出的SPMC65系列單片機屬于8 位的通用單片機系列,是針對家電產(chǎn)品以及工業(yè)控制領(lǐng)域的高抗干擾性、高性價比的工業(yè)級芯片。SPMC65系列單片機提供了從低檔到高檔一系列產(chǎn)品,以滿足客戶的不同需求,包括不帶模/數(shù)轉(zhuǎn)換器(ADC)的輸入/輸出(I/O) 控制型單片機、帶ADC的I/O 控制型單片機等。SPMC65系列采用的8位通用CPU內(nèi)核是凌陽公司在6502的基礎上改進后的CPU內(nèi)核(稱為65B02),除了支持6502的全部指令之外,還擴充了一些位操作指令。
整個SPMC65系列的所有單片機型號,其硬件結(jié)構(gòu)、寄存器的映射關(guān)系等都是相同的,不同的只是硬件模塊的刪減。SPMC65系列單片機根據(jù)片內(nèi)資源的情況,目前劃分了兩大類芯片[1]:(1)不帶ADC的通用單片機系列;(2)帶ADC 的通用單片機系列。本文將以SPMC65P2408A(以下簡稱2408A)單片機為例,它是目前SPMC65系列上市型號中資源較全的一種芯片。其突出特點是內(nèi)部資源豐富、性價比非常高、電磁兼容性好。
目前已經(jīng)發(fā)現(xiàn)中國臺灣和中國大陸地區(qū)出現(xiàn)了十余家生產(chǎn)以6502為CPU內(nèi)核(或兼容6502CPU)的單片機的微電子公司,凌陽公司就是其中的典型代表。
在構(gòu)思將一次性燒寫型單片機變通為多次重復利用的實施方法時,需要精心分析和周密考慮以下幾個方面。
3.1 OTP存儲位元的特性
此類存儲器的每個存儲位元(Cell),也就是能夠存儲一位二進制數(shù)的最小單位,其結(jié)構(gòu)是由一個浮動柵極場效應晶體管構(gòu)成的。這個場效應管的浮柵是一個與周圍絕緣的孤島形導體,利用該導體內(nèi)部是否存在積累電荷來記錄一個比特數(shù)據(jù)。在原始狀態(tài)或空白狀態(tài)下,導體內(nèi)沒有蓄積電荷,場效應管處于截止狀態(tài),其漏極呈現(xiàn)高電平,以此來表示存儲位元中存儲的是一位“1”。在利用高電壓進行燒寫操作時,如果寫入的是“1”,則場效應管不發(fā)生任何改變;如果寫入的是“0”,則會在高電壓激發(fā)下使一些載流子擊穿絕緣層而進入場效應管的浮柵導體,這樣就在導體內(nèi)部形成一定的蓄積電荷,使得場效應管變?yōu)閷顟B(tài),其漏極呈現(xiàn)低電平,以此來表示存儲位元中存儲的是一位“0”。
每個存儲位元具有以下的天然特性[2]: (1)在原始狀態(tài)或空白狀態(tài)下,本來的內(nèi)容為1; (2)如果原來內(nèi)容是1,在燒寫0時,內(nèi)容變?yōu)?; (3)如果原來內(nèi)容是1,在燒寫或重復燒寫1時,內(nèi)容不變,等于沒寫; (4)如果原來內(nèi)容是0,在燒寫或重復燒寫0時,內(nèi)容不變,等于沒寫; (5)如果原來內(nèi)容是0,在燒寫或重復燒寫1時,內(nèi)容不變,等于沒寫; (6)一旦寫入0后,其內(nèi)容再也無法恢復為1(空白值)。
由存儲位元的特性可以總結(jié)出一個結(jié)論:OTP存儲位元在1的基礎上燒寫0的次數(shù)只提供“1次”機會,而在1的基礎上燒寫1,或在0的基礎上燒寫0或1的次數(shù)都不受限制。
3.2 單片機的指令編碼特點
SPMC65P指令系統(tǒng)的所有182條指令[1],其操作碼字段統(tǒng)統(tǒng)都是利用8位二進制數(shù)編碼的(并且指令總長度不固定)。8位二進制數(shù)碼理論上最多可以表達28=256種不同的編碼狀態(tài),實際上182條指令僅利用了其中的一部分。其中有2種特殊的編碼在此需要引起特別的注意,那就是全1的“FFH”和全0的“00H”。前者對應著OTP存儲器單元的空白狀態(tài),后者對應著OTP存儲器單元的所有存儲位全部被改寫。
(1) 機器碼為“FFFFH”的指令是“SET $FF,7”,既是一條2字節(jié)指令,也是一條位操作指令,也是一條把bit7置1的指令,還是一條攜帶著字節(jié)單元地址編碼的指令。其實現(xiàn)的具體功能是把0頁RAM的FFH單元的bit7給設置為1,并且不影響任何標志位。如果保留隨機存取存儲器(RAM)的FFH單元不用,那么,就可以認為這條位操作指令不會產(chǎn)生任何影響或者沒有帶來任何后果,只不過僅耗費2個系統(tǒng)周期的執(zhí)行時間而已。
需要特別注意:操作碼字段為“FFH”的指令也必然是一條2字節(jié)的“SET aa,7”。當CPU遇到FFH時,會自動順延再提取1個字節(jié),作為SET指令的第2字節(jié)。即把FFH鄰接的高地址單元內(nèi)容“aa”,提取出來作為被SET指令進行位操作的目標字節(jié)單元(aa為隨機編碼,這里應該是用戶程序中第1條指令編碼的第1個字節(jié)內(nèi)容)。假若這樣一條指令被執(zhí)行,不僅指令本身帶來破壞,而且更重要的是破壞了用戶程序代碼的本來提取順序,導致用戶程序不能被正常執(zhí)行。因此,必須設法避免上述情況發(fā)生。
(2) 機器碼為“00H”的指令是“BRK”,這是一條單字節(jié)的軟件中斷指令。盡管在凌陽公司公布的SPMC65P單片機產(chǎn)品手冊中[1]的資料層面上刪除了該指令,但是在語言工具層面上以及硬件芯片層面上,該指令仍然是存在的。該指令一旦被CPU執(zhí)行,將會進入可屏蔽中斷服務程序。為了回避該指令帶來的負面影響,應該盡量避免執(zhí)行到BRK指令。
在被燒寫的用戶程序中,合理地安排和填充上述2種指令代碼,是重復利用OTP單片機的算法基礎。
3.3 2408A片載OTP的分布特點
2408A單片機的OTP EPROM存儲器,其寬度為8 bit、長度為8212=4 + 4 + 12 + 8 186 + 6個字節(jié)單元。如果按功能劃分,可以分解為5個功能區(qū)段[2]。從低地址到高地址依次分別是:(1)4字節(jié)存放系統(tǒng)配置字節(jié)(7FE0H ~ 7FE3H);(2)4字節(jié)芯片串號(7FF0H ~ 7FF3H);(3)12字節(jié)存放產(chǎn)品信息(7FF4H ~ 7FFFH);(4)8 186(即8K - 6)字節(jié)用于存儲程序代碼(E000H ~ FFF9H);(5)6字節(jié)順序存放3個用戶矢量,NMI矢量、復位矢量和IRQ矢量(FFFAH ~ FFFFH)。
這些OTP存儲器的功能區(qū)段與Q-Writer和FortisIDE的操作界面的對應關(guān)系,歸納如下:
(1) 系統(tǒng)配置字節(jié):是在FortisIDE開發(fā)界面中由用戶進行設置的(其中的加密位除外)。在如圖1所示的項目設置對話框,當中的Mast Option卡頁,對于其中6個選項的設置,將會記錄到OTP中對應的4個系統(tǒng)配置字節(jié)中。FortisIDE開發(fā)環(huán)境自動對于這些選項進行了默認設置,其對應的系統(tǒng)配置字節(jié)值為:7FE0H~7FE3H=E7H,F(xiàn)FH,F(xiàn)EH,F(xiàn)FH。
圖1 Mast Option卡頁
(2) 芯片串號:是在Q-Writer燒寫器操作界面中由用戶進行設定的。Q-Writer系統(tǒng)默認的芯片串號值為:7FF0H~7FF3H=FFH,F(xiàn)FH,F(xiàn)FH,F(xiàn)FH。
(3) 產(chǎn)品信息:也是在Q-Writer燒寫界面中由用戶進行設定的。Q-Writer系統(tǒng)默認的12字節(jié)產(chǎn)品信息值為:7FF4H~7FFFH=FFH,F(xiàn)FH,……,F(xiàn)FH。
(4) 程序代碼:就是在FortisIDE開發(fā)界面中,利用匯編器和連接器對源程序(.asm)進行匯編和連接之后所生成的機器碼程序(.bin)。
(5) 用戶矢量:在FortisIDE開發(fā)環(huán)境下,始終作為源程序中不可缺少的一個組成部分,并且以一個獨特的邏輯段——矢量段的面貌出現(xiàn)在源程序中。在匯編、連接之后將被固定地定位到地址最高的FFFAH ~ FFFFH的6個字節(jié)單元中。
(6) 加密信息位:位于系統(tǒng)配置字節(jié)空間的加密位具有特殊性。將其改寫為“0”來實施程序保護的唯一方法是,在Q-Writer界面中設置了一條加密命令“Secure”。
3.4 燒寫器的工作特點
凌陽科技公司為SPMC65準備的套裝開發(fā)工具——仿真燒寫一體化開發(fā)裝備,采用的是“一套硬件裝備配合兩套支持軟件”的搭配方式[2]。即支持仿真器功能的PC機端軟件為FortisIDE,支持燒寫器功能的PC機端軟件為Q-Writer。
(1) 燒寫器需要與其支持軟件Q-Writer相互配合才能工作。
(2) 在Q-Writer燒寫界面中不能在下傳和上傳程序窗口內(nèi)修改程序代碼。
(3) 在燒寫過程中,Q-Writer是把一個單片機內(nèi)部的所有OTP單元劃分為2個相對獨立的部分,分別利用2條操作命令(Program和Secure),并且分別經(jīng)歷2次不同的燒寫活動來單獨實現(xiàn)燒寫的。
(4) 對于一次代碼燒寫活動,燒寫器總是把除了加密信息之外的所有OTP單元全部燒寫一遍,而并不管具體程序的代碼長度是多大。
(5) 在一次代碼燒寫過程中,總是從低地址到高地址的OTP單元依次逐個單元燒寫的。
(6) 在代碼燒寫過程中每燒寫完一個字節(jié)單元,都會再讀回到上傳緩沖區(qū)中來,并且與下傳緩沖區(qū)的原始代碼字節(jié)進行逐個比較。只有所有OTP單元完全對應相同才會宣告成功。
(7) 在伴隨燒寫過程所同步進行的比較活動中,如果發(fā)現(xiàn)某一個OTP單元內(nèi)容不同于下傳緩沖區(qū)的原始代碼,則會宣告失敗。
(8) 只要發(fā)現(xiàn)有任何一個OTP單元燒寫失敗就會立刻中途停止,同時也就放棄了對于后面高地址單元的燒寫行為。
(9) 由于無論操作模式如何定義,自動燒寫命令Function>Auto Run都是從空檢操作開始的。只有芯片空白時才能夠繼續(xù)后面的燒寫等操作,因此,在對于非空白片進行非首次的重復燒寫時,該命令絕對不能使用!
針對OTP本身的固有特性,順勢而為,借力施力,就可以達到重復利用的目的。實質(zhì)上,一片OTP單片機被重復利用的過程,就是在一個較大的OTP存儲空間內(nèi),多次布局一些較小的實驗程序代碼的過程,其重復利用的效率和質(zhì)量,就取決于對所有OTP空間重復布局方法的好壞程度。
2408A單片機具有的OTP,其主體部分的容量為8 kB。重復燒寫的實現(xiàn)方法主要就是采取分塊措施,來重復利用這8 kB的OTP。分割方案如圖2所示。
圖2 2408A的OTP分割方案
把8kB的OTP從低地址到高地址分割為一大一小的2塊。大塊為7 680字節(jié),用于分段分次燒寫程序代碼;小塊為512字節(jié),用于分段分次燒寫一條中斷程序入口指令JMP。
這里設計的OTP分割方案,暫時沒有考慮利用率極低的非屏蔽中斷NMI。假如單片機應用項目中確實有必要啟用NMI功能,在本方案的基礎上實現(xiàn)起來也很容易。例如,將大塊末尾的0.5 kB再分離出來,安置NMI服務程序的入口指令;可以參照可屏蔽中斷程序的布局,及其IRQ中斷矢量的設置等處理手法。
盡管“JMP xxxx”指令的代碼長度只有3個字節(jié),但是這里每次燒寫時還是為它分配了4字節(jié),以避免SET指令帶來的破壞。同理,當用戶代碼長度為奇數(shù)時,為了湊成偶數(shù),就在程序開端添加一條空操作指令“NOP”(也可以在程序的任何部位插入1條NOP)。
如果按照如圖2所示的分割方案,1片2408A單片機最多可以提供126次的燒寫機會。理由是,(512-6)字節(jié)÷4字節(jié)/次=126次(取整)。如果一片2408A單片機的市場價為8元人民幣,均攤到每次試驗的成本也就僅6分多錢。況且,開發(fā)一個小型項目也許用不著燒試這么多次。
如果在按照前面的一些方法重復利用OTP單片機的過程中,當剩余的OTP存儲器空間只有2 kB(甚至1 kB)左右時就停止燒試。也就是不要再繼續(xù)把該單片機用作練習品,而是把它保留起來以用于燒寫成熟程序,即把它當作項目最終定型的單片機使用。具有2 kB程序空間的單片機,還是能夠滿足大部分小型電子產(chǎn)品項目的需要。如此以來,前面多次燒試的成本就幾乎可以被忽略掉。這就是作者專門為廣大SPMC65單片機初學者、應用開發(fā)者設計的一種“0成本OTP重復燒試算法”,對于我們這個單片機消費大國無疑具有巨大的經(jīng)濟效益和積極意義。
本文講解重復利用OTP單片機的操作方法,以及重復燒寫OTP單片機的算法設計。這些方法和算法都是針對SPMC65P系列單片機的特性、燒寫器的工作特點、匯編器和連接器的處理方法等因素,經(jīng)過作者精心設計和推敲、反復試驗和改進之后探索出來的,可以供廣大讀者分享。
另外,作者根據(jù)自己的體驗也想在此提出一點建議:如果把燒寫器的操作流程和燒寫算法由“逐個字節(jié)燒寫后立即自動核對,不符即刻中止”修改為“整體燒寫終了再自動核對,或者手動核對”,將會給重復燒寫OTP型SPMC65P系列單片機帶來更多的便利。
[1] 李學海.凌陽8位單片機——基礎篇[M].北京:北京航空航天大學出版社,2005.
[2] 李學海.凌陽8位單片機——提高篇[M].北京:北京航空航天大學出版社,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