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