Wire網(wǎng)絡(luò)iButton設(shè)計(jì)論文
時間:2022-03-12 09:47:00
導(dǎo)語:Wire網(wǎng)絡(luò)iButton設(shè)計(jì)論文一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要本文在論述了iButton應(yīng)用現(xiàn)狀的基礎(chǔ)上,重點(diǎn)對基于1-wire網(wǎng)絡(luò)的ibutton軟件系統(tǒng)應(yīng)用進(jìn)行了研究,提出了系統(tǒng)設(shè)計(jì)思想,并給出了其數(shù)據(jù)處理流程和DS1991讀/寫算法,最后以Delphi為前臺界面開發(fā)工具,建立了一個基于iButton的應(yīng)用實(shí)例—酒店智能管理系統(tǒng)。為iButton的研究和應(yīng)用提供了一種方法和思路。
關(guān)鍵詞iButton,1-Wire,算法,設(shè)計(jì);
0引言
計(jì)算機(jī)技術(shù)的蓬勃發(fā)展,使基于條形碼、磁卡、IC卡等技術(shù)的數(shù)字識別系統(tǒng)逐漸取代了人工識別,并被廣泛應(yīng)用于金融、電信、商業(yè)等領(lǐng)域,深刻影響著人們的日常生活。但是由于條形碼、磁卡、IC卡等構(gòu)成的數(shù)字識別系統(tǒng)存在著攜帶不便、易受損壞、不能應(yīng)用于惡劣環(huán)境等不足。美國達(dá)拉斯半導(dǎo)體公司(DallasSemiconductorCorporation)推出的一種智能化信息載體iButton,較好地解決了數(shù)字識別系統(tǒng)存在的這些問題,為開發(fā)更加完善的新穎數(shù)字識別系統(tǒng)提供了技術(shù)支持和實(shí)現(xiàn)手段。
iButton(informationButton)意為“信息鈕扣”。它采用直徑17mm、厚3~6mm的鈕扣狀不銹鋼外殼封裝。內(nèi)部由I/O處理器和存儲器兩個基本部分組成,某些應(yīng)用于特殊場合的iButton還內(nèi)置有感溫等元器件。iButton以1-Wire規(guī)范作為通信協(xié)議,僅用1根數(shù)據(jù)線實(shí)現(xiàn)與外界的信息交換。DS1991是iButton的一種,它的內(nèi)部有1152位的密碼保護(hù)存儲器區(qū),512位的非密碼保護(hù)存儲器scratchpad。密碼保護(hù)存儲器被分為三個可獨(dú)立操作的密鑰子存儲器(subkey),每區(qū)為384位,每個密錢子區(qū)都有自己的64位密碼及64位的ID碼,對密鑰子區(qū)的讀/寫操作均需進(jìn)行密碼驗(yàn)證。三個區(qū)的數(shù)據(jù)可分別操作,互不干擾。非密碼保護(hù)存儲器區(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總線是一種簡單的信號電路,它僅用一根數(shù)據(jù)線即可與外界進(jìn)行信息交換。所有的1-Wire總線器件都具有一個共同的特征;無論是芯片內(nèi)還是iButton內(nèi),在出廠時每個器件都有一個與其它任何器件互不重復(fù)的固定的序列號。也就是說,每一個器件都是唯一的。一旦器件的序列號已知,通過這個序列號,任意一個器件都可以從眾多連到同一1-Wire總線的器件中被選出用于通信。
通信時,總線控制器先發(fā)出一個“復(fù)位”信號以使總線同步,然后選擇受制器件進(jìn)行隨后的通信。這可以通過選擇一個特定的受控器件(利用該設(shè)備的系列號進(jìn)行選擇)或者通過對半檢索法找到總線上的下一個受控器件來實(shí)現(xiàn),當(dāng)然,也可以選擇所有的受控器件。一旦一個特定的器件被選中,那么在總線控制器發(fā)出下一次“復(fù)位”信號之前,所有其它器件都被掛起而忽略隨后的通信。
主機(jī)能向用于總線通信的所有器件指令,對它(或者它們)進(jìn)行數(shù)據(jù)的讀寫。這是因?yàn)槊款惼骷\(yùn)行不同的函數(shù),有不同的用途,而且一旦器件被選定,它所用的協(xié)議也就固定下來。即使每類器件有不同的協(xié)議和特征,它們也都有著同樣的選擇過程。
1.2軟件開發(fā)工具
iButton-TMEXprofessionalSDKv3.10是Dallas公司提供的進(jìn)行應(yīng)用程序開發(fā)的軟件包,通過調(diào)用其TMEX-API函數(shù)可方便地開發(fā)iButton的應(yīng)用軟件。該軟件包適用于DOS、Win3.1、Win95/98、WinNT、WinCE等多種操作平臺,支持高級語言如VB、VC、DELPHI和匯編語言如8051、808x等多種編程環(huán)境。
SDK的主要包含:編程所需的動態(tài)鏈接庫(dll),TMEX-API函數(shù)的說明文檔,Demo程序及其說明文檔等。若在Win95/98操作系統(tǒng)下安裝該軟件包,會自動將IBFS32.DLL、IB97E32.DLL、IB97U32.DLL、IB10E32.DLL、DS1410D.SYS和UAAUTHD.UXD等文件寫入Windows的System目錄下,從而建立起調(diào)用TMEX-API函數(shù)進(jìn)行應(yīng)用程序開發(fā)的軟件環(huán)境。
TMEX-API函數(shù)分為會話、文件操作、傳輸、網(wǎng)絡(luò)和硬件等5個層次。會話層函數(shù)主要用于多任務(wù)環(huán)境下iButton與基于1-Wire協(xié)議的iButton網(wǎng)絡(luò)MicroLAN的連接;文件操作層函數(shù)用于文件讀/寫以及目錄增刪操作;傳輸層函數(shù)用于讀寫數(shù)據(jù)包操作;網(wǎng)絡(luò)層函數(shù)用于讀取及驗(yàn)證iButton的ID;硬件層函數(shù)用于對指定端口等特定的硬件操作。
1.3數(shù)據(jù)處理過程:
DS1991在1-Wire總線上的數(shù)據(jù)訪問命令流程如下所示:初始化→ROM功能命令→存儲器或SHA功能命令→處理/數(shù)據(jù)
(1)初始化
初次使用時,無法確定存儲在從機(jī)設(shè)備里的密碼,所以需要先對DS1991進(jìn)行初始化。初始化時對選定的子密鑰區(qū)利用WritePassword命令直接寫入新的識別碼和密碼(而不必通過暫存器),一旦新的識別碼和密碼存入從機(jī)設(shè)備里,再進(jìn)行修改時,就要通過暫存器。
(2)ROM功能命令
DS1991以1-Wire協(xié)議為基礎(chǔ)用一根數(shù)據(jù)線來傳輸數(shù)據(jù)??偩€上的主機(jī)必須首先發(fā)出四條ROM功能命令:1)ReadROM讀取(33H),2)MatchROM匹配(55H),3)SearchROM搜索(F0H),4)SkipROM跳過(CCH),這些命令可作用于DS1991的64位光刻注冊碼。一條ROM功能命令執(zhí)行完后,可實(shí)現(xiàn)作用在安全存儲器和暫存器上的存儲功能,總線上的主機(jī)會發(fā)出6條存儲器功能命令中的任意一條來檢測DS1991。DS1991有6個存儲器功能命令,分別是:寫暫存器(96H)、讀暫存器(69H)、復(fù)制暫存器(3CH)、寫密碼(5AH)、寫密鑰子區(qū)(99H)、讀密鑰子區(qū)(66H)。存儲器功能命令由三段組成:一為功能代碼,二為命令的起始地址和子密鑰的地址代碼,三為第二個字節(jié)的取反。
(3)存儲器或SHA功能命令
DS1991有6個特定的設(shè)備檢測命令,包括3個中間結(jié)果暫存器命令:WriteScratchpad、ReadScratchpad和CopyScratchpad;還有3個子密鑰命令:WritePassword、WriteSubkey和ReadSubkey。當(dāng)選中某個從機(jī)設(shè)備后,存儲器功能命令就會寫入DS1991中。這些命令由三段組成,每段長為一個字節(jié);第一個字節(jié)為功能代碼段,它定義了6個可執(zhí)行的命令;第二個字節(jié)是地址段,其中的前六位定義了命令的起始地址值,后兩位是子密鑰的地址代碼;命令的第三個字節(jié)是第二個字節(jié)的補(bǔ)碼。
(4)處理數(shù)據(jù):根據(jù)不同的應(yīng)用對讀出或?qū)懭氲臄?shù)據(jù)做相應(yīng)的處理。
1.4DS1991的讀寫算法
當(dāng)檢測到總線上掛接一個新的DS1991時,能夠直接獲得它的64位序列號,此序列號是進(jìn)行DS1991操作的唯一依據(jù),然后對它三個加密存儲區(qū)進(jìn)入讀寫操作,圖1所示即為對信息鈕扣DS1991讀、寫操作的算法流程。
2軟件設(shè)計(jì)
作為一種新穎的智能化信息載體,iButton信息紐扣采用接觸式存取方式的存儲器(TouchMemory,簡稱TM卡),以1-Wire規(guī)范作為通信協(xié)議,其外殼為信號址,用1根數(shù)據(jù)線按特定的時序要求由數(shù)據(jù)線逐位與外界交換數(shù)據(jù)。
iBUTTON常見的應(yīng)用有電子防盜門、單位考勤系統(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)建時,進(jìn)行初始化操作獲取端口號、端口類型及版本號等信息,并調(diào)用ReadTmCardNo函數(shù)讀取序列號并在窗體上顯示,如讀取失敗則彈出對話框詢問是否繼續(xù)讀取。
(2)密碼驗(yàn)證正確后,調(diào)用ReadDS1991Subkey實(shí)現(xiàn)讀加密區(qū)中的數(shù)據(jù)以實(shí)現(xiàn)查詢功能,其運(yùn)行界面如圖2所示。調(diào)用函數(shù)WriteDS1991Subkey將讀到的信息寫進(jìn)數(shù)據(jù)庫,以實(shí)現(xiàn)登記、刪除等功能,其運(yùn)行界面如圖3所示。
當(dāng)進(jìn)行讀操作時調(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表示對8個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)行寫操作的時候調(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é)束語
由于iButton采用獨(dú)特的機(jī)械外形設(shè)計(jì),具有IC卡、磁卡等信息載體無法比擬的優(yōu)勢,且采用了堅(jiān)固的MicroCan封裝,所以具有防塵、防潮、抗震等特性,特別是在惡劣的環(huán)境下,存儲于其中的數(shù)據(jù)信息具有相當(dāng)高的安全可靠性,所以現(xiàn)在大量應(yīng)用于野外數(shù)據(jù)存儲;但又因?yàn)槠潴w積小,便于攜帶,在日常生活中也大量使用基于iButton來實(shí)現(xiàn)信息管理,對于這類應(yīng)用完全可以采用本文的設(shè)計(jì)思想來實(shí)現(xiàn)。本文為iButton在管理系統(tǒng)中的應(yīng)用和研究提供了一種方法和思路,有一定的實(shí)用價值。
參考文獻(xiàn)
[1]崔建華,郭瑞軍.Delphi串口通信工程開發(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