關于非接觸式IC智能(射頻)卡及其讀寫設備內核技術的研究與應用開發(連載4)
文章出處:http://hz-huyue.com 作者:張敏 人氣: 發表時間:2011年11月01日
在上述表中,僅當DV(Data Valid數據有效)位被設置有效時(即DV=”1”) ,TE,PE,CE,BE及AE標志才有效。但有一例外,即 當認證(Authentication)正確完成后,AE標志也直接有效。
SOR是Software Reset(軟件復位)的縮寫。當執行SOR后,所有的這些標志將被清除,且當對MCM的任何一個寄存器執行寫周期時,所有的這些標志也將被清除。詳見SOR后的復位表。
當對MCM內的任何一個寄存器執行寫周期時,所有的這些標志也將被清除;僅當FIFO是空時,DV標志將被寫周期清除。
有時侯MCM接收少于8 bits(例如 在接收ACK 或NACK時)時,MCM將不影響PE, CE, 及AE標志。
在MCU與MCM, MCM與Mifare 1卡片進行數據通信時,經常會出現各種錯誤。例如,卡片沒能認證(Authentication) 通過, 則會使AE出錯位置位,等等。
以下是在檢查DV位之后,相關的出錯情況,列為下表:
注意,送到卡片上的所有的命令和數據都提供奇/偶校驗(parity) 和CRC 檢查( 但“REQUEST”命令操作除外)。這是由卡片上的ASIC負責檢查。
3、ENABLE 寄存器,地址:02H
ENABLE 寄存器的設置將影響卡片在通信時對 parity 和CRC 的校驗。在ENABLE寄存器中有針對 parity 和CRC 校驗的復位允許位(reset ENABLE bits)。
在對MCM進行編程的開始時,必須對ENABLE寄存器進行寫操作,即必須將CE位關閉。僅當執行”Select”命令操作時才打開CE位:
由于MCM在電源接通時或在任何數據通信開始時,都會復位parity 和CRC塊,因此無須額外地去執行這一操作。
4.BCNTS 寄存器,地址: 03H
BCNTS是英文Bit-Counter-for-Sending的縮寫,意為傳送時的位計數器(寄存器)。 這里的傳送指的是CPU向MCM的DATA寄存器寫數據。因此BCNTS寄存器實際上是一個字節發送控制器,它控制了MCU向DATA寄存器中寫進的數據字節數目。
例如,設置BCTRS=10H,則可向MCM的DATA寄存器寫進的數據字節數目為2個(8位字長的數據,因為總的bit數目=10H=16D),多余的數據,MCM將不予接收。
由于BCNTS寄存器是控制向DATA寄存器寫數據的字節數目,因此這一操作必須在數據寫入DATA寄存器之前完成。使用2進制代碼來操作。
在大量的字節數據被寫入DATA寄存器之后,MCM自動地與卡片進行通信。寫入DATA寄存器的bits數量由BCNTS寄存器制定,保持。
5。BCNTR寄存器, 04H
BCNTR是英文Bit-Counter-for-Receiving的縮寫,意為接收時的位計數器(寄存器)。
與BCNTS寄存器相反, BCNTR寄存器控制了MCU讀取DATA寄存器的數據字節數目
例如,設置BCNTR=20H,則可向MCM的DATA寄存器讀取的數據字節數目為4個(8位字長的數據,因為總的bit數目=20H=32D),多余的數據,MCM將不予理會。
由于BCNTR寄存器是控制向DATA寄存器讀取數據的字節數目,因此這一操作必須在讀DATA寄存器之前完成。使用2進制代碼來操作。
BCNTR寄存器中的值將與實際接收到的數據字節相比較,如果有差別,則STACON寄存器中的BE標志被設置。
6。BAUDRATE 寄存器, 地址: 05H
BAUDRATE 意為數據傳輸到卡片上或卡片上的數據傳到MCM時通信的位速率。雖然BAUDRATE 寄存器的后四位相關與指定的位速率,但是實際有用于MIFARE 1卡的只是最后一位。
BAUDRATE 寄存器的設置將直接影響著MCM與Mifare 1卡片之間的數據通信速率。
MCM中有一個時鐘發生器。寫數據至BAUDRATE 寄存器,可以控制 時鐘發生器(CLOCK GENERATOR)。以下是位速率的計算公式:
7。TOC 寄存器, 地址: 06H
TOC是Time Out Counter ((定)時間溢出記數器 ) 的縮寫。
Zhang28
TOC 寄存器中的值 (非零值) 將在 沒有通信時,永久地被遞減。因此,在沒有通信時,或通信剛結束時,TOC 寄存器中的值必須被設置,即設置TOC = 0x00H. 例如: 在FIFO中的數據有效時,就必須這樣做。否則將影響STACON寄存器的TE出錯標志。
如果有溢出出現,則TE標志被設置,DV標志被激活。
在完成寫數據到DATA寄存器,定時溢出記數器 應該經常被初始化。但有個例外,即 在認證操作(AUTHENCATION)的開始時段,定時溢出記數器 應該在存取“KEYSTACON” 和“KEYADDR”寄存器 之后,在存取DATA寄存器之前 被初始化。
一般地在讀?。≧ead)和保存(save)了STACON寄存器中的數據之后 定時溢出記數器必須被關閉。
8.MODE寄存器, 地址: 07H
MODE 意為在與卡片數據相互往來時的數據編碼模式 (MODE of DATA coding)。MODE寄存器的設置控制了MCM在與卡片數據相互通信時的數據編碼模式.
MODE寄存器的每一位都與數據通信模式有關,但在使用MIFARE 1卡時,只有最后3 位(BITS)最為關聯。
MODE 寄存器 中的P2 ,P1 ,及P0位決定了在NPAUSE0 和NPAUSE1引腳上的各自的脈沖寬度。脈沖寬度的可變范圍在 2 ~ 3 us 之間。
在使用MIFARE卡時,P2 ,P1 ,及P0位應被設置為 111 b 或110 b。
這里必須提醒讀者注意的是,當我們使用CM200(Philiphs產品)時與使用SB201(UniVision Engineering Limited聯視工程有限公司的產品)時,MODE 寄存器的設置值將不一樣。
使用CM200(Philiphs產品)時, MODE 寄存器的設置值應為: “1100 0110b”,即C6H,但在使用SB201(UniVision Engineering Limited聯視工程有限公司的產品)時, MODE 寄存器的設置值應為: “1101 0110b”,即D6H。這是兩個產品唯一存在的硬件上的不兼容,導致軟件的設置值不同。 否則由于數據通信時的數據編碼模式不相同,MCM將不能正常工作,不能讀/寫Mifare 1卡片。在實際應用中已有此經驗教訓。
9. CRCDATA 寄存器, 地址: 08H
被計算CRC的數據必須被寫入CRCDATA寄存器中。 計算后的CRC必須從CRCDATA 寄存器中讀出。
在寫入一個BYTE(字節)到CRCDATA 寄存器后,計算將開始。計算完成后,STACON寄存器的CV標志被設置。當我們要寫下一個字節到CRCDATA 寄存器之前,或在讀取CRCDATA寄存器以得到CRC之前,或在檢查CZ標志之前,都必須先讀取CV標志,檢查CV標志。(待續)