?

基于C#的OTP存儲器燒錄器上位機軟件的設計與實現

2016-09-08 09:23唐亞華
電子設計工程 2016年13期
關鍵詞:下位熔絲存儲器

姚 遠,唐亞華

(1.電子科技大學 微電子與固體電子學院,四川 成都 610054;2.成都信息工程大學 光電技術學院,四川 成都 610225)

基于C#的OTP存儲器燒錄器上位機軟件的設計與實現

姚 遠1,唐亞華2

(1.電子科技大學 微電子與固體電子學院,四川 成都610054;2.成都信息工程大學 光電技術學院,四川 成都 610225)

一次性可編程OTP存儲器件的數據燒錄需要專門的燒錄器,而獲取讀取與燒寫的數據則需要專門上位機軟件來進行相應的操作。針對國內某反熔絲OTP存儲器件,本文主要介紹了如何使用C#語言設計一個通過串口通信實現在PC上進行OPT存儲器數據的讀寫的測試軟件。由于必需對OTP存儲器的功能進行測試才能得到OPT存儲器中被燒錄的正確數據,因此怎樣使用上位機軟件讀取到通過串口與PC相連的高性能的OTP存儲器中的數據成為一個我們非常關心的課題。C#語法簡單,代碼重用性高,易于維護,設計出的軟件便于測試人員進行操作。在PC與基于STM32的下位機硬件平臺連接進行實際測試的實驗中表明,利用C#編寫出的上位機軟件能快速、準確地對OPT存儲器進行讀取和寫入。

C#;串口通信;OPT存儲器;芯片測試

一次性可編程OTP存儲器由于其存儲數據的非易失性、抗輻射性、高可靠性、高保密性[1],在密鑰存儲、軍工設備、航空航天等領域獲得了廣泛的應用。然而目前,與反熔絲相關的大部分技術都被西方發達國家所掌握,我國處于相對落后地的位。因此,必須走自主創新的道路,開發出相應的編程設備與軟件,逐步縮短我國與西方發達國家的差距。

存儲器測試是指在設計或者生產半導體存儲器芯片時,對它的的功能進行驗證,以及測量它的一些主要電學特性參數。測試的目的是為了判斷存儲器產品質量的好壞以及獲得一些重要參數,為今后的改進設計提供幫助[2]。一套合格的存儲器測試/燒錄系統可以大大減少測試人員的工作量,使得芯片測試工作更加智能、高效、便捷。

OTP存儲器中的原始數據全為“1”或者全為“0”,通過外加電壓可以實現OTP存儲器的編程。OTP存儲器只能編程一次,不能擦除已經寫入的數據而重新編程[3]。反熔絲是一種可編程單元,未編程時,反熔絲相當于一個電容,呈高阻抗狀態,高壓編程后,反熔絲被擊穿,呈低阻抗狀態[4],通過這種物理狀態上的差異達到穩定存儲二進制數值的目的。C#是兼顧系統開發和應用開發的最佳實用語言,相比于C/C++,C#的語法更簡單,代碼重用性更高,軟件更易于維護,且能夠設計出非常友好的可視化圖形用戶界面,便于測試人員進行操作。針對國內某反熔絲OTP存儲器件,文中主要介紹了如何使用C#語言設計一個通過串口通信實現在PC上進行OPT存儲器數據的讀寫的測試軟件,主要具有以下特點:通過RS232串口與計算機通信;友好的圖形用戶界面;提供自動化、高效的讀取與燒錄方式;可兼容多種反熔絲OPT存儲器件;可兼容不同的使用串口進行通信的測試平臺。

1 燒錄器系統總體設計方案

該燒錄器系統總體結構如圖1所示,整個系統分為PC上位機軟件和硬件燒錄平臺下位機兩個部分。在對反熔絲OPT存儲器進行燒錄的過程中,PC上位機產生燒寫與讀取控制指令控制燒錄器對反熔絲OTP存儲器進行數據的燒寫與讀取。將編程數據存儲在Hex文件中,在上位機軟件中加載Hex文件即可自動高效地將編程數據燒錄到反熔絲OTP存儲器中。讀校驗指令用于校驗反熔絲OTP存儲器中已燒錄的數據是否與Hex文件中的數據一致。此外,燒錄器還將燒錄狀態以及讀寫結果反饋回計算機,并在上位機軟件上顯示出來,實時監控燒錄過程,一旦出現故障,可及時進行故障排除。

圖1 燒錄系統總體結構圖

2 燒錄系統的下位機硬件基礎

由于只有通過串口上位機軟件才能向下位機發送數據、接收下位機讀取到的數據,所以這里著重介紹此燒錄系統的串口通信電路。RS232串口通信電路負責上位機與下位機的通信功能,上位機通過RS232串口通信電路向下位機發送指令與數據,下位機通過RS232串口通信電路向上位機反饋下位機的運行及對OTP存儲器的讀寫狀況。

近距離通信時,通過三根線(TXD、RXD、GND)就可以實現計算機與編程器的全雙工異步串口通信。在TXD(發送)和RXD(接收)上:邏輯“1”為-3 V至-15 V,邏輯“0”為+3 V至+ 15 V[5]。由于本燒錄器為+3.3 V電壓系統,使用的是TTL或CMOS邏輯電平,因此采用電平轉換芯片SP3222EEA,該芯片能實現TTL或CMOS邏輯電平與RS-232電平之間的轉換。

3 燒錄器上位機軟件及其界面的設計

軟件界面主要分為串口設置、HEX數據發送、讀操作、功能操作、數據接收幾個部分。串口設置讓用戶可以選擇使用PC上的某一個串口;HEX數據發送部分讓用戶可以從PC硬盤上選擇某個想要寫入或者讀檢驗的HEX文件,并且進行寫文件或者讀校驗操作;讀操作部分可以讓用戶自定義讀校驗的起始和結束地址,讀取OTP存儲器中某個特定部分的數據;功能操作部分可以讓用戶清空數據窗口中的內容以及退出上位機軟件程序;接收數據部分用來顯示從OTP存儲器讀取出來的數據以及下位機反饋回來的一些讀取狀態與信息。

首先對連接到PC的串口進行設置。當打開軟件,主窗口進行裝載時,軟件就自動對PC上的串口進行遍歷搜索,并對每個串口進行檢測,如果串口可用則在listBox1中顯示可用串口的編號。如果打開串口失敗那么sp.Open()語句無法正常運行,try中的語句拋出異常,不會執行try中的其余語句,轉而執行catch中的語句[6],在label6中顯示出不可用的COM口。同時通過SerialDataReceivedEventHandler()方法委派sp_DataReceived函數對串口的數據接收事件進行處理,每當串口有數據發送到上位機時,都使用串口的DataReceived事件接收下位機發送過來的數據。串口選擇部分源代碼如下所示。

private void Form1_Load(object sender,EventArgs e)

{ for(int i=0;i<256;i++)

{SerialPort sp=new SerialPort("COM"+(i+1). ToString();

sp.Open();

sp.Close();

this.listBox1.Items.Add("COM"+(i+1). ToString();}

s.Forms.Control.CheckForIllegalCrossThreadCalls= false;

this.sp.DataReceived+=new SerialDataReceivedEventHandler(sp_DataReceived);}

選擇好要使用的串口后,還需要對串口的波特率、停止位、數據位、奇偶校驗位等參數進行設置。為了方便在程序其他部分調用對串口參數的設置,這里專門為其定義一個private類型的函數。由于在讀取和燒錄數據時串口的參數設置并不會有所改變,所以這里的函數是一個無參數的函數,串口參數的設置已經內嵌于此函數中。串口參數設置的函數代碼如下所示。

private void setportproperty()

{sp.PortName=listBox1.Text.Trim();

sp.BaudRate=Convert.ToInt32("9600");

sp.StopBits=StopBits.One;

sp.DataBits=Convert.ToInt16("8");

sp.Parity=Parity.None;

sp.ReadTimeout=-1;}

下面著重對負責從串口接收從下位機讀取到數據和向下位機發送數據的sp_DataReceived函數進行分析。由于上位機軟件主要有寫文件、讀校驗、讀操作3種針對下位機的數據操作,因此sp_DataReceived函數中也有3種不同的串口接收數據的方式,這里使用switch語句進行模式之間的轉換,讀操作、寫文件和讀校驗分別對應model中的1、2、3模式。

當model為1時,進入讀操作模式。為了將串口發送來的數據保存下來,首先需要定義一個一維8位無符號整數數組receiveddata用來存儲從串口緩沖區讀取到的數據,而該數組的長度則由SerialPort的BytesToRead屬性(獲取串口輸入緩沖區中需要讀取的字節數)決定。然后使用SerialPort的Read方法將從串口輸入緩沖區讀取的數據寫入到receiveddata數組中,這里將寫入的起始點設置為0,偏移量設置為receiveddata.Length,這樣receiveddata數組中的數據就被需要讀取的數據全部覆蓋了。接下來使用 SerialPort的DiscardInBuffer()方法釋放來自串口的接收緩沖區的數據,防止接收緩沖區一直被舊的數據占用而不能再接收來自下位機的新數據。最后定義一個字符型變量strRcv,用來將receiveddata數組中的無符號整數元素轉換為字符弄并顯示到PC屏幕上。這里使用一個for循環將receiveddata數組中的所有元素強制轉換為char型按順序依次添加到strRcv中,再顯示到textBox2即軟件的接收數據區域中,這樣就完成了對下位機上OTP存儲芯片中數據的讀取操作。此部分主要代碼如下所示。

Byte[]receiveddata=new Byte[sp.BytesToRead];

sp.Read(receiveddata,0,receiveddata.Length);

sp.DiscardInBuffer();

string strRcv=null;

for(int i=0;i

{strRcv+=(char)receiveddata[i];}

this.textBox2.Text+=strRcv;

當model為2時,進入寫文件模式。在寫文件模式中,也需要先將從下位機接收到的數據轉換為字符型顯示到接收數據區域中,因此這部分也需要讀操作的功能,將case1中的代碼復制下來即可。然而為了實現寫文件,不僅需要讀取下位機通過串口發送來的數據,還需要將HEX文件中的數據通過串口發送給下位機。在發出將接收到的數據顯示到屏幕上的指令后,這里需要將當前進程掛起200 ms使用的是Thread. Sleep()語句。這樣做的原因是下位機發送數據到上位機是需要一定時間的,必需留有足夠的時間以確保上位機已經完全接收到了下位機發送來的數據。在寫文件模式下,當下位機準備好接收來自上位機HEX文件中的數據時,會向上位機發送一個“OK”,之后每接收到一行HEX文件中的數據之后也會向上位機發送一個“OK”。這樣上位機就必須檢測接收到的數據中是否含有“OK”字符,這一步是通過字符串的Contains()方法實現的。當檢測到接收的數據中包含“OK”,程序需要進一步檢測當前上位機發送的數據是否在HEX文件流的最后一行,通過獲取當前文件的EndOfStream屬性來實現。如果當前發送的數據不是在當前文件的最后一行,就通過StreamReader的ReadLine()方法讀取當前文件流中的一行字符數據并將其作為字符串返回,然后將這個字符串通過SerialPort的Write()方法寫入到串口,即將要寫入到OTP存儲器芯片的數據發送給下位機。為了使此軟件界面可視化更強,這里還使用了進度條控件以顯示寫文件時HEX文件中數據加載的進度。為了實現進度條的顯示,這里定義了一個整型數據total,初始值為0,每當將一行HEX數據發送給下位機后,total的值就+1,并且將total/512(此處以64kOTP存儲芯片為例,一行HEX數據為16Byte,一共有512行HEX數據)的值賦給進度條控件的Value屬性。最后使用SteamReader類的Close()釋放被占用的HEX文件以及讀取器,使用戶可以重新對HEX文件進行編輯。此模式不同于讀操作模式的主要代碼如下所示。

if(strRcv.Contains("OK"))

{if(!readfile.EndOfStream)

{sp.Write(readfile.ReadLine().Trim();

sp.Write(Environment.NewLine);

total++;

toolStripProgressBar1.Value=total/512;}

else{MessageBox.Show("data end");

readfile.Close();}

當model為3時,進入讀校驗模式。讀校驗模式和讀操作模式的區別在于:讀校驗模式在讀出OTP存儲器芯片的數據后需要與提前加載的HEX文件進行比對,主要用來校驗已燒錄到芯片中的數據與原有的HEX文件中的數據是否匹配;而讀操作模式是直接把存儲器芯片給定地址區間的數據讀取出來。因此讀校驗模式和寫文件模式都需要將HEX文件中的數據通過串口加載到下位機當中。而具體數據比較匹配的工作是由下位機完成的。這樣讀校驗模式部分的代碼和寫文件模式的代碼可以基本上保持一致,兩者的主要區別在于:在將下位機發送來的數據顯示到屏幕上后,讀校驗模式需要將線程掛起500 ms而不是200 ms。這樣做的原因主要是下位機中讀寫模式的不同造成的。在寫文件模式中,下位機每接收到一行HEX數據就會向上位機反饋一個“OK”,當所有HEX數據都向下位機發送完畢后下位機才根據已經接收到的數據開始對存儲器芯片進行數據燒錄。雖然OTP存儲器燒錄數據的時間比較長,但是上位機程序中只需要給下位機發送“OK”和將其打印至屏幕上的過程留足時間,因此寫文件模式中在打印字符串指令發出后只需要將當前進程掛起200ms。而讀校驗模式中,在下位機接收到HEX數據后,并不只是反饋給上位機一個 “OK”,還需要將讀取到的OTP存儲器中的數據和HEX數據對比匹配后把結果返回給上位機。當二者一行的數據完全匹配時,下位機返回一個“OK”,而當二者數據有不匹配的位時,下位機會分別把讀取到的數據和HEX數據一同返回到上位機并打印至屏幕上。正如上文所述,一行數據為16Byte,最不匹配的情況為二者數據每一個Byte都不一致,這樣就需要打印16行數據到PC的屏幕上。雖然下位機完成接收HEX數據、讀取OTP存儲器中的數據和比較二者數據所需的時間很短,但是將16行數據打印到屏幕上的時間較長。因此在讀校驗模式中需要將當前進程掛起500 ms以等待下位機返回的數據全部都打印至屏幕上,而后再檢測返回的數據中是否包含“OK”,準備下一次的數據接收。由于篇幅所限而且此部分代碼基本上與寫文件模式的代碼相同在此就不列出讀校驗模式的主要代碼。

4 對OTP存儲器的讀寫測試

通過制定測試方案,對國內某反熔絲OTP存儲器件進行了編程測試,以驗證本上位機軟件的基本功能。

讀操作模式如圖2所示。在設定好起始地址與結束地址后,點擊“讀操作”按鈕,軟件將依次讀取出存儲芯片上每一位地址上所存儲的數據。

圖2 讀操作模式

寫文件模式接收數據如圖3所示。當加載好要燒錄的HEX數據文件之后,點擊“寫文件”按鈕,軟件將從下位機接收到若干個“OK”字符,以表示下位機接收HEX數據成功。此處選擇了燒錄10行HEX數據,因此軟件在一共接收到10個“OK”后顯示“programming!”,此時下位機正在對存儲芯片進行數據的燒錄。當燒錄完成后,下位機返回一個“done!”,提示用戶已完成HEX數據的燒錄操作。

圖3 寫文件模式

讀校驗模式如圖4所示。當加載好要校驗的HEX數據文件之后,點擊“讀檢驗”按鈕,軟件將接收到下位機對數據進行校驗之后的結果??梢钥闯?,當存儲器芯片一位地址存儲的數據和要校驗的HEX數據一致時,下位機返回一個“OK”。而當二者數據不匹配時,下位機剛會返回不匹配數據的地址以及該地址實際存儲的數據以及對應的HEX數據,并顯示“UNMATCH”。

圖4 讀校驗模式

5 結論

該上位機以C#語言編寫,與基于ARM的下位機燒錄器通過串口進行數據交換,再配合以特殊格式的HEX數據文件,可實現對OTP存儲器數據的讀取、燒錄與校驗操作。通過友好的可視化圖形用戶界面,該上位機軟件提供自動化、高效的數據讀寫方式。對國內某反熔絲OTP器件進行了讀寫測試,實際燒錄實驗表明,該上位機通過與下位機的串口通信可實現對反熔絲OTP器件的高效讀寫操作,并可根據預加載的HEX文件進行數據的校驗,顯示出與HEX文件中不匹配的數據,使OTP存儲器的測試工作變得更加簡單、便捷。

[1]王剛,李平,李威,等.反熔絲的研究與應用[J].材料導報,2011, 25(11):30-33.

[2]張頡夫.OTP存儲器編程與測試系統的設計技術研究[D].成都:電子科技大學,2012.

[3]張劍.OTP存儲器應用開發技術研究[D].成都:電子科技大學,2015.

[4]孫承松,張麗娟,李新.ONO反熔絲的研究[J].沈陽工業大學學報,2006,28(5):546-548.

[5]潘方.RS232串口通信在PC機與單片機通信中的應用[J].現代電子技術,2012,35(13):69-71.

[6]Jack.Purdum.C#3.0面向對象編程[M].葉雄兵,黃謙,譯.北京清華大學出版社,2009.

The design and implementation of the upper computer software of OTP memory's programmer based on C#

YAO Yuan1,TANG Ya-hua2
(1.School of Microelectronics and Solid-state Electronics,University of Electronic Science and Technology,Chengdu 610054,China;2.College of Optoelectronic Technology,Chengdu University of Information Technology,Chengdu 610225,China)

One Time Programmable OTP memory device data programming need special programmer,the reading and writing of data accessing requires specialized upper computer software to carry on the corresponding operation.For a domestic antifuse OTP memory device,this paper mainly introduces how to use C#language design a through the serial communication to achieve opt memory data read and write test software on the PC.Due to the necessary of OTP memory function test can be opt memory be burned the correct data.Therefore,how to use PC software to read the data through the serial port and PC connected to the high performance of the OTP memory becomes a subject of a matter of great concern to us.C#'s grammer is simple, code reusing is high,and it is easy to maintain,so the designed software is convenient for testing personnel to operate.In the PC and lower computer hardware platform based on the STM32 connection of actual testing experiments show that PC software written by C#quickly and accurately to the opt memory to read and write.

C#;serial communication;OTP memory;chip testing

TN302

A

1674-6236(2016)13-0030-04

2015-07-16稿件編號:201507118

姚 遠(1991—),男,山西晉中人,碩士。研究方向:大規模集成電路設計。

猜你喜歡
下位熔絲存儲器
熔絲制造的三維連續編織填充圖案
靜態隨機存儲器在軌自檢算法
2017款別克君越車蓄電池經常虧電
發射機房監控系統之下位機
任意2~k點存儲器結構傅里葉處理器
景洪電廠監控系統下位機數據傳輸網絡改造
圍觀黨“下位”,吐槽帝“登基”
CAN總線并發通信時下位機應用軟件設計
存儲器——安格爾(墨西哥)▲
別克君威車散熱風扇熔絲頻繁熔斷
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合