劉瓊
(湖南工業(yè)職業(yè)技術(shù)學(xué)院,湖南長沙 410082)
DS2433在即插即用設(shè)備部件認證中的應(yīng)用研究與仿真
劉瓊
(湖南工業(yè)職業(yè)技術(shù)學(xué)院,湖南長沙 410082)
即插即用設(shè)備部件的關(guān)鍵技術(shù)是身份識別,利用DS2433器件能讓設(shè)備部件實現(xiàn)身份識別和自我描述。文中介紹了DS2433的結(jié)構(gòu)、存儲器功能命令,利用二叉樹路徑搜索算法設(shè)計了1-Wire總線上所插接的多個DS2433在部件即插即用中質(zhì)詢與響應(yīng)認證過程,并通過一個具體的Proteus仿真實例,驗證了系統(tǒng)的可行性和穩(wěn)定性。
DS2433;即插即用;二叉樹;認證
在競爭激烈的嵌入式電子設(shè)備市場上必須解決的問題是確保原設(shè)備部件的質(zhì)量,防止產(chǎn)品被非法復(fù)制,這些因素均是一個設(shè)備或系統(tǒng)成功與否的關(guān)鍵。設(shè)備上眾多部件的硬件和軟件知識產(chǎn)權(quán)的安全管理,是實現(xiàn)這個關(guān)鍵的唯一途徑。因此,設(shè)備部件身份識別在系統(tǒng)中至關(guān)重要。設(shè)備的主機要能夠識別各個重要部件,并能實時檢測到新插入的部件,實時獲取其合法身份信息,并在存儲器中添加該部件的記錄。
DS2433是一款基于1-Wire總線的4096位EEPROM,具有3引腳PR-35小體積封裝形式或8引腳SOIC封裝,能安裝到印制電路板上或進行引線,其典型應(yīng)用包括:存儲校準(zhǔn)系數(shù)、電路板標(biāo)識認證以及產(chǎn)品升級狀態(tài)等,很適合運用到即插即用系統(tǒng)中。它除了具有一般1-Wire器件的特性外,還有一些特殊的結(jié)構(gòu)和要求。
DS2433內(nèi)部結(jié)構(gòu)如圖1所示。?DS2433帶有一個由工廠光刻的注冊碼,其中包括:48位唯一序列碼、8位CRC校驗碼和8位家族碼(23h)。它的4096位EEPROM分為16頁,每頁256位。它的256位暫存器作為一個附加頁面,在寫存儲器時可用作緩沖器使用。數(shù)據(jù)先被寫入暫存器中,在此對其進行校驗。隨后采用復(fù)制暫存器命令將數(shù)據(jù)傳送到EEPROM中。64位注冊碼為每個器件提供了一個保證唯一的認證標(biāo)識,確保每個器件的絕對可追溯性,當(dāng)有多個DS2433同時掛接在1-Wire總線上并形成本地網(wǎng)絡(luò)時,可作為設(shè)備部件的節(jié)點地址使用。數(shù)據(jù)按照1-Wire協(xié)議串行傳送,僅需一條數(shù)據(jù)線和一條地線。
圖1 DS2433內(nèi)部結(jié)構(gòu)圖
3.1 Write Scratchpad[0Fh]寫暫存器
Write Scratchpad命令適用于數(shù)據(jù)存儲器和寄存器頁中的可寫地址。為了保證暫存器中的數(shù)據(jù)能夠被正確復(fù)制到存儲器陣列中,用戶必須保證寫暫存器命令中的32個數(shù)據(jù)字節(jié)開始于一個有效行邊界處,發(fā)出Write Scratchpad命令后,主機(微控制器)必須首先發(fā)送2個字節(jié)的目標(biāo)地址,接著發(fā)送要寫入暫存器的數(shù)據(jù)。
3.2 Read Scratchpad[AAh]讀暫存器
Read Scratchpad命令可以用來校驗?zāi)繕?biāo)地址和暫存器數(shù)據(jù)的完整性。主機發(fā)送命令代碼后開始讀取數(shù)據(jù)。開頭的兩個字節(jié)是目標(biāo)地址,下一個字節(jié)是結(jié)束偏移量/數(shù)據(jù)狀態(tài)字節(jié),接著是暫存器數(shù)據(jù)。
3.3 Copy Scratchpad[55h]復(fù)制暫存器
Copy Scratchpad命令用來將暫存器中的數(shù)據(jù)復(fù)制到EEPROM,發(fā)出Copy Scratchpad命令后,主機必須提供一個3字節(jié)的授權(quán)模式,該數(shù)據(jù)應(yīng)該通過緊鄰此條命令的前一個Read Scratchpad命令獲得。該3字節(jié)模式數(shù)據(jù)必須與三個地址寄存器(依次為TA1,TA2,E/S)中的數(shù)據(jù)正確匹配。
3.4 Read Memory[F0h]讀存儲器
Read Memory命令通常用于從DS2433讀取數(shù)據(jù)。發(fā)出命令后,主機需要提供2個字節(jié)的目標(biāo)地址。在這兩個字節(jié)之后,主機開始讀取始于目標(biāo)地址的數(shù)據(jù)。
DS2433的基本操作流程:初始化→ROM功能命令→存儲器功能命令→數(shù)據(jù)傳輸。與一般的1-Wire器件類似,所有數(shù)據(jù)處理均從初始化開始,數(shù)據(jù)傳輸都是從低位開始。初始化過程由主機發(fā)送的復(fù)位脈沖和DS2433發(fā)送的在線應(yīng)答脈沖組成。應(yīng)答脈沖用于通知主機,DS2433已掛接在總線上,并已準(zhǔn)備就緒。一旦主機檢測到在線應(yīng)答脈沖,就可以發(fā)出四條常用ROM功能命令中的一個。所有ROM功能命令的字長均是8位,表1是這些ROM命令的簡要介紹。
表1 DS2433的ROM常用操作命令
5.1 搜索操作的基本信息
1-Wire總線器件的64位ROM注冊碼由8位CRC校驗碼、48位序列號、8位家族代碼構(gòu)成,這64位注冊碼分布于一棵二叉樹同根節(jié)點到某個葉子節(jié)點的64條邊上,樹中每一節(jié)點的左分支對應(yīng)編碼0,右分支對應(yīng)編碼1。搜索總線上所有ROM編碼的過程就是按某種算法遍歷該二叉樹由根節(jié)點到所有葉子節(jié)點的所有“路徑”的過程。
按照1-Wire總線的特性,總線上的從機之間為“線與”的關(guān)系。當(dāng)主機發(fā)出搜索命令后,所有從機同時發(fā)送自身ROM注冊碼中的最低有效位(即家族代碼最低位),結(jié)果相當(dāng)于全部最低有效位的邏輯與;主機讀入從機發(fā)送的第n位數(shù)據(jù)的原碼后,再啟動下一位操作,接著從機發(fā)送第n位數(shù)據(jù)的取反值,主機再讀入第n位數(shù)據(jù)的取反值;從兩次讀入的情況可以對ROM注冊碼的第n位做出判斷,如表2所示。
表2 ROM編碼第i位的判斷情況
搜索過程中,主機必須向總線上的從機發(fā)回一個指定位a;如果從機ROM注冊碼的當(dāng)前位的值與a匹配,則繼續(xù)參與搜索過程;若從機器件的當(dāng)前位與之不匹配,則該器件轉(zhuǎn)換到等待狀態(tài),并保持等待狀態(tài)直到下一個1-Wire復(fù)位信號到來。其余63位ROM碼的搜索依然按照上述“讀入兩位,寫出一位”的模式進行重復(fù)操作。按照這種搜索算法進行下去,最終除了一個從機器件外所有從機將進入等待狀態(tài),經(jīng)過最后一輪檢測,就可得到最后保留(未進入等待狀態(tài))器件的ROM注冊碼。在后續(xù)搜索過程中選用不同的路徑來查找另外器件的ROM注冊碼。
5.2 基于二叉樹路徑搜索的ROM編碼搜索算法
圖2給出了參照二叉樹路徑搜索一條1-Wire總線所有器件64位的ROM注冊碼的流程,搜索過程選擇“左子樹優(yōu)先”。下面結(jié)合表2討論搜索算法的實現(xiàn)細節(jié),搜索到的注冊碼保存于ROMCODE數(shù)組。
由表2可知,搜索過程中將遇到四種不同的2位組合,下面逐一進行討論研究:
①“11”表明總線上無從機,主機執(zhí)行下面的指令后直接返回:if(bit_1==1&&bit_2==1)return 1。
②“01”表明未被屏蔽器件的ROM注冊碼當(dāng)前位均為0,這些器件余下的注冊碼位全部分布于左分支路徑(即左子樹),故置ROMCODE[n]=0,隨后主機向總線寫0,使為0的從機繼續(xù)通信,搜索左子樹,并屏蔽為1的從機。
③“10”表明未被屏蔽器件的ROM注冊碼當(dāng)前位均為1,這些器件余下的編碼位全部分布于右分支路徑(即右子樹),故置ROMCODE[n]=1,隨后主機向總線寫1,使為1的從機繼續(xù)通信,搜索右子樹,并屏蔽為0的從機。
上述“01”和“10”組合情況處理的示意性代碼如下:if (bit_1!=bit_2){ROMCODE[n]=bit_1;Write_DQ(bit_1);}
④“00”表明未被屏蔽器件的ROM注冊碼當(dāng)前位有0和1,是最為復(fù)雜的一種情況,因為當(dāng)前位出現(xiàn)搜索分支,其左子樹與右子樹均存在。第一次搜索從器件的注冊碼時,如果左子樹和右子樹都存在,則需要記錄該分叉結(jié)點的深度,并沿左子樹的方向向下搜索。當(dāng)搜索深度達到64時,獲得一個從器件的注冊碼,并取出該搜索路徑最后的分叉結(jié)點的深度,然后主機執(zhí)行第二次搜索過程。在該搜索過程中,如果結(jié)點的深度值大于最后一個分叉結(jié)點的深度,按照“左子樹優(yōu)先”的原則,可認為當(dāng)前位為0,并向總線寫入此值,對左子樹進行搜索;如果結(jié)點的深度值小于最后一個分叉結(jié)點的深度,則要根據(jù)上次搜索最后一個分叉結(jié)點注冊碼的相應(yīng)位果是否為0來決定是否記錄深度值,并向總線發(fā)送這位;如果結(jié)點的深度值等于最后一個分叉結(jié)點的深度,說明“左子樹已搜索完”,則當(dāng)前位為1,并向總線寫入此值,對右子樹進行搜索。這樣,每搜索到一個深度為64的葉子結(jié)點,就會得到一個從器件的注冊碼,一直搜索到記錄中沒有分叉結(jié)點為止。
搜索算法流程圖2中,ROMCODE[n]表示64位的變量存放器件的ROM注冊碼,Level記錄當(dāng)前分支結(jié)點的位置,Last_Level記錄前次搜索的最后分支的結(jié)點位置,n反映二叉樹當(dāng)前搜索深度,也表示搜索的位序。
圖2 1-Wire總線所有器件ROM注冊碼的搜索算法流程圖
搜索ROM注冊碼的技術(shù)是一個實現(xiàn)即插即用技術(shù)的途徑,當(dāng)設(shè)備每次上電時,主機能對設(shè)備部件進行動態(tài)管理。對于新增加的或更改的部件,主機可以動態(tài)地獲得它的注冊碼,從而可以在數(shù)據(jù)庫中增加此設(shè)備的記錄,并進行質(zhì)詢與認證,判斷其是否合法。對于從系統(tǒng)中撤離的設(shè)備,由于主機沒有檢測到它的注冊碼,所以可在數(shù)據(jù)庫刪除此設(shè)備的記錄。此算法已經(jīng)在作者主持的一項課題中得到了很好的應(yīng)用,實現(xiàn)了在線檢測設(shè)備的各部件的注冊碼。
根據(jù)DS2433在即插即用設(shè)備部件認證中的要求,設(shè)計了多個DS2433與微控制器連接的Proteus仿真實例,如圖3所示。以激光打印為例,用一個DS2433作為硒鼓的認證模塊,用另一個DS2433作為墨粉盒的認證模塊,一個DS18B20作為設(shè)備溫度檢測模塊。該仿真實例用DS2433實時存儲了所有部件的注冊碼,完全滿足即插即用系統(tǒng)進行校驗、質(zhì)詢、認證的要求。通過運行測試,驗證了本文提出的搜索算法及器件即插即用功能設(shè)計的可靠性與穩(wěn)定性。
圖3 DS2433在即插即用設(shè)備部件認證中的仿真
[1]Maxim公司DS2433芯片手冊[EB/OL].http://datasheets.maximintegrated.com/en/ds/DS2433.pdf,2011-06-12.
[2]彭偉.單片機C語言程序設(shè)計實訓(xùn)100例[M].北京:北京航天航空大學(xué)出版社,2012.
[3]劉建華.二叉樹算法在單總線技術(shù)中的應(yīng)用[J].自動化儀表,2006,27(3):63~64.
[4]周志光,朱志偉,劉瓊.DS2430A在即插即用傳感器系統(tǒng)中的應(yīng)用[J].單片機與嵌入式系統(tǒng)應(yīng)用,2010,10(6):68~70.
[5]李貢湘,郭忠文,遲曉晨.面向即插即用的物聯(lián)網(wǎng)傳感設(shè)備數(shù)據(jù)采集系統(tǒng)[J].中國海洋大學(xué)學(xué)報,2013,43(5):112~119.
[6]彭偉.1-Wire總線器件ROM搜索算法與即插即用技術(shù)研究[J].艦船電子工程,2012,32(4):95~99.
TP274
A
1671-5136(2014)02-0126-03
2014-05-31
2013年湖南省科技廳科研攻關(guān)項目(項目編號:2013GK3049)。
劉瓊,女,湖南工業(yè)職業(yè)技術(shù)學(xué)院教授,主要從事電子技術(shù)的研究與教學(xué)工作。