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