摘要:正常情況下讀寫(xiě)器某一時(shí)刻只能對(duì)磁場(chǎng)中的一張射頻IC卡進(jìn)行讀寫(xiě)操作。但是當(dāng)多張IC卡片同時(shí)進(jìn)入讀寫(xiě)器的射頻場(chǎng)時(shí),讀寫(xiě)器怎么辦呢?讀寫(xiě)器需要選出唯一的一張卡片進(jìn)行讀寫(xiě)操作,這就是防沖突。常見(jiàn)的非接觸式智能卡中的防沖突機(jī)制主要有:面向比特的防沖突機(jī)制,面向時(shí)隙的防沖突機(jī)制,位和時(shí)隙相結(jié)合的防沖突機(jī)制。
正常情況下讀寫(xiě)器某一時(shí)刻只能對(duì)磁場(chǎng)中的一張射頻IC卡進(jìn)行讀寫(xiě)操作。但是當(dāng)多張IC卡片同時(shí)進(jìn)入讀寫(xiě)器的射頻場(chǎng)時(shí),讀寫(xiě)器怎么辦呢?讀寫(xiě)器需要選出唯一的一張卡片進(jìn)行讀寫(xiě)操作,這就是防沖突。
防沖突機(jī)制是非接觸式智能IC卡特有的問(wèn)題。在接觸式智能IC卡的操作中是不存在沖突的,因?yàn)榻佑|式智能卡的讀寫(xiě)器有一個(gè)專(zhuān)門(mén)的卡座,而且一個(gè)卡座只能插一張卡片,不存在讀寫(xiě)器同時(shí)面對(duì)兩張以上卡片的問(wèn)題。常見(jiàn)的非接觸式智能卡中的防沖突機(jī)制主要有以下幾種:
1.面向比特的防沖突機(jī)制。
ISO14443A中使用這種防沖突機(jī)制,其原理是基于卡片有一個(gè)全球唯一的序列號(hào)。比如Mifare1卡,每張卡片有一個(gè)全球唯一的32位二進(jìn)制序列號(hào)。顯而易見(jiàn),卡號(hào)的每一位上不是“1”就是“0”,而且由于是全世界唯一,所以任何兩張卡片的序列號(hào)總有一位的值是不一樣的,也就說(shuō)總存在某一位,一張卡片上是“0”,而另一張卡片上是“1”。
當(dāng)兩張以上卡片同時(shí)進(jìn)入射頻場(chǎng),讀寫(xiě)器向射頻場(chǎng)發(fā)出卡呼叫命令,問(wèn)射頻場(chǎng)中有沒(méi)有卡片。這些卡片同時(shí)回答“有卡片”;
然后讀寫(xiě)器發(fā)送防沖突命令“把你們的卡號(hào)告訴我”,收到命令后所有卡片同時(shí)回送自己的卡號(hào)。
可能這些卡片卡號(hào)的前幾位都是一樣的。比如前四位都是1010,第五位上有一張卡片是“0”而其他卡片是“1”,于是所有卡片在一起說(shuō)自己的第五位卡號(hào)的時(shí)候,由于有卡片說(shuō)“0”,有卡片說(shuō)“1”,讀寫(xiě)器聽(tīng)出來(lái)發(fā)生了沖突。
讀寫(xiě)器檢測(cè)到?jīng)_突后,對(duì)射頻場(chǎng)中的卡片說(shuō),讓卡號(hào)前四位是“1010”,第五位是“1”的卡片繼續(xù)說(shuō)自己的卡號(hào),其他的卡片不要發(fā)言了。
結(jié)果第五位是“1”的卡片繼續(xù)發(fā)言,可能第五位是“1”的卡片不止一張,于是在這些卡片回送卡號(hào)的過(guò)程中又發(fā)生了沖突,讀寫(xiě)器仍然用上面的辦法讓沖突位是“1”的卡片繼續(xù)發(fā)言,其他卡片禁止發(fā)言,最終經(jīng)過(guò)多次的防沖突循環(huán),當(dāng)只剩下一張卡片的時(shí)候,就沒(méi)有沖突了,最后勝出的卡片把自己完整的卡號(hào)回送給讀寫(xiě)器,讀寫(xiě)器發(fā)出卡選擇命令,這張卡片就被選中了,而其他卡片只有等待下次卡呼叫時(shí)才能再次參與防沖突過(guò)程。
上述防沖突過(guò)程中,當(dāng)沖突發(fā)生時(shí),讀寫(xiě)器總是選擇沖突位為“1”的卡片勝出,當(dāng)然也可以指定沖突位為“0”的卡片勝出。
上述過(guò)程有點(diǎn)擬人化了,實(shí)際情況下讀寫(xiě)器是怎么知道發(fā)生沖突了呢?在前面的數(shù)據(jù)編碼中我們已經(jīng)提到,卡片向讀寫(xiě)器發(fā)送命令使用副載波調(diào)制的曼側(cè)斯特(Manchester)碼,副載波調(diào)制碼元的右半部分表示數(shù)據(jù)“0”,副載波調(diào)制碼元的左半部分表示數(shù)據(jù)“1”,當(dāng)發(fā)生沖突時(shí),由于同時(shí)有卡片回送“0”和“1”,導(dǎo)致整個(gè)碼元都有副載波調(diào)制,讀寫(xiě)器收到這樣的碼元,就知道發(fā)生沖突了。
這種方法可以保證任何情況下都能選出一張卡片,即使把全世界同類(lèi)型的所有卡片都拿來(lái)防沖突,最多經(jīng)過(guò)32個(gè)防沖突循環(huán)就能選出一張卡片。缺點(diǎn)是由于卡序列號(hào)全世界唯一,而卡號(hào)的長(zhǎng)度是固定的,所以某一類(lèi)型的卡片的生產(chǎn)數(shù)量也是一定的,比如常見(jiàn)的Mifare1卡,由于只有4個(gè)字節(jié)的卡序列號(hào),所以其生產(chǎn)數(shù)量最多為2的32次方,即4294967296張。
2.面向時(shí)隙的防沖突機(jī)制
ISO14443B中使用這種防沖突機(jī)制。這里的時(shí)隙(timeslot)其實(shí)就是個(gè)序號(hào)。這個(gè)序號(hào)的取值范圍由讀寫(xiě)器指定,可能的范圍有1-1、1-2、1-4、1-8、1-16。當(dāng)兩張以上卡片同時(shí)進(jìn)入射頻場(chǎng),讀寫(xiě)器向射頻場(chǎng)發(fā)出卡呼叫命令,命令中指定了時(shí)隙的范圍,讓卡片在這個(gè)指定的范圍內(nèi)隨機(jī)選擇一個(gè)數(shù)作為自己的臨時(shí)識(shí)別號(hào)。然后讀寫(xiě)器從1開(kāi)始叫號(hào),如果叫到某個(gè)號(hào)恰好只有一張卡片選擇了這個(gè)號(hào),則這張卡片被選中勝出。如果叫到的號(hào)沒(méi)有卡片應(yīng)答或者有多于一張卡片應(yīng)答,則繼續(xù)向下叫號(hào)。如果取值范圍內(nèi)的所有號(hào)都叫了一遍還沒(méi)有選出一張卡片,則重新讓卡片隨機(jī)選擇臨時(shí)識(shí)別號(hào),直到叫出一張卡片為止。
這種辦法不要求卡片有一個(gè)全球唯一序列號(hào),所以卡片的生產(chǎn)數(shù)量沒(méi)有限制,但是理論上存在一種可能,就是永遠(yuǎn)也選不出一張卡片來(lái)。
Felica采用的也是這種機(jī)制。
3.位和時(shí)隙相結(jié)合的防沖突機(jī)制
ISO15693中使用這種機(jī)制。一方面每張卡片有一個(gè)8字節(jié)的全球唯一序列號(hào),另一方面讀寫(xiě)器在防沖突的過(guò)程中也使用時(shí)隙叫號(hào)的方式,不過(guò)這里的號(hào)不是卡片隨機(jī)選擇的,而是卡片唯一序列號(hào)的一部分。
叫號(hào)的數(shù)值范圍分為0-1和0-15兩種。其大體過(guò)程是,當(dāng)有多張卡片進(jìn)入射頻場(chǎng),讀寫(xiě)器發(fā)出清點(diǎn)請(qǐng)求命令,假如指定卡片的叫號(hào)范圍是0-15,則卡片序列號(hào)最低4位為0000的卡片回送自己的7字節(jié)序列號(hào)。如果沒(méi)有沖突,卡片的序列號(hào)就被登記在PCD中。然后讀寫(xiě)器發(fā)送一個(gè)幀結(jié)束標(biāo)志,表示讓卡片序列號(hào)最低4位為0001的卡片作出應(yīng)答;之后讀寫(xiě)器每發(fā)送一個(gè)幀結(jié)束標(biāo)志,表示序列號(hào)的最低4位加1,直到最低4位為1111的卡片被要求應(yīng)答。如果此過(guò)程中某一個(gè)卡片回送序列號(hào)時(shí)沒(méi)有發(fā)生沖突,讀寫(xiě)器就可選擇此張卡片;如果巡檢過(guò)程中沒(méi)有卡片反應(yīng),表示射頻場(chǎng)中沒(méi)有卡片;如果有卡片反應(yīng)的時(shí)隙發(fā)生了沖突,比如最低4位是1010的卡片回送卡號(hào)時(shí)發(fā)生了沖突,則讀寫(xiě)器在下一次防沖突循環(huán)中指定只有最低4位是1010的卡片參與防沖突,然后用卡片的5-8位作為時(shí)隙,重復(fù)前面的巡檢。如果被叫卡片的5-8位時(shí)隙也相同,之后再用卡片的9-12位作為時(shí)隙,重復(fù)前面的巡檢,依次類(lèi)推。讀寫(xiě)器可以從低位起指定任意位數(shù)的序列號(hào),讓卡號(hào)低位和指定的低位序列號(hào)相同的卡片參與防沖突循環(huán),卡片用指定號(hào)前面的一位或4位作為時(shí)隙對(duì)讀寫(xiě)器的叫號(hào)作出應(yīng)答。由于卡片的序列號(hào)全球唯一,所以任何兩張卡片總有某個(gè)連續(xù)的4位二進(jìn)制數(shù)不一樣,因而總能選出一張卡片。需要指出的是,當(dāng)選定的時(shí)隙數(shù)為1時(shí),這種防沖突機(jī)制等同于面向比特的防沖突機(jī)制。
另外需要說(shuō)明的是,TTF(Tag Talk First)的卡片一般是無(wú)法防沖突的。這種卡片一進(jìn)入射頻場(chǎng)就主動(dòng)發(fā)送自己的識(shí)別號(hào),當(dāng)有多張卡片同時(shí)進(jìn)入射頻場(chǎng)時(shí)就會(huì)發(fā)生不讀卡的現(xiàn)象。這時(shí)只有靠卡片的持有者自己去避免沖突了。