摘? 要: 介紹了利用互聯(lián)網(wǎng)技術(shù)及其TCP/IP協(xié)議研制開發(fā)的遠(yuǎn)程在系統(tǒng)編程工具。使用該工具可對用PLD器件設(shè)計(jì)的電子系統(tǒng)、設(shè)備,、消費(fèi)產(chǎn)品進(jìn)行遠(yuǎn)程監(jiān)控、調(diào)試或升級,。該工具可供電子產(chǎn)品的研制生產(chǎn)商使用,也可供開設(shè)遠(yuǎn)程數(shù)字邏輯電路課程、數(shù)字系統(tǒng)設(shè)計(jì)課程的學(xué)校使用。
關(guān)鍵詞: PLD? 遠(yuǎn)程isp? 互聯(lián)網(wǎng)? TCP/IP
?
1 問題的提出
自二十世紀(jì)80年代以來,,可編程邏輯器件(PLD)技術(shù)發(fā)展非常迅速,。由于PLD是作為一種通用器件生產(chǎn)的,,而它的邏輯功能是由用戶通過對器件編程實(shí)現(xiàn)的,隨著PLD的集成度越來越高,,速度越來越快,,設(shè)計(jì)越來越方便靈活,因而日益成為專用集成電路ASIC設(shè)計(jì)的主流方法。特別是二十世紀(jì)90年代新一代在系統(tǒng)編程技術(shù)isp的推出,,取消了專用編程設(shè)備,,器件本身也不必從系統(tǒng)電路板上取下,便可以使用硬件描述語言和電路圖方法在系統(tǒng)內(nèi)編程,。這一創(chuàng)舉使現(xiàn)代電子系統(tǒng)設(shè)計(jì)的方法前進(jìn)了一大步,,設(shè)計(jì)周期大大縮短,效率大為提高,,并且十分有利于產(chǎn)品的升級和更新?lián)Q代,。
一個數(shù)字系統(tǒng)的自動設(shè)計(jì)流程,可以分為四個階段,。首先是對系統(tǒng)的功能進(jìn)行分析,,利用原理圖或硬件描述語言表達(dá)設(shè)計(jì)者的意圖;第二是步利用仿真工具對設(shè)計(jì)者的想法進(jìn)行測試仿真,以便發(fā)現(xiàn)設(shè)計(jì)中的缺陷和錯誤;第三步是將前兩步生成的文件進(jìn)行編譯并和具體器件相適配,,生成具體芯片的融絲圖文件;最后一步就是將融絲圖文件通過編程電纜下載到包含有PLD的設(shè)備中,,從而實(shí)現(xiàn)一個物理的數(shù)字系統(tǒng),如圖1(a)所示,。在這四個階段中,,前三步都可以在計(jì)算機(jī)上使用不同軟件工具實(shí)現(xiàn),而最后一步必須和具體的設(shè)備進(jìn)行連接,,這意味著需要設(shè)計(jì)者親臨現(xiàn)場操作,。設(shè)想如果產(chǎn)品發(fā)往外地,或是遠(yuǎn)涉重洋出口海外,,就需要生成一個龐大的全球性售后服務(wù)網(wǎng)絡(luò)對產(chǎn)品跟蹤或更新,,這對中小企業(yè)來說根本不可想象。如何解決這個問題呢?我們想到了無所不能的互聯(lián)網(wǎng),。既然中小企業(yè)的原材料供應(yīng),、成品銷售等可以受益于互聯(lián)網(wǎng),那么他們的技術(shù)性服務(wù)為什么不可以通過互聯(lián)網(wǎng)進(jìn)行呢?為此,,我們利用互聯(lián)網(wǎng)及其TCP/IP協(xié)議開發(fā)研制了一個遠(yuǎn)程在系統(tǒng)編程工具,,使工程技術(shù)人員足不出戶就可以對他們利用PLD研制生產(chǎn)的遠(yuǎn)在千里之外的電子系統(tǒng)、電子設(shè)備進(jìn)行升級和維護(hù),,如圖1(b)所示,。
?
?
2 系統(tǒng)結(jié)構(gòu)
本工具采用了客戶服務(wù)器模式,由兩個部分組成,。一個在用戶計(jì)算機(jī)上執(zhí)行,,稱之為用戶端;另一個在設(shè)計(jì)者計(jì)算機(jī)上運(yùn)行,稱之為設(shè)計(jì)端,。軟件編制使用C++語言,,在C Builder環(huán)境下設(shè)計(jì),。程序中使用C Builder中提供的網(wǎng)絡(luò)通信控件,實(shí)現(xiàn)客戶和服務(wù)器之間的通信,。本工具程序框圖見圖2,。
?
?
首先由用戶端將設(shè)備和計(jì)算機(jī)通過下載電纜(使用并行口)連接在一起,并啟動計(jì)算機(jī)運(yùn)行用戶端程序,。用戶要做的就是這些,,這些操作不需要任何專業(yè)知識。用戶端程序也不需要什么配置,,只要它自動掃描并發(fā)現(xiàn)接有設(shè)備的端口,,并對之操作即可。
用戶端程序一旦運(yùn)行,,設(shè)計(jì)端程序就可以啟動,。設(shè)計(jì)端首先輸入用戶端的IP地址,輸入不同的IP地址,,就可以對不同的用戶端設(shè)備進(jìn)行操作,。然后調(diào)入設(shè)計(jì)好的融絲圖文件,對文件的格式進(jìn)行檢查,,顯示文件中的信息,。文件中的信息指示該文件對哪些芯片編程,以及它們在設(shè)備中的排列順序,。
檢查正確后,,就可以進(jìn)行網(wǎng)絡(luò)連接,并把文件內(nèi)容發(fā)送給用戶端,。在用戶端將融絲圖下載到PLD芯片的過程中,,用戶端應(yīng)用程序回送下載進(jìn)度給設(shè)計(jì)端,設(shè)計(jì)端就可以顯示下載進(jìn)度,。如果一切正常,,下載完畢后就關(guān)閉連接,結(jié)束通信,。
3 技術(shù)實(shí)現(xiàn)
3.1 設(shè)計(jì)端
設(shè)計(jì)端界面為一窗體,,窗體上有一個命令菜單、一個編輯控制(輸入或顯示打開的文件路徑和文件名),、一個組合框(讓用戶選擇下載模式),、兩個顯示下載進(jìn)度和文件信息的備注控件,還有一個用于通信的客戶端套接字控件,。
設(shè)置IP地址,,點(diǎn)擊“命令/設(shè)置”時(shí)會顯示一個模式對話框。用戶可以在 “IP地址”編輯控制中輸入用戶端的IP地址,,按“確定”該值將賦給客戶端套接字控件的屬性“Address”,,進(jìn)行網(wǎng)絡(luò)連接時(shí),將與擁有該IP地址的主機(jī)通信,。在 “端口”編輯控制中輸入用戶端下載服務(wù)的TCP端口號,,按“確定”將該值賦給套接字控件的屬性“Port”,進(jìn)行網(wǎng)絡(luò)連接時(shí),,將與指定主機(jī)的服務(wù)端口通信,。
下載文件,直接在編輯控制中輸入文件名或點(diǎn)擊“打開文件”,,通過對話框得到下載文件的路徑,。每次選擇一個isp文件, 所謂isp文件,,是將標(biāo)準(zhǔn)的融絲圖JED文件采用一定的壓縮算法生成的,。它比標(biāo)準(zhǔn)的JED文件要小,這樣下載時(shí)速度要快些,。為了能夠下載成功,,要對文件格式和內(nèi)容進(jìn)行檢查。檢查依據(jù)的是isp文件的頭格式,,包括文件類型,、芯片鏈中芯片的個數(shù)、擦除脈沖寬度,、編程脈沖寬度,、編程行數(shù)、每行長度,、芯片ID列表等,。文件的第一個字節(jié)只要是(0xF8, 0x0B,, 0x0F,,0x0A)中的一個,則該文件就是isp文件,,不同數(shù)值分別代表不同類型的芯片和壓縮類型,。
下載模式,文件選定后,,必須選擇下載模式,。共設(shè)四種模式:編程并校驗(yàn)、僅校驗(yàn),、僅校驗(yàn)UES,、校驗(yàn)并顯示UES。其中UES是指存放在芯片中的用戶自定義信息,,根據(jù)需要可以是設(shè)備的序列號或設(shè)備的唯一標(biāo)識等信息,,而與芯片的功能沒有關(guān)系,。
編程并校驗(yàn),是指將文件內(nèi)容下載到芯片中,,并在下載過程中從芯片讀出下載內(nèi)容,,檢驗(yàn)是否下載正確。
僅校驗(yàn),,是指讀出芯片中的內(nèi)容,,并與文件內(nèi)容進(jìn)行比較,檢驗(yàn)兩者是否一致,。
僅校驗(yàn)UES,,是指檢驗(yàn)文件中的UES信息與芯片中的是否一致。
校驗(yàn)并顯示UES,,是指把文件中的UES信息與芯片中的UES內(nèi)容進(jìn)行比較,,檢驗(yàn)兩者是否一致。若一致,,則顯示UES內(nèi)容,,否則提示校驗(yàn)錯誤。
下載模式選定后,,就可以進(jìn)行網(wǎng)絡(luò)連接了,。選擇菜單“命令連接”,調(diào)用網(wǎng)絡(luò)連接的代碼,。一旦連接成功,,系統(tǒng)會發(fā)連接成功“CONNECTED”消息。收到此消息后,,程序會在此連接上發(fā)送一個雙字,。若該值為1,則表示將發(fā)送一個文件,,否則表示雙方可以用鍵盤進(jìn)行對話,。如果沒有選擇下載文件,將自動進(jìn)入對話狀態(tài),。若是對話狀態(tài),,雙方可在窗體右邊的備注控件中輸入對話內(nèi)容,按回車鍵就會發(fā)送輸入內(nèi)容,。若是下載狀態(tài),,緊接著會發(fā)送一個雙字,表示下載模式,。然后會再發(fā)送一個雙字,,表示文件的長度,最后發(fā)送整個文件內(nèi)容。
用戶端收到全部內(nèi)容后,,開始下載,。下載過程中用戶端把下載進(jìn)度發(fā)送給設(shè)計(jì)端,設(shè)計(jì)端收到后,,將顯示收到的內(nèi)容,。這樣,設(shè)計(jì)者就會看到下載進(jìn)度,。
下載結(jié)束后,,自動進(jìn)入對話狀態(tài),。如果用戶端有人,,雙方可以進(jìn)行簡短對話,討論一些技術(shù)問題,。
運(yùn)行“命令斷開”,,則關(guān)斷網(wǎng)絡(luò)連接,結(jié)束本次下
載過程,。新的下載過程只要重新運(yùn)行“命令連接”即可,。
3.2 用戶端
用戶端窗體上有一個進(jìn)度條(顯示下載進(jìn)度)和兩個備注控件(顯示當(dāng)前用戶的工作狀態(tài),以及交談時(shí)的輸入輸出),。用戶端需要完成的功能比設(shè)計(jì)端復(fù)雜,。主要有數(shù)據(jù)的接收、設(shè)備的自動識別,、具體的下載過程等,。
程序運(yùn)行后,在收到窗體創(chuàng)建消息時(shí),,將激活服務(wù)器套接字,,并和TCP端口綁定,等待設(shè)計(jì)端進(jìn)程的連接,。
只要運(yùn)行設(shè)計(jì)端“命令連接”,,就會在用戶端產(chǎn)生網(wǎng)絡(luò)連接的消息。連接成功后,,與設(shè)計(jì)端對應(yīng),,收到的第一個雙字,代表本次連接是下載狀態(tài)還是對話狀態(tài),。若是1,,則為下載,否則進(jìn)入對話狀態(tài),。若是對話狀態(tài),,直接在備注控件中輸入對話內(nèi)容,按回車鍵即可,。對方的談話會在另一個備注控件中顯示出來,。
若是下載文件(這是最常用的狀態(tài)),,緊接著會收到一個雙字,代表下載模式(具體含義見前),。然后會再收到一個雙字,,代表將要下載的文件長度。若該值小于等于零,,或等于0Xffffffff(計(jì)算機(jī)中的-1),,則提示發(fā)送方有錯,并關(guān)閉本次連接,,否則將會接收全部文件內(nèi)容,。文件的結(jié)束是靠文件長度與收到字節(jié)數(shù)進(jìn)行比較,相等表示全部收到,。全部收到后,,即進(jìn)行下載。
編程電纜,,下載過程與硬件密切相關(guān),,我們使用編程電纜(共8根線,使用其中的7根)與并行口連接,。每個并行口有三個端口:數(shù)據(jù),、狀態(tài)、控制端口,,每個端口占一個字節(jié),。具體定義如下:
在電纜內(nèi)部將并行口的8腳與12腳直接連接,用于檢測電纜是否已插到并行口上,。向數(shù)據(jù)端口的第6位寫數(shù)據(jù),,再從狀態(tài)端口第5位讀入數(shù)據(jù),比較兩者是否一致,,即可得知下載電纜是否連接,。圖3給出了編程電纜及接插件的端口定義。
其它信號的含義及作用如下:
out_SDI??? 將isp數(shù)據(jù)從此腳串行輸出到芯片上;
out_SCLK? 控制下載過程的時(shí)鐘信號;
out_MODE 將isp命令從此腳串行輸出到芯片上;
out_ISP??? 控制芯片在正常工作模式和編程模式之間切換;
in_SDO??? 從芯片上串行讀出isp數(shù)據(jù);
in_VCC_OK 用于檢測設(shè)備電源是否打開,。
?
?
下載的流程圖見圖4,。下載開始首先掃描三個并行口端口。利用信號in_CABLE_SENSE_IN和in_VCC_OK檢測設(shè)備是否和計(jì)算機(jī)連接以及電源是否打開,,兩個信號同時(shí)有,,則表示該端口連接有設(shè)備。如果找不到設(shè)備,,就給出提示并中斷這次下載過程,。再檢查文件的類型,看設(shè)計(jì)端發(fā)送來的文件是否為合法的isp文件。否則給出提示并中斷這次下載過程,。若合法,,則接著讀出被編程芯片的編程、擦除時(shí)間以及編程行數(shù)等信息,。其中編程和擦除時(shí)間的控制,,是利用多媒體定時(shí)器實(shí)現(xiàn)的,可以實(shí)現(xiàn)準(zhǔn)確的脈沖延遲,,保證擦除,、編程的可靠性。隨后從芯片中讀出該設(shè)備中含有的芯片ID列表(ID列表與芯片型號有關(guān)),,并與設(shè)計(jì)端的值進(jìn)行比較,。若一致可以繼續(xù)下載;否則給出提示并中斷本次下載過程。因?yàn)樾酒斜聿灰恢?,將?dǎo)致設(shè)備根本不能工作,。
?
?
下載時(shí),,通過out_SDI端將數(shù)據(jù)一個比特一個比特地串行輸出到芯片中,,并從SDO端讀出剛寫入芯片的數(shù)據(jù),與文件中應(yīng)寫入的數(shù)據(jù)進(jìn)行比較校驗(yàn),,以保證數(shù)據(jù)準(zhǔn)確地寫入到芯片中,。
4 出錯處理
錯誤的處理是軟件設(shè)計(jì)中十分重要的一個方面,本軟件同樣充分考慮各種意外和錯誤,,使得錯誤的影響得到很好控制,。本軟件中最主要的出錯處理就是對網(wǎng)絡(luò)錯誤的處理,如設(shè)計(jì)端用戶輸入的IP地址或端口號不正確等,。
C Builder中的網(wǎng)絡(luò)控件提供了出錯的消息,,對于因網(wǎng)絡(luò)連接、連接中斷或網(wǎng)絡(luò)超時(shí)等引起的問題,,該消息都會被觸發(fā),。消息被觸發(fā)時(shí),在消息處理函數(shù)中將一些變量重新初始化,,并關(guān)斷網(wǎng)絡(luò)連接,。值得一提的是,因計(jì)算機(jī)IP地址的設(shè)置而產(chǎn)生的網(wǎng)絡(luò)錯誤消息將不會發(fā)給控件,,例如:計(jì)算機(jī)的子網(wǎng)掩碼為255.255.255.0,,本機(jī)地址為202.195.168.1,不設(shè)置網(wǎng)關(guān),。在這樣的配置下,,如果與IP地址為202.195.200.1的主機(jī)進(jìn)行連接,將會產(chǎn)生網(wǎng)絡(luò)錯誤“子網(wǎng)不可到達(dá)”,而控件卻收不到這個消息,。此時(shí)必須調(diào)用SetErrorProc,,指定自己定義的網(wǎng)絡(luò)意外處理過程來替代默認(rèn)過程。新過程將捕獲所有網(wǎng)絡(luò)意外,,從而避免該消息的遺漏,。
另外對下載過程中出現(xiàn)的各種不正常情況都做了檢測,例如:下載電纜沒有連接,、設(shè)備電源沒有打開,、器件列表不符和校驗(yàn)錯誤等。當(dāng)檢測到這些錯誤時(shí),,由于用戶端無人值守,,因此將錯誤信息回送設(shè)計(jì)端,并用適當(dāng)?shù)男问斤@示給設(shè)計(jì)者,,以便設(shè)計(jì)人員做進(jìn)一步處理,。
5 應(yīng)用范圍及前景
該工具可供所有使用PLD器件進(jìn)行設(shè)計(jì)和開發(fā)電子產(chǎn)品及系統(tǒng)設(shè)備的公司或廠家使用。對于他們拓展業(yè)務(wù)范圍,、提升產(chǎn)品價(jià)值,、增加產(chǎn)品的信息技術(shù)含量、降低生產(chǎn)成本,、爭取更多用戶,、以信息化帶動工業(yè)化等都具有深刻意義。
該工具也可供開設(shè)數(shù)字邏輯電路和數(shù)字系統(tǒng)設(shè)計(jì)課程的相關(guān)學(xué)校使用,,為教師在局域網(wǎng)上指導(dǎo)和批改學(xué)生的實(shí)驗(yàn)提供了方便,,并可以把學(xué)生從都做同樣的單一實(shí)驗(yàn)這種傳統(tǒng)模式中解放出來,有利于針對不同學(xué)生給出不同要求,,同時(shí)也降低了教學(xué)成本,。特別對遠(yuǎn)程教學(xué)而言,該工具為一直困擾工科院校的網(wǎng)上教學(xué)等問題提供了一種具有開拓意義的方法,。隨著信息技術(shù)的進(jìn)一步發(fā)展,,我們相信類似的應(yīng)用將成為互聯(lián)網(wǎng)應(yīng)用的一個新領(lǐng)域。
?
參考文獻(xiàn)
1 劉篤仁.在系統(tǒng)可編程技術(shù)及其器件原理與應(yīng)用.西安:電子科技大學(xué)出版社,, 1999.5
2 黃正瑾.在系統(tǒng)編程技術(shù)及其應(yīng)用.南京:東南大學(xué)出版社,, 1999.5