關(guān)于非接觸式IC智能(射頻)卡及其讀寫設(shè)備內(nèi)核技術(shù)的研究與應(yīng)用開發(fā)(連載7)
7. “Write” 寫指令操作
“Write“ 寫指令允許用戶寫數(shù)據(jù)到MIFARE卡片上(完整的16 個BYTEs的數(shù)據(jù)塊(Data blocks))。只有在先“Authentication” 認(rèn)證指令完成后,才允許進(jìn)行對要求的數(shù)據(jù)扇區(qū)或數(shù)據(jù)塊(Block)進(jìn)行“Write“ 寫指令操作。
為了提供最大的數(shù)據(jù)集成度,以及包含大量密碼值的密碼數(shù)據(jù)塊的保密性,我們必須保持一個大數(shù)據(jù)結(jié)構(gòu)。這樣可以允許MIFARE卡片執(zhí)行增值/減值(Increment/Decrement)指令。
數(shù)據(jù)塊通過一個寫操作,將存儲的數(shù)據(jù)在每一個block塊中寫3次,1次反寫,從而完成數(shù)據(jù)塊的初始化。此外,一個地址引導(dǎo)位代碼域必須寫4次,其中2次為反向?qū)懭?。?負(fù)數(shù)據(jù)值將以標(biāo)準(zhǔn)的2的補碼格式來表示。
注意:在將數(shù)據(jù)寫到卡片上的某一扇區(qū)時,一定要小心。因為有些block中存儲了密碼數(shù)據(jù)以及存儲允許使能數(shù)據(jù)。特別是每一個扇區(qū)的Block3中存放了該扇區(qū)的存取條件,包含有KEYA,KEYB及該扇區(qū)的控制字。Mifare 1卡片出廠時的Block3有缺省值,為:“a0a1a2a3a4a5ff078069b0b1b2b3b4b5”,共16個Bytes。
涉及Mifare 1卡片的存儲結(jié)構(gòu)等信息,請參考本文的關(guān)于Mifare 1 卡片章節(jié)。
程序員在使用Mifare 1卡片做應(yīng)用時,一定要清清楚楚記住每一個扇區(qū)的Block3的數(shù)據(jù),這樣也就記住了扇區(qū)的密碼和存取控制字。否則,扇區(qū)的存儲空間將不能被READ/WRITE等操作而失效。
任何人試圖用任何方式來讀寫不知密碼的卡片或某一扇區(qū)都是徒勞無益的。
卡片應(yīng)放在安全的地方,即不要放在離MCM天線較近的地方。因為當(dāng)MCM在執(zhí)行某些指令時,有可能無意對這一卡片進(jìn)行了讀/寫等操作。
8.“Increment “ & “ Decrement “ & “ Restore” 增值/減值/重儲
通過Mifare 1內(nèi)部電路,MIFARE 1卡片能夠執(zhí)行“Increment “ & “ Decrement “增值/減值 操作,如果:
#用合適的寫指令對數(shù)據(jù)塊“value block”進(jìn)行了初始化;
#根據(jù)KEY A 和KEY B ,允許進(jìn)行“Increment “ & “ Decrement “增值/減值 操作;
#“Increment “ 增值 0 操作和“ Decrement “減值0 操作是不允許的;
“Increment “ 增值:加指定的值到卡片的存儲器中
“ Decrement “減值:從卡片的存儲器中減去指定的值
“ Restore” 重儲: 執(zhí)行一個“Decrement 0”(減 0)指令
上述指令的計算結(jié)果將被存儲在MCM的一個內(nèi)部的數(shù)據(jù)緩沖寄存器中,直達(dá)以后的指令來存取。為了將結(jié)果寫到卡片上,緊接著必須執(zhí)行“Transfer”指令。Transfer”指令并不改變數(shù)據(jù)緩沖寄存器中的數(shù)據(jù)值。這一操作保持?jǐn)?shù)據(jù)塊中的數(shù)據(jù)結(jié)構(gòu),直到數(shù)據(jù)塊中的值被自動地反寫及校驗為止。存儲的地址也被正確地傳送存儲到數(shù)據(jù)塊中。
數(shù)據(jù)塊的長度為4 字節(jié)(BYTES)。
萬一數(shù)據(jù)值溢出,即數(shù)據(jù)值遠(yuǎn)大于最大的正數(shù)值 或 遠(yuǎn)小于最小的負(fù)數(shù)值時,MIFARE卡片將停止操作,并返回一個NACK代碼。
9.“Transfer” 傳送指令
每一個“Increment “ & “ Decrement “增值/減值 操作都必須跟隨一條“Transfer” 傳送指令,這樣真正地將數(shù)據(jù)結(jié)果傳送到卡片上去。否則,沒有傳送指令,數(shù)據(jù)結(jié)果仍保持在數(shù)據(jù)緩沖寄存器(value buffer register)?!癟ransfer” (傳送) 指令的目標(biāo)地址可能會相同與“Increment “ & “ Decrement “增值/減值指令時的源地址。然而,如果有了完善的后備管理軟件,這樣的事可能不會發(fā)生。
除了“Transfer”指令之外,其他所有的指令將改變內(nèi)部數(shù)據(jù)緩沖寄存器(value buffer register)的內(nèi)容。這將要求使用“Restore”指令?!癛estore”指令將重建“Read“指令之后的數(shù)據(jù)緩沖寄存器(value buffer register)的內(nèi)容。
如果“Transfer” (傳送) 指令存取了一個新的存儲器位置時,將被要求一個相同于源地址的存儲條件的 目標(biāo)地址。
即,對于兩個內(nèi)存位置,要求執(zhí)行“Increment “ & “ Decrement “增值/減值指令?!癟ransfer” (傳送) 指令自動地保持正確的數(shù)據(jù)結(jié)構(gòu),包括存儲數(shù)據(jù)的地址。
10.“ Halt” 停機指令
“Halt” 停機指令將MIFARE 1卡片設(shè)置為“HALT MODE”。例如,卡片已經(jīng)退出使用等??ㄆ瑢⒈3帧癏ALT MODE”狀態(tài),直到被復(fù)位(例如:重新用于通信 等)。
第四章 MCM應(yīng)用開發(fā)
在這一章節(jié)里,將向廣大 讀者介紹MCM的具體的應(yīng)用開發(fā)。 我們選用的卡片為Mifare 1 S50系列的標(biāo)準(zhǔn)的符合 ISO/IEC 14443 TYPE A 標(biāo)準(zhǔn)的非接觸式IC射頻卡。選用的讀寫器的核心模塊為MCM200(或是SB201)。
根據(jù)以上幾個章節(jié)的介紹,相信讀者可以理解如下的通用讀寫器DEMO電路的設(shè)計。
一.DEMO硬件電路的應(yīng)用開發(fā)
通用讀寫器DEMO的硬件電路請見所附的圖紙。具體說明如下:
1.DEMO電路中,對于MCU的說明:
筆者選用了市場上容易購置的美國ATMEL 公司的89C52芯片。其內(nèi)建8K EEPROM,256 bytes 的RAM ,內(nèi)設(shè)P0,P1,P2,P3 等四個端口,其中P0,P2為數(shù)據(jù)/地址雙向的多用端口。內(nèi)有3個定時器,T0,T1和T2。其振蕩晶體選用11.0592MHz,以利于以后通信時的波特率的精確設(shè)計和設(shè)置。89C52中還內(nèi)設(shè)8級中斷控制系統(tǒng),3級單向一次性可編程的密碼內(nèi)存,可以防止芯片內(nèi)的程序被非法讀寫,拷貝等,保護(hù)知識產(chǎn)權(quán)。等等。
AT89C52 的軟件指令完全兼容與MCS-51系列的MCU的標(biāo)準(zhǔn),包括指令的尋址方式,各種數(shù)據(jù)的操作等等。
有關(guān)詳細(xì)的資料,可以查閱ATMEL 公司的網(wǎng)頁: HTTP://WWW.ATMEL.COM
2.Demo電路中,對MCM的說明:
在DEMO電路中,筆者選用了Philips公司的MCM200模塊(也可用聯(lián)視工程公司的SB201模塊)。
將MCM的D0 ~ D7 連接到MCU的P0端口;MCM的讀寫線連接到MCU的-RD和-WR端上; A0 ~ A7空缺,使用ALE線,連接到MCU的第30腳上;MCM的天線端點上(ANT,-ANT等)必須對地接高頻濾波電容,并串接高頻電感;MCM的第9腳必須接3.6V的后備鋰電池;MCM的第31腳及12腳分別接MCU的25腳和26腳,由程序員來控制MCM的啟動和關(guān)閉。MCM上的模擬電路供電和數(shù)字電路的供電端必須跨接高低頻濾波電容等。
3. Demo電路中,對顯示電路的說明:
在DEMO電路中,筆者選用了Motorola 公司的MC14499顯示模塊。
每個MC14499模塊可動態(tài)掃描4位段式LED(共陰)。DEMO電路中共使用了2個MC14499模塊,以顯示8位數(shù)據(jù)。
MC14499顯示0 ~9數(shù)字時很直觀,但是它是數(shù)字型的。由于我們經(jīng)常要顯示16進(jìn)制的數(shù)據(jù),因此對于A,B,C,D,E,F(xiàn)的顯示,MC14499的顯示可能不很直觀,希望讀者注意。
在新版本的DEMO電路中,筆者已經(jīng)將顯示電路改為LCD點陣式,多字行的液晶顯示電路。這對于將這種低功耗的顯示電路直接應(yīng)用于所要求開發(fā)的應(yīng)用設(shè)備中將提供很大方便。
兩個MC14499模塊的CLK和DATA信號將分時復(fù)用,以節(jié)省MCU有限的資源,分別接到MCU的21 和22引腳上,兩個MC14499模塊的--ENB信號分別接到MCU的23 和24引腳上。如果選通-ENB1,則第一個MC14499顯示模塊將接收數(shù)據(jù);如果選通-ENB2,則第二個MC14499顯示模塊將接收數(shù)據(jù)。
4.Demo電路中,對鍵盤電路的說明:
在DEMO電路中,筆者選用了4 X 4方陣式樣的鍵盤電路與MCU相連在P1端口上。
鍵盤電路中的4X4共16個鍵分別設(shè)置為0 ~ 9 十個鍵,一個“.”鍵,以及其他一些功能鍵及字母鍵。
鍵盤電路的掃描值通過一個LS244,送到MCU的P1的高四位,供MCU采集;MCU的P1的低四位送出鍵盤的掃描信號。LS244的選通(MCU采集P1的高四位時)信號和顯示電路的DATA線分時復(fù)用,以節(jié)省MCU有限的資源。
本鍵盤電路的軟件設(shè)計不同于傳統(tǒng),而采用了比較直接,明了,快速的“位掃描法”,這對于讀者如果要求對鍵盤數(shù)目進(jìn)行擴充,則讀者在仔細(xì)閱讀本文之后定能迎刃而解。
在軟件設(shè)計說明章節(jié)中將詳細(xì)介紹鍵盤掃描電路軟件設(shè)計方法。
5.Demo電路中,對指示信號的說明:
LED1:指示MCM的-CS信號是否被選中,LED1亮,則指示MCM已被MCU選中,可對MCM進(jìn)行操作。(此時,應(yīng)注意MCM的RST端指示信號LED2應(yīng)亮,否則MCM不能被操作)。
LED2:指示MCM的RST信號是否被選中,LED2亮,則指示MCM以被MCU選中,可對MCM進(jìn)行操作。(此時,應(yīng)注意MCM的-CS端指示信號LED1應(yīng)亮,否則MCM不能被操作)。
LED1 和LED2的指示應(yīng)該同時有效才能使MCM工作。
LED3:整個DEMO電路的“OK”指示信號。即在每次對MCM操作成功之后,LED3將指示為亮。例如在對MCM成功地進(jìn)行了SELECT命令或REQUEST命令等操作之后,LED3將指示為亮。特別地,在本文的“門禁控制系統(tǒng)”應(yīng)用程序中,LED3將直接作為門鎖的驅(qū)動信號。在實際的裝置中,如果“門禁控制系統(tǒng)”的讀寫器讀到某一張寫有該“門禁控制系統(tǒng)”密碼的非接觸式射頻卡,則LED3將指示發(fā)亮,并驅(qū)動門鎖,打開大門。(讀者如果已完全理解,讀通“門禁控制系統(tǒng)”應(yīng)用程序的話,完全可在程序中適當(dāng)?shù)奈恢眉尤胍欢涡〕绦?,連同LED3的驅(qū)動信號,而作為門鎖的復(fù)合驅(qū)動信號。這樣的“門禁控制系統(tǒng)”將更具有安全性,可靠性。)
喇叭(蜂鳴器):DEMO電路的喇叭(蜂鳴器)指示音信號,在每次對MCM操作成功之后,喇叭(蜂鳴器)將發(fā)聲。例如在對MCM成功地進(jìn)行了SELECT命令或REQUEST命令等操作之后,喇叭(蜂鳴器)將發(fā)聲。特別地,在本文的“門禁控制系統(tǒng)”應(yīng)用程序中,喇叭(蜂鳴器)將直接作為門鎖的驅(qū)動指示音信號。配合LED3的指示信號,僅當(dāng)門鎖被合法地打開時,喇叭(蜂鳴器)將給出指示音信號。否則,喇叭(蜂鳴器)將不會給出指示音信號。
讀者如果已完全理解,讀通“門禁控制系統(tǒng)”應(yīng)用程序的話,完全可在程序中適當(dāng)?shù)奈恢脤ED3或喇叭(蜂鳴器)進(jìn)行任意的程序設(shè)置。
電源輸入保護(hù)電路:在DEMO電路中,加入了簡單的電源保護(hù)電路。即在電源的輸入端加入一個反向二極管,當(dāng)電源極性接反時,將輸入的電源短路,而不會使DEMO電路損壞。
6. 其他電路
通信電路:在新版本的DEMO電路中,筆者已經(jīng)將RS232的通信電路連接上。以利于用上位PC來具體地控制讀寫器,并能編制用戶界面良好的應(yīng)用軟件,等等。
為了方便讀者對于實際應(yīng)用中不同的通信方式的要求,例如要求長線(長距離)方式(例如RS422/485等),筆者業(yè)已設(shè)計完成相應(yīng)的“全雙工RS232《==》RS422/485通信(雙向)轉(zhuǎn)接設(shè)備”。該轉(zhuǎn)接設(shè)備非常輕巧,低功耗,成本很低,非常適合于各種不同應(yīng)用類型的計算機與應(yīng)用設(shè)備之間的轉(zhuǎn)接。例如大樓中的門禁系統(tǒng)中各讀寫設(shè)備與上位計算機之間的長線方式的通信就應(yīng)采用這種轉(zhuǎn)接設(shè)備。其長線驅(qū)動可達(dá)1200米以上,且穩(wěn)定可靠。傳統(tǒng)的RS232通信至多不超過20米。(注:關(guān)于“全雙工RS232《==》RS422/485通信(雙向)轉(zhuǎn)接設(shè)備”的介紹,筆者將會在另外文章中將做詳細(xì)介紹。)
LCD顯示電路:輕巧,低功耗的非接觸式卡片讀寫器已越來越受到歡迎。因此大電流顯示的LED將被LCD顯示所取代。筆者在新版本的DEMO電路中,已經(jīng)將LCD應(yīng)用于讀寫設(shè)備中,且為圖形方式點陣大屏幕顯示。
二. DEMO電路的 軟件 應(yīng)用開發(fā)
DEMO電路的 軟件 應(yīng)用開發(fā)的目標(biāo)是:主要根據(jù)所設(shè)計的DEMO硬件電路而進(jìn)行第一步,最低層的面向微處理機MCU的應(yīng)用程序的開發(fā)。
由于在DEMO電路中筆者選用的MCU為完全兼容與MCS-51系列微處理機的ATMEL公司的AT89C52,因此,筆者將重點介紹MCS-51系列的面向硬件操作的最低層的匯編語言的DEMO電路的應(yīng)用程序的開發(fā)。
應(yīng)用程序的開發(fā)將主要分為兩大部分,即對MCM的應(yīng)用程序的開發(fā)及對讀寫器的其他電路的應(yīng)用程序的開發(fā)。
程序開發(fā)的方式將主要建立一系列的匯編語言函數(shù)子程序以供主程序的隨時調(diào)用。即對MCM模塊或讀寫器的其他電路分別編制匯編語言函數(shù)子程序。(待續(xù))