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