關(guān)于非接觸式IC智能(射頻)卡及其讀寫(xiě)設(shè)備內(nèi)核技術(shù)的研究與應(yīng)用開(kāi)發(fā)(連載6)
文章出處:http://coolbang.cn 作者:張敏 人氣: 發(fā)表時(shí)間:2011年11月01日
(二) RF模塊接口電路
MCM與RF模塊的接口一般有如下幾個(gè)引腳來(lái)實(shí)現(xiàn):
通過(guò)KOMP0與NPAUSE0可與RF0模塊相連接;
通過(guò)KOMP1與NPAUSE1可與RF1模塊相連接;(僅有MCM500有RF1)
通過(guò)RXKOMP與TXNPAUSE可與其他的級(jí)聯(lián)MCM模塊相連接;
(三) 與天線射頻接口電路
有二個(gè)引腳ANT和GND接口可直接與正極性天線相聯(lián)接。其間用同軸電纜。阻抗歐娒。連接長(zhǎng)度一般應(yīng)小于50CM。
MCM的外部金屬屏蔽盒(僅MCM500有)必須連接到同軸電纜的外屏蔽包裹線,以使信號(hào)不能擴(kuò)散,且免受外界電磁輻射信號(hào)等的影響。
如果天線工作不正常,可用“天線調(diào)諧器”來(lái)調(diào)諧,使之能將Mifare 1卡片的有效操作距離保持在10CM/2 .5CM以上。
(四) 與電源接口電路
與電源的接口包括這樣幾組信號(hào):
DVDD—數(shù)字電路正電源端(+5V);
DGND--數(shù)字電路接地端(0V);
BP ---WOM緩沖器供電(通電工作時(shí)為+5V;不通電工作時(shí)為+3V );
RFVDD—RF電路正電源端(MCM500:+12V/MCM200: +5V);
RFGND-- RF電路接地端(0V);
注意,RFGND和DGND有條件的話應(yīng)該分開(kāi)接地,否則應(yīng)接到系統(tǒng)的接地端,并且連接線應(yīng)該具有高導(dǎo)電特性,且應(yīng)愈短愈粗愈好?!?BR> MCM供電電源端與GND端必須跨接100NF的電容,這些電容應(yīng)盡可能靠近MCM,以免引起接地環(huán)路。
整個(gè)系統(tǒng)應(yīng)有單一電源供電,且應(yīng)穩(wěn)壓,紋波電壓小于50mv。
第三章 MCM 軟件編程指令
(一)指令集
?。停茫湍軋?zhí)行有限的一些指令,并將這些指令傳輸?shù)組IFARE 1卡片上。
每一個(gè)指令包含7個(gè)獨(dú)立的步驟,程序員在編程執(zhí)行這些指令時(shí)必須小心每一個(gè)正確的(步驟)時(shí)序,這些步驟在不同的MCM指令執(zhí)行中而不一樣。以下是MCM通信基本指令集。
指令代碼表
在與MIFARE卡片進(jìn)行任何通信之前,程序員必須按照下述方法預(yù)先設(shè)置MODE寄存器:
MODE = “ 1 1 0 0 0 1 1 0 ”bin = C6 hex
注意,使用CM200(Philiphs產(chǎn)品)時(shí), MODE 寄存器的設(shè)置值應(yīng)為: “1100 0110b”,即C6H,但在使用SB201(UniVision Engineering Limited聯(lián)視工程有限公司的產(chǎn)品)時(shí), MODE 寄存器的設(shè)置值應(yīng)為: “1101 0110b”,即D6H。
出錯(cuò)處理:
DV標(biāo)志指明了MCM與MIFARE卡片之間的傳輸已經(jīng)完成,并且主處理機(jī)可能已經(jīng)從MCM中收到數(shù)據(jù)。DV標(biāo)志保持“1”的持續(xù)時(shí)間,出錯(cuò)標(biāo)志亦將保持有效。
在有效的數(shù)據(jù)被存儲(chǔ)進(jìn)FIFO寄存器時(shí),DV標(biāo)志將持續(xù)保持。在向MCM寫(xiě)數(shù)據(jù)時(shí)的寫(xiě)指令周期內(nèi),DV標(biāo)志將被清除。DV標(biāo)志也可能會(huì)被軟復(fù)位(soft-reset)清除。
有時(shí),為了確認(rèn)有些操作的成功完成,必須使用定時(shí)溢出(TE)標(biāo)志。
1 . “Answer to Request” (“Request”應(yīng)答)指令
Request 指令將通知MCM在天線有效的工作范圍(距離)內(nèi)尋找MIFARE 1卡片。如果有MIFARE 1卡片存在,這一指令將分別與MIFARE 1進(jìn)行通信,讀取MIFARE 1卡片上的卡片類型號(hào)TAGTYPE(2個(gè)字節(jié)),由MCM傳遞給MCU,進(jìn)行識(shí)別處理。
程序員可以根據(jù)TAGTYPE來(lái)區(qū)別卡片的不同類型。
對(duì)于MIFARE 1卡片來(lái)說(shuō),返回卡片的TAGTYPE(2個(gè)字節(jié))可能為0004h。
從一個(gè)指定的卡片開(kāi)始,后續(xù)的卡片可以根據(jù)TAGTYPE而被選擇。當(dāng)使用 “Request std“指令來(lái)尋卡時(shí),只有那些卡片上沒(méi)有被設(shè)置成“HALT_MODE ”(停機(jī)模式)的卡片將響應(yīng)這一指令。
Request all指令的使用是很重要的,它可以防止MCM選擇同一卡片好幾次。當(dāng)某一張卡片在MCM之天線的有效的工作范圍(距離)內(nèi),Request all指令在成功地讀取這一張卡片之后,將一直等待卡片的使用者拿走這一張卡片,直到有新一張的卡片進(jìn)入MCM之天線的有效的工作范圍(距離)內(nèi)。當(dāng)然,這里的“新一張的卡片”亦可以是剛剛拿開(kāi)的那張卡片。
Request all指令是非連續(xù)性的讀卡指令。只讀一次。但有個(gè)例外,當(dāng)某一次Request all指令讀卡片失敗時(shí),例如,卡片沒(méi)能通過(guò)密碼認(rèn)證或其他原因而出錯(cuò)時(shí),Request all指令將連續(xù)地讀卡,直到讀卡成功才進(jìn)入非連續(xù)性的讀卡模式。
Request all指令適用于那些需要有人工干預(yù)的場(chǎng)合。
Request std指令的使用和Request all指令剛巧相反,Request std指令是連續(xù)性的讀卡指令。當(dāng)某一張卡片在MCM之天線的有效的工作范圍(距離)內(nèi),Request std指令在成功地讀取這一張卡片之后,進(jìn)入MCM對(duì)卡片的其他操作。如果其他操作完成之后,程序員又將MCM進(jìn)入Request std指令操作,則Request std指令將連續(xù)性地再次進(jìn)行讀卡操作,而不管這張卡片是否被拿走。只要有一張卡片進(jìn)入MCM之天線的有效的工作范圍(距離)內(nèi),Request std指令將始終連續(xù)性地再次進(jìn)行讀卡操作。
Request std指令是連續(xù)性的讀卡指令。
Request std指令適用于那些不需要有人工干預(yù)的場(chǎng)合,即全自動(dòng)的場(chǎng)合。例如,賓館,酒店,高級(jí)寫(xiě)字樓等場(chǎng)所的門(mén)禁控制系統(tǒng)(Door Access Control),高速公路,停車場(chǎng)等的不停車收費(fèi)系統(tǒng)(Non-Stop Road Tolling),等等。
2.“AntiCollision” 防重疊
如果有多于一張的Mifare 1卡片在MCM之天線的有效的工作范圍(距離)內(nèi) ,必須使用AntiCollision指令,使MCM能夠在這一疊 Mifare 1卡片中選擇個(gè)別的一張卡片。
AntiCollision指令開(kāi)始于一個(gè)“AntiCollision loop”(防重疊循環(huán))。結(jié)束時(shí),AntiCollision指令將提供給用戶在這些卡片疊中選擇的那張個(gè)別的卡片的一個(gè)有效的40 bit長(zhǎng)的序列號(hào)SN(serial number)。
一般地,AntiCollision指令將有序地讀所有的處在MCM之天線的有效的工作范圍(距離)內(nèi)的Mifare 1卡片。讀完第Xi張卡片后,MCM 及MCU對(duì)這Xi張卡片進(jìn)行處理,完畢之后,讀 第Xi+1張卡片,然后MCM 及MCU對(duì)這Xi+1張卡片進(jìn)行處理。循序漸進(jìn),直至所有的卡片。
AntiCollision指令的啟動(dòng)必須是在程序員完成了對(duì)STACON寄存器中的AC位的成功的設(shè)置之后。
注意:AntiCollision指令事實(shí)上并不實(shí)際地選擇一張個(gè)別卡片,而僅僅是讀取Mifare1卡片上的序列號(hào)SN。MCM與卡片的真正聯(lián)絡(luò),選擇某一張卡片,是由程序員向MCM發(fā)送“SELECT”命令來(lái)完成的。
AntiCollision指令讀取的Mifare 1卡片上的一個(gè)有效的40 bit長(zhǎng)的序列號(hào)SN(serial number)被存儲(chǔ)在Mifare 1卡片上的第00H扇區(qū)中的第00h 塊(Block)中。共5個(gè)字節(jié)。
事實(shí)上,對(duì)于程序員來(lái)說(shuō),實(shí)際有意義的SN只有前4個(gè)字節(jié),最后一個(gè)字節(jié)只是一個(gè)SN的校驗(yàn)碼。
程序員在控制MCM及MCU,發(fā)送AntiCollision指令,而獲得SN之后,一般地應(yīng)在程序中對(duì)所接收到的SN進(jìn)行校驗(yàn),以確保數(shù)據(jù)的正確性。具體的方法是對(duì)所接收到的SN的bit位進(jìn)行異或校驗(yàn),這在后面的具體程序編制中將會(huì)闡述。
對(duì)于MIFARE 1卡片來(lái)說(shuō),返回某一張卡片的有效序列號(hào)SN(4個(gè)字節(jié))可能為:007e0a42h。
3.“Select Tag” 選擇卡片操作
在一個(gè)成功的AntiCollision指令之后,或在任何時(shí)候當(dāng)程序員想實(shí)際地與已知序列號(hào)的卡片進(jìn)行通信時(shí),必須使用Select指令,以建立與所選卡的通信。
為了允許在Select指令以后對(duì)卡片能進(jìn)行Read/Write等指令的操作,Select指令是很重要的,必須首先被使用。被選擇的卡片將給出其自己的存儲(chǔ)器容量---已編碼的一個(gè)BYTE(字節(jié))。
Select指令成功地完成后,MCU將得到MCM之DATA寄存器傳送來(lái)的一個(gè)字節(jié)長(zhǎng)的卡片容量信息---SIZE字節(jié)。
SIZE字節(jié)被存儲(chǔ)在Mifare 1卡片上的第00H扇區(qū)中的第00h 塊(Block)中。共1個(gè)字節(jié)(8bits)。
對(duì)于MIFARE 1卡片來(lái)說(shuō),返回卡片的SIZE(個(gè)字節(jié))可能為88h。
4.Authentication” 認(rèn)證操作
在MCU將運(yùn)算獲得的數(shù)據(jù),準(zhǔn)備存儲(chǔ)到卡片上的存儲(chǔ)器之前,或MCU希望能讀取Mifare 1卡片上的數(shù)據(jù)之前,程序員必須證明他的讀/寫(xiě)請(qǐng)求操作是被允許的。
這可以通過(guò)選擇秘密地存儲(chǔ)在MCM之RAM中的密碼集(KEYSET)中的一組密碼來(lái)進(jìn)行認(rèn)證而實(shí)現(xiàn)。如果這一組密碼匹配與Mifare 1卡片上的密碼,這一次的操作被允許進(jìn)行。
卡片上的存儲(chǔ)器的每一個(gè)block(塊)(128 bits ) 都分別地指定了該BlOCK(塊)的存取條件。這些存取條件是根據(jù)密碼A或B(它們對(duì)整個(gè)sectors (扇區(qū))始終有效)而定。這樣一來(lái),不同的操作可能會(huì)被允許對(duì)一個(gè)sector中的4個(gè)不同blocks的每一個(gè)block進(jìn)行操作。
MCM能夠存儲(chǔ)3個(gè)密碼集KEYSET0,KEYSET1,KEYSET2。每一個(gè)KEYSET又包含了KEY A 及 KEYB 等,以存取最高達(dá)32Kbit內(nèi)存容量的MIFARE卡片。
用戶必須在KEYSTACON(0B H地址)寄存器中指定一套密碼,即設(shè)置KS0, KS1。
KEYADDR寄存器(0C H地址)中的AB位用于選擇KEYA(當(dāng)AB=“1”時(shí))和KEYB(當(dāng)AB=“0”時(shí))。
KEYADDR寄存器(地址0C H) 中的“AB”設(shè)置必須匹配”Authentication”命令(指令代碼60和 61 hex),這是很重要的。否則,”Authentication”命令將失敗。
即,在”Authentication”命令中,60h代碼用于認(rèn)證KEYA;61h代碼用于認(rèn)證KEYB。
當(dāng)用60h代碼時(shí),在KEYADDR寄存器中只能設(shè)置AB=“1”,用于選擇KEYA;
當(dāng)用61h代碼時(shí),在KEYADDR寄存器中只能設(shè)置AB=“0”,用于選擇KEYB;
當(dāng)用60h代碼時(shí),在KEYADDR寄存器中不能設(shè)置AB=“0”,否則認(rèn)證命令將出錯(cuò);
當(dāng)用61h代碼時(shí),在KEYADDR寄存器中不能設(shè)置AB=“1”,否則認(rèn)證命令將出錯(cuò);
KS1和KS0的設(shè)置選擇與上述的認(rèn)證命令的指令代碼60和 61 hex的選擇無(wú)關(guān);
KS1和KS0的設(shè)置選擇與上述的KEYADDR寄存器中AB的設(shè)置無(wú)關(guān)。
在MCM中,KEY-RAM(密碼存儲(chǔ)器)的實(shí)際存儲(chǔ)器范圍是:
MCM中另外還包含了KEY-ROM (密碼只讀存儲(chǔ)器),用以存儲(chǔ)一套傳輸密碼(one set of transport keys) 和一個(gè)維護(hù)密碼(one service KEY)。 傳輸密碼對(duì)于用戶想在KEY-RAM(密碼存儲(chǔ)器)中自己定義密碼而編程序時(shí),很有用。
KEY-ROM (密碼只讀存儲(chǔ)器)的存儲(chǔ)器容量為:
5.“Load KEY” 存取密碼
在MCM中,每一個(gè)認(rèn)證扇區(qū)(Authentication sector)中包含了一套傳輸密碼Tkey(one transport KEY)。這些密碼在制造產(chǎn)品時(shí),可以編程。它們可以被傳輸?shù)较到y(tǒng)的集合器(例如,用戶開(kāi)發(fā)的硬件系統(tǒng))中,集合器負(fù)責(zé)存取新的用戶定義的密碼到MCM-WOM(密碼只讀存儲(chǔ)器)中。此時(shí),可以通過(guò)“Load KEY”指令來(lái)完成任務(wù)。
對(duì)于一個(gè)單獨(dú)扇區(qū)(sector)中的密碼提取,則相應(yīng)的傳輸密碼必須被預(yù)先指定。
在用“Load KEY”指令來(lái)完成存取密碼過(guò)程中,KEYSTCON寄存器和KEYADDR寄存器的設(shè)置與“Authentication”的操作相似。但也有些區(qū)別。這將在后面的編程中具體介紹。
6.“Read” 讀指令操作
Read (讀)指令允許MCU通過(guò)MCM來(lái)讀取MIFARE 1卡片上完整的16 個(gè)Bytes的數(shù)據(jù)塊(Data blocks)。
只有在預(yù)先“Authentication” 認(rèn)證指令完成后,才允許進(jìn)行對(duì)Mifare 1卡片上的某一數(shù)據(jù)扇區(qū)進(jìn)行Read (讀)指令操作。
Read (讀)指令操作只能一個(gè)塊(Block)一個(gè)塊地讀,即只能16個(gè)字節(jié)一次性地讀取。如果只要求某Block中的幾個(gè)字節(jié)的數(shù)據(jù),也只能一個(gè)整塊16個(gè)字節(jié)一起讀取,由程序員選取指定的字節(jié)。
從卡片上讀到的數(shù)據(jù)必須由MCU進(jìn)行校驗(yàn),以確保數(shù)據(jù)的有效性。
密碼數(shù)據(jù)不能被讀取。(待續(xù))