Wire網(wǎng)絡(luò)iButton設(shè)計(jì)論文

時(shí)間:2022-03-12 09:47:00

導(dǎo)語(yǔ):Wire網(wǎng)絡(luò)iButton設(shè)計(jì)論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢(xún)客服老師,歡迎參考。

Wire網(wǎng)絡(luò)iButton設(shè)計(jì)論文

摘要本文在論述了iButton應(yīng)用現(xiàn)狀的基礎(chǔ)上,重點(diǎn)對(duì)基于1-wire網(wǎng)絡(luò)ibutton軟件系統(tǒng)應(yīng)用進(jìn)行了研究,提出了系統(tǒng)設(shè)計(jì)思想,并給出了其數(shù)據(jù)處理流程和DS1991讀/寫(xiě)算法,最后以Delphi為前臺(tái)界面開(kāi)發(fā)工具,建立了一個(gè)基于iButton的應(yīng)用實(shí)例—酒店智能管理系統(tǒng)。為iButton的研究和應(yīng)用提供了一種方法和思路。

關(guān)鍵詞iButton,1-Wire,算法,設(shè)計(jì);

0引言

計(jì)算機(jī)技術(shù)的蓬勃發(fā)展,使基于條形碼、磁卡、IC卡等技術(shù)的數(shù)字識(shí)別系統(tǒng)逐漸取代了人工識(shí)別,并被廣泛應(yīng)用于金融、電信、商業(yè)等領(lǐng)域,深刻影響著人們的日常生活。但是由于條形碼、磁卡、IC卡等構(gòu)成的數(shù)字識(shí)別系統(tǒng)存在著攜帶不便、易受損壞、不能應(yīng)用于惡劣環(huán)境等不足。美國(guó)達(dá)拉斯半導(dǎo)體公司(DallasSemiconductorCorporation)推出的一種智能化信息載體iButton,較好地解決了數(shù)字識(shí)別系統(tǒng)存在的這些問(wèn)題,為開(kāi)發(fā)更加完善的新穎數(shù)字識(shí)別系統(tǒng)提供了技術(shù)支持和實(shí)現(xiàn)手段。

iButton(informationButton)意為“信息鈕扣”。它采用直徑17mm、厚3~6mm的鈕扣狀不銹鋼外殼封裝。內(nèi)部由I/O處理器和存儲(chǔ)器兩個(gè)基本部分組成,某些應(yīng)用于特殊場(chǎng)合的iButton還內(nèi)置有感溫等元器件。iButton以1-Wire規(guī)范作為通信協(xié)議,僅用1根數(shù)據(jù)線實(shí)現(xiàn)與外界的信息交換。DS1991是iButton的一種,它的內(nèi)部有1152位的密碼保護(hù)存儲(chǔ)器區(qū),512位的非密碼保護(hù)存儲(chǔ)器scratchpad。密碼保護(hù)存儲(chǔ)器被分為三個(gè)可獨(dú)立操作的密鑰子存儲(chǔ)器(subkey),每區(qū)為384位,每個(gè)密錢(qián)子區(qū)都有自己的64位密碼及64位的ID碼,對(duì)密鑰子區(qū)的讀/寫(xiě)操作均需進(jìn)行密碼驗(yàn)證。三個(gè)區(qū)的數(shù)據(jù)可分別操作,互不干擾。非密碼保護(hù)存儲(chǔ)器區(qū)主要用于加密數(shù)據(jù)的拷貝,以保證數(shù)據(jù)的完整性。本文提出基于1-Wire網(wǎng)絡(luò)的iButton軟件系統(tǒng)的硬件組成、軟件設(shè)計(jì)思想和具體的應(yīng)用實(shí)例,為iButton的具體應(yīng)用提供了一種思路和方法。

1系統(tǒng)設(shè)計(jì)

1.1單總線系統(tǒng)結(jié)構(gòu)設(shè)計(jì)

1-Wire總線是一種簡(jiǎn)單的信號(hào)電路,它僅用一根數(shù)據(jù)線即可與外界進(jìn)行信息交換。所有的1-Wire總線器件都具有一個(gè)共同的特征;無(wú)論是芯片內(nèi)還是iButton內(nèi),在出廠時(shí)每個(gè)器件都有一個(gè)與其它任何器件互不重復(fù)的固定的序列號(hào)。也就是說(shuō),每一個(gè)器件都是唯一的。一旦器件的序列號(hào)已知,通過(guò)這個(gè)序列號(hào),任意一個(gè)器件都可以從眾多連到同一1-Wire總線的器件中被選出用于通信。

通信時(shí),總線控制器先發(fā)出一個(gè)“復(fù)位”信號(hào)以使總線同步,然后選擇受制器件進(jìn)行隨后的通信。這可以通過(guò)選擇一個(gè)特定的受控器件(利用該設(shè)備的系列號(hào)進(jìn)行選擇)或者通過(guò)對(duì)半檢索法找到總線上的下一個(gè)受控器件來(lái)實(shí)現(xiàn),當(dāng)然,也可以選擇所有的受控器件。一旦一個(gè)特定的器件被選中,那么在總線控制器發(fā)出下一次“復(fù)位”信號(hào)之前,所有其它器件都被掛起而忽略隨后的通信。

主機(jī)能向用于總線通信的所有器件指令,對(duì)它(或者它們)進(jìn)行數(shù)據(jù)的讀寫(xiě)。這是因?yàn)槊款?lèi)器件運(yùn)行不同的函數(shù),有不同的用途,而且一旦器件被選定,它所用的協(xié)議也就固定下來(lái)。即使每類(lèi)器件有不同的協(xié)議和特征,它們也都有著同樣的選擇過(guò)程。

1.2軟件開(kāi)發(fā)工具

iButton-TMEXprofessionalSDKv3.10是Dallas公司提供的進(jìn)行應(yīng)用程序開(kāi)發(fā)的軟件包,通過(guò)調(diào)用其TMEX-API函數(shù)可方便地開(kāi)發(fā)iButton的應(yīng)用軟件。該軟件包適用于DOS、Win3.1、Win95/98、WinNT、WinCE等多種操作平臺(tái),支持高級(jí)語(yǔ)言如VB、VC、DELPHI和匯編語(yǔ)言如8051、808x等多種編程環(huán)境。

SDK的主要包含:編程所需的動(dòng)態(tài)鏈接庫(kù)(dll),TMEX-API函數(shù)的說(shuō)明文檔,Demo程序及其說(shuō)明文檔等。若在Win95/98操作系統(tǒng)下安裝該軟件包,會(huì)自動(dòng)將IBFS32.DLL、IB97E32.DLL、IB97U32.DLL、IB10E32.DLL、DS1410D.SYS和UAAUTHD.UXD等文件寫(xiě)入Windows的System目錄下,從而建立起調(diào)用TMEX-API函數(shù)進(jìn)行應(yīng)用程序開(kāi)發(fā)的軟件環(huán)境。

TMEX-API函數(shù)分為會(huì)話、文件操作、傳輸、網(wǎng)絡(luò)和硬件等5個(gè)層次。會(huì)話層函數(shù)主要用于多任務(wù)環(huán)境下iButton與基于1-Wire協(xié)議的iButton網(wǎng)絡(luò)MicroLAN的連接;文件操作層函數(shù)用于文件讀/寫(xiě)以及目錄增刪操作;傳輸層函數(shù)用于讀寫(xiě)數(shù)據(jù)包操作;網(wǎng)絡(luò)層函數(shù)用于讀取及驗(yàn)證iButton的ID;硬件層函數(shù)用于對(duì)指定端口等特定的硬件操作。

1.3數(shù)據(jù)處理過(guò)程:

DS1991在1-Wire總線上的數(shù)據(jù)訪問(wèn)命令流程如下所示:初始化→ROM功能命令→存儲(chǔ)器或SHA功能命令→處理/數(shù)據(jù)

(1)初始化

初次使用時(shí),無(wú)法確定存儲(chǔ)在從機(jī)設(shè)備里的密碼,所以需要先對(duì)DS1991進(jìn)行初始化。初始化時(shí)對(duì)選定的子密鑰區(qū)利用WritePassword命令直接寫(xiě)入新的識(shí)別碼和密碼(而不必通過(guò)暫存器),一旦新的識(shí)別碼和密碼存入從機(jī)設(shè)備里,再進(jìn)行修改時(shí),就要通過(guò)暫存器。

(2)ROM功能命令

DS1991以1-Wire協(xié)議為基礎(chǔ)用一根數(shù)據(jù)線來(lái)傳輸數(shù)據(jù)??偩€上的主機(jī)必須首先發(fā)出四條ROM功能命令:1)ReadROM讀?。?3H),2)MatchROM匹配(55H),3)SearchROM搜索(F0H),4)SkipROM跳過(guò)(CCH),這些命令可作用于DS1991的64位光刻注冊(cè)碼。一條ROM功能命令執(zhí)行完后,可實(shí)現(xiàn)作用在安全存儲(chǔ)器和暫存器上的存儲(chǔ)功能,總線上的主機(jī)會(huì)發(fā)出6條存儲(chǔ)器功能命令中的任意一條來(lái)檢測(cè)DS1991。DS1991有6個(gè)存儲(chǔ)器功能命令,分別是:寫(xiě)暫存器(96H)、讀暫存器(69H)、復(fù)制暫存器(3CH)、寫(xiě)密碼(5AH)、寫(xiě)密鑰子區(qū)(99H)、讀密鑰子區(qū)(66H)。存儲(chǔ)器功能命令由三段組成:一為功能代碼,二為命令的起始地址和子密鑰的地址代碼,三為第二個(gè)字節(jié)的取反。

(3)存儲(chǔ)器或SHA功能命令

DS1991有6個(gè)特定的設(shè)備檢測(cè)命令,包括3個(gè)中間結(jié)果暫存器命令:WriteScratchpad、ReadScratchpad和CopyScratchpad;還有3個(gè)子密鑰命令:WritePassword、WriteSubkey和ReadSubkey。當(dāng)選中某個(gè)從機(jī)設(shè)備后,存儲(chǔ)器功能命令就會(huì)寫(xiě)入DS1991中。這些命令由三段組成,每段長(zhǎng)為一個(gè)字節(jié);第一個(gè)字節(jié)為功能代碼段,它定義了6個(gè)可執(zhí)行的命令;第二個(gè)字節(jié)是地址段,其中的前六位定義了命令的起始地址值,后兩位是子密鑰的地址代碼;命令的第三個(gè)字節(jié)是第二個(gè)字節(jié)的補(bǔ)碼。

(4)處理數(shù)據(jù):根據(jù)不同的應(yīng)用對(duì)讀出或?qū)懭氲臄?shù)據(jù)做相應(yīng)的處理。

1.4DS1991的讀寫(xiě)算法

當(dāng)檢測(cè)到總線上掛接一個(gè)新的DS1991時(shí),能夠直接獲得它的64位序列號(hào),此序列號(hào)是進(jìn)行DS1991操作的唯一依據(jù),然后對(duì)它三個(gè)加密存儲(chǔ)區(qū)進(jìn)入讀寫(xiě)操作,圖1所示即為對(duì)信息鈕扣DS1991讀、寫(xiě)操作的算法流程。

2軟件設(shè)計(jì)

作為一種新穎的智能化信息載體,iButton信息紐扣采用接觸式存取方式的存儲(chǔ)器(TouchMemory,簡(jiǎn)稱(chēng)TM卡),以1-Wire規(guī)范作為通信協(xié)議,其外殼為信號(hào)址,用1根數(shù)據(jù)線按特定的時(shí)序要求由數(shù)據(jù)線逐位與外界交換數(shù)據(jù)。

iBUTTON常見(jiàn)的應(yīng)用有電子防盜門(mén)、單位考勤系統(tǒng)、酒店智能管理系統(tǒng)、計(jì)算機(jī)軟件的硬件加密、電子防偽、暫住人口管理系統(tǒng)等。下面給出將微型計(jì)算機(jī)系統(tǒng)作為Master,利用Dallas公司提供的觸頭、串(并)口適配器等現(xiàn)成的外圍產(chǎn)品,加之iButton,用Delphi實(shí)現(xiàn)的酒店智能管理系統(tǒng):

(1)窗體創(chuàng)建時(shí),進(jìn)行初始化操作獲取端口號(hào)、端口類(lèi)型及版本號(hào)等信息,并調(diào)用ReadTmCardNo函數(shù)讀取序列號(hào)并在窗體上顯示,如讀取失敗則彈出對(duì)話框詢(xún)問(wèn)是否繼續(xù)讀取。

(2)密碼驗(yàn)證正確后,調(diào)用ReadDS1991Subkey實(shí)現(xiàn)讀加密區(qū)中的數(shù)據(jù)以實(shí)現(xiàn)查詢(xún)功能,其運(yùn)行界面如圖2所示。調(diào)用函數(shù)WriteDS1991Subkey將讀到的信息寫(xiě)進(jìn)數(shù)據(jù)庫(kù),以實(shí)現(xiàn)登記、刪除等功能,其運(yùn)行界面如圖3所示。

當(dāng)進(jìn)行讀操作時(shí)調(diào)用函數(shù)ReadDS1991Subkey,其代碼如下:

functionReadDS1991Subkey(varsubkey_buff:Arrayofbyte;keynum:

smallint):boolean;

var

tran_buf:Array[0..66]ofbyte;

tran_len,i,restvalue:smallint;

RetStr:array[0..200]ofchar;

k:smallint;

RetValue:SmallInt;

rom:array[0..7]ofsmallint;

begin

//accessthecurrentdevice

restvalue:=TMAccess(SHandle,@StateBuf);

if(restvalue=1)then

begin

result:=true;

//readsecuresubkeycommand*/

tran_buf[0{tran_len++}]:=$66;

//specifysubkeynumber/startingaddr*/

tran_buf[1{tran_len++}]:=((keynumshl6)or$10);

//confirmationofpreviousbytesent*/

tran_buf[2{tran_len++}]:=not((keynumshl6)or$10);

//readidfield*/

tran_len:=2;

fori:=0to7do

begin

tran_len:=tran_len+1;

tran_buf[tran_len{++}]:=$ff;//FF表示對(duì)8個(gè)ID字節(jié)的讀操作

end;

//sendpassword*/

fori:=0to7do

begin

tran_len:=tran_len+1;

tran_buf[tran_len{++}]:=subkey_buff[8+i];

end;

//readsecure.data*/

fori:=0to47do//29

begin

tran_len:=tran_len+1;

tran_buf[tran_len{++}]:=$ff;

end;

//transfertheblock*/

retvalue:=TMBlockStream(SHandle,@tran_buf,tran_len);

if(retvalue=tran_len)then

begin

//copytheresulttothereadsubkey*/

fori:=0to63do

begin

subkey_buff[i]:=tran_buf[tran_len-63+i];//45

end;

result:=TRUE;

end;

end

else

begin

result:=FALSE;

end;

end;

當(dāng)進(jìn)行寫(xiě)操作的時(shí)候調(diào)用函數(shù)WriteDS1991Subkey,其代碼如下:

functionWriteDS1991Subkey(subkey_buff:Arrayofbyte;keynum:smallint):boolean;

var

tran_buf:Array[0..100]ofbyte;

tran_len,i,retvalue:smallint;

RetStr:array[0..200]ofchar;

begin

{ReadtheversionsoftheTMEXdrivers}

{Get_Version(@RetStr);

TMGetTypeVersion(PortType,@RetStr);}

//accessthecurrentdevice

retvalue:=TMAccess(SHandle,@StateBuf);

if(retvalue=1)then

begin

//writesecuresubkeycommand*/

tran_buf[0{tran_len++}]:=$99;

//specifysubkeynumber/startingaddr*/

tran_buf[1{tran_len++}]:=((keynumshl6)or$10);

//confirmationofpreviousbytesent*/

tran_buf[2{tran_len++}]:=not((keynumshl6)or$10);

//idfieldvalueforwrite*/

tran_len:=2;

fori:=0to7do

begin

tran_len:=tran_len+1;

tran_buf[tran_len{++}]:=ubkey_buff[i];

end;

//sendpassword*/

fori:=0to7do

begin

tran_len:=tran_len+1;

tran_buf[tran_len{++}]:=subkey_buff[8+i];

end;

//secure.dataforwrite*/

fori:=0tolength(subkey_buff)-1do

begin

tran_len:=tran_len+1;

tran_buf[tran_len{++}]:=subkey_buff[16+i];

end;

//transfertheblock*/

retvalue:=TMBlockStream(SHandle,@tran_buf,tran_len+1);

if(retvalue=(tran_len+1))then

begin

TMEndSession(SHandle);

result:=TRUE;

end;

end

else

begin

TMEndSession(SHandle);

result:=FALSE;

end;

end;

圖2

圖3

3結(jié)束語(yǔ)

由于iButton采用獨(dú)特的機(jī)械外形設(shè)計(jì),具有IC卡、磁卡等信息載體無(wú)法比擬的優(yōu)勢(shì),且采用了堅(jiān)固的MicroCan封裝,所以具有防塵、防潮、抗震等特性,特別是在惡劣的環(huán)境下,存儲(chǔ)于其中的數(shù)據(jù)信息具有相當(dāng)高的安全可靠性,所以現(xiàn)在大量應(yīng)用于野外數(shù)據(jù)存儲(chǔ);但又因?yàn)槠潴w積小,便于攜帶,在日常生活中也大量使用基于iButton來(lái)實(shí)現(xiàn)信息管理,對(duì)于這類(lèi)應(yīng)用完全可以采用本文的設(shè)計(jì)思想來(lái)實(shí)現(xiàn)。本文為iButton在管理系統(tǒng)中的應(yīng)用和研究提供了一種方法和思路,有一定的實(shí)用價(jià)值。

參考文獻(xiàn)

[1]崔建華,郭瑞軍.Delphi串口通信工程開(kāi)發(fā)實(shí)例導(dǎo)航.北京:人民郵電出版社,2003。

[2]王永紅,凌志浩.智能信息載體iButton及其應(yīng)用.單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2001(4):8~11

[3]翁瑞琴,宋真君,王永紅,凌志浩.LonWorks總線PC智能網(wǎng)卡的研制.華東理工大學(xué)學(xué)報(bào),2060(5):564~567