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