李學海,范興娟
(石家莊郵電職業技術學院 電信系,河北 石家莊 050021)
計算機技術應用
重復燒寫OTP單片機的方法設計
李學海,范興娟
(石家莊郵電職業技術學院 電信系,河北 石家莊 050021)
在充分研究了OTP類單片機片載程序存儲器的功能分布、位元結構、工藝特點、指令特點、燒寫規律的前提下,選擇凌陽科技公司的一款OTP單片機作為教學目標或實驗模型,創新性地規劃設計了一種全新的操作算法和解決方案,解決了重復燒寫和高效利用OTP單片機的實驗技術和實踐教學中的實際問題。對于此類單片機的初學者、教學者和應用項目開發者具有實用價值和啟發意義。
OTP單片機;重復燒寫;實驗技術;實踐教學
程序燒寫器(writer),國外也稱編程器(programmer),是實現將調試好的機器碼程序(.bin或.hex)固化到單片機片載程序存儲器內部的一種專用工具。可燒寫單片機分為OTP(one-time programmable)型和MTP(multi-time programmable)型,其中MTP型(又包含窗口式EPROM型和Flash型)可供用戶多次擦寫、重復利用;而OTP型只供用戶一次性燒寫。對于單片機的實驗教學、技能訓練或者應用開發,如果每燒寫一次就廢棄一顆單片機,將是很大的浪費。筆者試圖以創新性思維破解重復燒寫OTP型單片機的難題,甚至以零成本來重復利用這種單片機[1]。
在我國,從事單片機學習、研究、教學、應用、開發的群體十分龐大,單片機的需求量也很大。單片機片載程序存儲器的燒寫編程,對于那些進行單片機教學演示、學習實驗的人們,或者基于單片機的電子項目開發者,都是必須經歷的一個關鍵環節,并且這個環節往往還需要多次、反復進行。
針對早期的窗口式EPROM單片機成本高、離線燒寫、紫外線擦除等缺點,美國Microchip公司率先推出價格低廉的OTP單片機PIC12C和PIC16C系列[2],成就了一個單片機產銷量超百億片的世界頂級企業。隨后許多世界著名公司也推出此類產品[3-10]。這類單片機產品受到了那些生產批量大、價格敏感度高的家用電器等電子產品制造商的歡迎和首選。
隨著技術進步和Flash型單片機的問世,窗口式EPROM型單片機因陶瓷封裝的成本過高、利用紫外線擦除操作不方便、擦寫次數少、壽命短等原因而退出了市場。盡管Flash型單片機擦寫方便、價格低廉,深受單片機初學者的青睞,但是有些型號的單片機,廠家并不提供Flash版本。這些廠家通過壓縮單片機的研制成本,降低單片機的生產成本,把主要目標瞄準用量大的大客戶,諸如格蘭仕、美的等的家電企業。
其實OTP型單片機就是不開天窗的EPROM型單片機,因為它沒有擦除手段,所以只供用戶燒寫一次。它以塑料封裝取代陶瓷封裝,大大降低了封裝成本,從而具有明顯的價格優勢。OTP型單片機的可靠性也明顯優于Flash型單片機,但是有些廠家不提供同等型號單片機的Flash版本,這會給初學者和實驗教學帶來一些不便。因此,一旦解決了OTP型單片機的多次燒寫和重復利用難題,不僅可以獲得一種新的實驗技術或實驗方法,而且對于OTP型單片機的應用推廣和實驗教學也具有積極意義。
凌陽(Sunplus)科技公司是一家華人創辦的國際著名微電子企業,其消費性集成電路產銷量名列世界前茅。
該公司推出的SPMC65P系列單片機屬于8位的通用單片機系列,是針對家電產品以及工業控制領域的高抗干擾性、高性價比的工業級芯片。SPMC65P系列單片機從低檔到高檔,可以滿足不同客戶的需求,包括不帶ADC的I/O控制型單片機、帶ADC的I/O控制型單片機等。SPMC65P系列采用的8位通用CPU內核是凌陽公司在6502的基礎上改進而成的(稱為65B02),除了支持6502的全部指令之外,還擴充了一些位操作指令[9-10]。
凌陽生產的SPMC65P系列單片機,其硬件結構、寄存器的映射關系等都是相同的,不同的只是片內外圍硬件模塊的多寡。SPMC65P系列單片機根據片內資源的情況,劃分了兩類:(1)不帶ADC的通用單片機系列;(2)帶ADC的通用單片機系列。SPMC65P2408A單片機是目前SPMC65P系列上市型號中資源較全的芯片,其突出特點是,內部資源豐富、性價比非常高、電磁兼容性好[9-10]。
為了吸引更多的大客戶,減少家電制造商的研發投入,加快其電器產品上市速度,凌陽還免費提供了許多設計成功的產品案例。例如,空調機、豆漿機、微波爐、電冰箱、電磁爐、電飯煲、報警器主機、電動自行車、電動跑步機、智能IC卡燃氣表、CAN總線智能節點等,并且軟硬件全部開源。
在構思對一次性燒寫型單片機進行多次重復燒寫的方法時,需要精心分析和周密考慮以下幾個方面的因素。
3.1 OTP存儲位元的特性
此類存儲器的每個存儲位元(cell),即能夠存儲一位二進制數(比特)的最小單位,是由一個浮動柵極場效應晶體管構成的。這個場效應管的浮柵是一個與周圍絕緣的孤島形導體,利用該導體內部是否存在積累電荷來記錄一個比特數據。在原始狀態或空白狀態下,導體內沒有蓄積電荷,場效應管處于截止狀態,其漏極呈現高電平,以此來表示存儲位元中存儲的是一位“1”。在利用高電壓進行燒寫操作時,如果寫入的是“1”,則場效應管不發生任何改變;如果寫入的是“0”,則會在高電壓激發下使一些載流子擊穿絕緣層而進入場效應管的浮柵導體,這樣就在導體內部形成一定的蓄積電荷,使得場效應管變為導通狀態,其漏極呈現低電平,以此來表示存儲位元中存儲的是一位“0”。
每個存儲位元具有以下特性:(1)在原始狀態或空白狀態下,存儲的內容為1;(2)如果原來內容是1,在燒寫0時,內容變為0;(3)如果原來內容是1,在燒寫或重復燒寫1時,內容不變;(4)如果原來內容是0,在燒寫或重復燒寫0時,內容不變;(5)如果原來內容是0,在燒寫或重復燒寫1時,內容不變;(6)一旦寫入0后,其內容再也無法恢復為1(空白值)[1]。
由存儲位元的特性可得出結論:OTP存儲位元在1的基礎上燒寫0,只有1次機會;而在1的基礎上燒寫1,在0的基礎上燒寫0或1的次數則不受限制。
3.2 單片機指令集的編碼特點
SPMC65P指令系統的全部指令有182條,其操作碼字段都是利用8位二進制數編碼的,并且指令總長度不固定[9-10]。8位二進制數碼理論上可以有28= 256種不同的編碼狀態,而182條指令僅利用了其中的一部分。其中有2種特殊的編碼需要特別地注意,即全1的“FFH”和全0的“00H”。前者對應著OTP存儲器單元的空白狀態,后者對應著OTP存儲器單元的所有存儲位全部被改寫。
(1) 機器碼為“FFFFH”的指令是“SET $FF,7”,既是一條2字節指令,又是一條位操作指令,也是一條把bit7置1的指令,還是一條攜帶著字節單元地址編碼的指令。其實現的具體功能是將0頁RAM的FFH單元的bit7設置為1,并且不影響任何標志位。如果保留RAM的FFH單元不用,就可以認為這條位操作指令不會產生任何影響或者沒有帶來任何后果,只是耗費2個系統周期的執行時間而已。需要注意的是:操作碼字段為“FFH”的指令也必然是一條2字節的“SET aa,7”。當CPU遇到FFH時,會自動順延再提取一個字節作為SET指令的第二字節,即把FFH鄰接的高地址單元內容“aa”提取出來,作為被SET指令進行位操作的目標字節單元(aa為隨機編碼,這里應該是用戶程序中第一條指令編碼的第一個字節內容)。假若這樣一條指令被執行,不僅指令本身帶來破壞,更重要的是破壞了用戶程序代碼的本來提取順序,導致用戶程序不能被正常執行。因此,必須設法避免上述情況發生。
(2) 機器碼為“00H”的指令是“BRK”,這是一條單字節的軟件中斷指令。盡管SPMC65P單片機產品手冊在資料層面上刪除了該指令,但是在語言工具層面以及硬件芯片層面上,該指令仍然是存在的[9-10]。該指令一旦被CPU執行,將會進入可屏蔽中斷服務程序。為了避開該指令帶來的負面影響,應盡量避免執行BRK指令。
在被燒寫的用戶程序中,合理地安排和填充上述兩種指令代碼,是重復利用OTP單片機的算法基礎。
3.3 單片機片載OTP的分布特點
單片機SPMC65P2408A的OTP EPROM存儲器的寬度為8 bit、長度為8 212(=4+4+12+8 186+6)個字節單元。如果按功能劃分,所有OTP存儲空間可以分為5個功能區段,從低地址到高地址依次是:(1)4字節(7FE0H—7FE3H)存放系統配置字節;(2)4字節(7FF0H—7FF3H)為芯片串號;(3)12字節(7FF4H—7FFFH)存放產品信息;(4)8186(即8K- 6)字節(E000H—FFF9H)用于存儲程序代碼;(5)6字節(FFFAH—FFFFH)順序存放3個用戶矢量,即NMI矢量、復位矢量和IRQ矢量[9-10]。
這些OTP存儲器的功能區段與Q-Writer和FortisIDE的操作界面存在以下對應關系。
(1) 系統配置字節。是在FortisIDE開發界面中由用戶進行設置的(其中加密位除外)。在圖1所示的Mast Option選項卡中,對于其中6個選項的設置,將會記錄到OTP中對應的4個系統配置字節中。FortisIDE開發環境自動對于這些選項進行了默認設置,所對應的系統配置字節值為:(7FE0H—7FE3H)=E7H,FFH,FEH,FFH。

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

圖2 SPMC65P2408A的OTP分割方案
把8 KB的OTP從低地址到高地址分割為一大一小的兩塊。大塊為7680字節,用于分段、分次燒寫程序代碼;小塊為512字節,用于分段、分次燒寫一條中斷程序入口指令JMP。
這里設計的OTP分割方案,暫時沒有考慮利用率極低的非屏蔽中斷NMI。假如單片機應用項目中確實有必要啟用NMI功能,在本方案的基礎上實現起來也很容易。例如,將大塊末尾的0.5 KB再分離出來,安置NMI服務程序的入口指令,參照可屏蔽中斷程序的布局及其IRQ中斷矢量的設置等處理方法。
盡管“JMP xxxx”指令的代碼長度只有3個字節,但是每次燒寫時還是為它分配了4字節,以避免SET指令帶來的破壞。同理,當用戶代碼長度為奇數字節時,為了湊成偶數,要在程序開端添加一條空操作指令“NOP”(也可以在程序的任何部位插入NOP)。
如果按照如圖2所示的分割方案,一片SPMC65P2408A單片機最多可以提供126次的燒寫機會,理由是:(512-6)字節÷4字節/次 =126次(取整)。如果一片SPMC65P2408A單片機的市場價為8元人民幣,均攤到每次燒寫的成本約為0.06元,況且開發一個小型項目也許用不著燒試多達126次。
在按照上述方法重復利用OTP單片機的過程中,當剩余的OTP存儲器空間只有2 KB左右時就停止燒試。也就是不要再繼續把該單片機用作練習品,而是把它保留起來以用于燒寫成熟程序,即把它當作項目最終定型的單片機使用。具有2 KB程序空間的單片機,還是能夠滿足大部分小型電子產品項目的需要。因此,前面多次燒試的成本就幾乎可以忽略不計。
重復燒寫OTP單片機的方法和算法的實現,考慮到了OTP程序存儲器的結構特點、SPMC65P單片機的指令特點、原配燒寫器的工作特點、匯編器和連接器的處理方式等諸多因素。因此,這是一項基礎性、實用性的研究成果,也是一種用于OTP型單片機教學或者學習的新的實驗技術,是經過筆者精心設計、反復推敲、大量試驗和不斷改進之后探索出來的,并且經過了多年來的實用檢驗,效果理想。筆者希望與從事單片機教學研究的教師、初學者、應用項目開發者共同分享該研究成果,并使這一經濟實用的研究成果得到推廣。
References)
[1] 李學海.重復利用OTP單片機方法探討[C]//2003年全國單片機及嵌入式系統學術年會暨多國產品展示會論文集.北京:北京航空航天大學出版社:59-67.
[2] 李東星.PIC16C5X系列單片機應用設計[M].北京:電子工業出版社,1996.
[3] 李學海.EM78單片機實用教程:基礎篇[M].北京:電子工業出版社,2003.
[4] 李學海.EM78單片機實用教程:提高篇[M].北京:電子工業出版社,2003.
[5] 李齊雄,鄭顏雄,蔡孟昌.HOLTEK HT48系列單片機原理及應用實例[M].北京:北京航空航天大學出版社,2005.
[6] 周航慈.PHILIPS 51LPC系列單片機原理及應用設計[M].北京:北京航空航天大學出版社,2001.
[7] 張迎新.ST7通用單片機原理及應用[M].北京:北京航空航天大學出版社,2004.
[8] 楊榮.海爾單片機原理及應用[M].北京:北京航空航天大學出版社,2011.
[9] 李學海.凌陽8位單片機:基礎篇[M].北京:北京航空航天大學出版社,2005.
[10] 李學海.凌陽8位單片機:提高篇[M].北京:北京航空航天大學出版社,2006.
[11] 凌陽科技.SPMC65系列單片機在線仿真編程器使用說明書V1.0 [EB/OL].[2014-06-05].http://wenku.baidu.com/view/bfa1966027d3240c8447efdf.html.
[12] 凌陽科技.SPMC65系列單片機學習板使用說明書V1.0 [EB/OL].[2014-06-05].http://wenku.baidu.com/view/bfa1966027d3240c8447efdf.html.
Design of repeat programming OTP microcontroller
Li Xuehai,Fan Xingjuan
(Department of Telecommunications ,Shijiazhuang Posts and Telecommunications Technical College, Shijiazhuang 050021,China)
The OTP microcontroller with one-time programming,economical,safe and reliable,suitable for mass production,etc.,has been widely used by a large number of users. In the full study functional distribution of the on-chip OTP microcontroller program memory,the bit cell structure,process characteristics,instruction features,regular programming, this article chooses a Chinese-made OTP microcontroller as an object or experimental model of teaching,planning and designing a kind of unprecedented operation algorithms and solutions of experimental techniques, in practical teaching solving the repeat programming and efficient use. Such microcontroller beginners,teachers and developers of application project in particular have the practical value and instructive meaning.
OTP microcontroller;repeat programming;experimental techniques;practical teaching
2014- 06- 17
河北省高等教育教學改革項目(Z2010315);河北省高等教育教學改革項目(Z2010316);河北省高職高專電子信息類專業教學指導委員會科研項目(DZJZW201309)
李學海(1959—),男,河北南皮,本科,高級工程師,研究方向為嵌入式控制技術、電子設計技術和程控交換技術.
E-mail:lixuehai@tom.com
TP368.1
A
1002-4956(2015)1- 0138- 04