采用曼碼調(diào)制的非接觸式IC卡譯碼軟件設(shè)計(jì)
目前,隨著技術(shù)的發(fā)展和應(yīng)用的需求,IC卡(又稱智能卡)在人們的日常生活中已經(jīng)得到了廣泛應(yīng)用。通常,IC卡可以分為接觸式IC卡和非接觸式IC卡兩類。接觸式IC卡是卡與讀卡器直接物理接觸進(jìn)行數(shù)據(jù)交換,部分金屬電路是裸露在外面的,如手機(jī)卡、公共IC電話號(hào)等。非接觸式IC卡又叫射頻卡,射頻與讀卡器之間通過(guò)射頻信號(hào)進(jìn)行數(shù)據(jù)交換,不需物理接觸,電路是封裝在內(nèi)部的,如公交車的收費(fèi)卡等。非接觸式IC卡與接觸式IC卡相比,只有可靠性高,使用方便,不怕雨水、靜電以及沒(méi)有接觸劃傷等優(yōu)點(diǎn),因此,得到了更廣泛的應(yīng)用。這種非接觸式IC卡采用的技術(shù)稱為RFID技術(shù)。
射頻卡與讀卡器之間的射頻信號(hào)調(diào)制方式常見的有FSK(調(diào)頻)、PSK(調(diào)相)、BIPH(雙相)、Manchester(曼徹斯特)。其中,曼徹斯特調(diào)制方式一般用在低頻,低成本的產(chǎn)品中,雖然在國(guó)外采用曼碼調(diào)制的IC 卡已不常用,但由于其價(jià)格低廉的優(yōu)勢(shì),目前在我國(guó)采用此種調(diào)制方式的低端IC卡還具有廣泛的應(yīng)用。在實(shí)際應(yīng)用中,使用者有時(shí)會(huì)遇到對(duì)曼徹斯特編碼進(jìn)行譯碼的問(wèn)題,鑒于此,本文介紹了一種譯碼方法,以供讀者作為參考。
1 無(wú)線射頻識(shí)別(RFID)技術(shù)概述
1.1 RFID系統(tǒng)的基本工作原理
無(wú)線射頻識(shí)別(RFID,radio frequency identification)技術(shù)是一種非接觸式的自動(dòng)識(shí)別技術(shù),基本原理是利用空間電磁感應(yīng)或者電磁傳播來(lái)進(jìn)行通信,以達(dá)到自動(dòng)識(shí)別目標(biāo)對(duì)象并獲取相關(guān)數(shù)據(jù)的目的。
RFID系統(tǒng)由射頻卡和射頻卡讀寫器兩部分組成,如圖1所示,射頻卡與讀寫器之間通過(guò)耦合元件實(shí)現(xiàn)射頻信號(hào)的空間(無(wú)接觸)耦合,在耦合通道內(nèi),根據(jù)時(shí)序關(guān)系,實(shí)現(xiàn)能量傳遞和數(shù)據(jù)交換。
1.2 射頻卡讀寫器
在實(shí)際應(yīng)用硬件電路中,讀寫器一般由天線、基站芯片、MCU組成。其中,基站芯片主要實(shí)現(xiàn)高頻接口模塊的功能,用于完成數(shù)據(jù)的調(diào)制、發(fā)射和射頻的接收以及數(shù)據(jù)的解調(diào)任務(wù)。
下面簡(jiǎn)單介紹一種射頻卡基站芯片U2270B,U2270B是一個(gè)能對(duì)IC卡進(jìn)行讀寫操作的射頻卡基站芯片,主要特點(diǎn)有:
振蕩器能產(chǎn)生100kHz~150kHz的載波頻率,并可通過(guò)外接電阻進(jìn)行精確調(diào)整,其典型應(yīng)用頻率為125kHz;
適用于曼徹斯特編碼和雙相位編碼;
帶有微處理器接口,可與單片機(jī)直接連接;
125kHz時(shí)的典型讀寫距離為15mm。
在實(shí)際應(yīng)用中,當(dāng)射頻卡進(jìn)入到由讀寫器天線產(chǎn)生的射頻場(chǎng)內(nèi)時(shí),由于電磁感應(yīng)的作用而得到觸發(fā),從射頻卡發(fā)出的負(fù)載調(diào)制信號(hào)會(huì)在基站天線上產(chǎn)生微弱的調(diào)幅,這樣,基站芯片即可回收射頻卡調(diào)制數(shù)據(jù)流。應(yīng)當(dāng)說(shuō)明,當(dāng)返回的射頻卡調(diào)制數(shù)據(jù)流采用的是曼徹斯特編碼形式時(shí),U2270B通過(guò)內(nèi)部的一系列處理,將與MCU接口兼容的標(biāo)準(zhǔn)曼徹斯特編碼信號(hào)輸出給MCU,U2270B不能完成曼徹斯特編碼的解調(diào), 解調(diào)工作必須由MCU軟件來(lái)完成,這也是本文的意義所在。
1.3 射頻卡
射頻卡有很多種分類方法,其中按芯片可分為三類:只讀卡,讀寫卡和CPU卡。
下面介紹一種只讀卡(又稱為ID卡)EM4100,它靠讀寫器感應(yīng)供電并讀出存儲(chǔ)在芯片EEPROM中的唯一卡號(hào),卡號(hào)在封裝前一次寫入,封卡后不能更改。
EM4100ID卡的主要特點(diǎn):
載波頻率RF為125kHz;
感應(yīng)距離為2~15cm;
數(shù)據(jù)存儲(chǔ)容量共64位,包括制造商、發(fā)行版本號(hào)和用戶代碼;
數(shù)據(jù)的傳送速率有RF/64bit/s、RF/32bit/s和RF/16bit/s三種。
卡內(nèi)數(shù)據(jù)格式:總共64位,其中包括9個(gè)起始位,40個(gè)數(shù)據(jù)位(前8位為版本或制造商信息,后32位為用戶信息),10個(gè)行校驗(yàn)位,4個(gè)列校驗(yàn)位,1個(gè)結(jié)束停止位。
在讀寫器工作狀態(tài)下,當(dāng)ID卡進(jìn)入讀寫器產(chǎn)生的射頻場(chǎng)內(nèi)時(shí),依次將卡內(nèi)64位數(shù)據(jù)循環(huán)輸出,直到ID卡離開讀寫器失電為止。
2 曼徹斯特譯碼軟件設(shè)計(jì)
假如對(duì)EM4100 ID卡進(jìn)行解碼,載波頻率RF采用為125kHz,數(shù)據(jù)傳送速率采用RF/64,那么傳送一位數(shù)據(jù)所需要的時(shí)鐘周期T=512μs。首先,由于曼徹斯特編碼包含了同步時(shí)鐘信號(hào),第一步必須提取出同步時(shí)鐘信號(hào),并在提取出同步時(shí)鐘信號(hào)的同時(shí),將會(huì)得到第一個(gè)數(shù)據(jù)。之后,就可進(jìn)行數(shù)據(jù)的采集。在數(shù)據(jù)采集時(shí),先采集到起始位9個(gè)1,再采集后面的數(shù)據(jù)。然后進(jìn)行奇偶校驗(yàn)和對(duì)數(shù)據(jù)的一些處理。程序的流程圖如圖2所示。
結(jié)合圖3來(lái)說(shuō)明一下提取同步時(shí)鐘信號(hào)和取得第一個(gè)數(shù)據(jù)的方法。
曼徹斯特編碼是在位周期中間產(chǎn)生跳變,所以可以通過(guò)檢測(cè)曼碼的上升沿或者下降沿來(lái)提取出同步時(shí)鐘信號(hào),具體方法為:在程序檢測(cè)出第一個(gè)上升沿(或下降沿)之間,如果檢測(cè)出t=T’(T’為傳送一位數(shù)據(jù)所需要的時(shí)間,理想情況下為位時(shí)鐘周期T)時(shí)間的低電平(或高電平),那么此上升沿(或下降沿)必發(fā)生在位時(shí)鐘周期的中間,在取得同步時(shí)鐘信號(hào)的同時(shí),將得第一個(gè)數(shù)據(jù)位1(或0),將當(dāng)前收到的數(shù)據(jù)位存放入微控制器的存儲(chǔ)器中,并同時(shí)將此值賦給一個(gè)狀態(tài)位con_receive=1(或0),此狀態(tài)位在檢測(cè)下一個(gè)數(shù)據(jù)時(shí)會(huì)用到。以圖3為例(本例是通過(guò)上升沿來(lái)提取同步時(shí)鐘信號(hào)),在b上升沿之前,檢測(cè)出有t=T’時(shí)間的低電平,那么b上升沿必產(chǎn)生在位時(shí)鐘周期中間,并同時(shí)取得第一個(gè)數(shù)據(jù)1,將數(shù)據(jù)1存入寄存器,并賦給狀態(tài)位con_receive=1,用于下一個(gè)數(shù)據(jù)的檢測(cè)。
2.1 數(shù)據(jù)采集
在提取出同步時(shí)鐘信號(hào)后,就可以通過(guò)檢測(cè)出兩個(gè)上升沿(或下降沿)的時(shí)間間隔來(lái)提取數(shù)據(jù)了。兩個(gè)上升沿(或下降沿)的時(shí)間間隔總共有t=T’,t=1.5T’,t=2T’三種情況。
如果檢測(cè)到兩個(gè)上升沿之間的間隔t=T’時(shí),則收到一個(gè)與前一個(gè)邏輯值相同的數(shù)據(jù),例如圖3,在b上升沿之后t=T’時(shí)間的的c處檢測(cè)到上升沿,得到與前一個(gè)邏輯值con_receive相同的數(shù)據(jù)1。將此數(shù)據(jù)存放入存儲(chǔ)器中,并同時(shí)將當(dāng)前邏輯值1賦給狀態(tài)位con_receive;如果檢測(cè)到兩個(gè)上升沿之間的時(shí)間間隔t=1.5T’時(shí),兩種情況:當(dāng)前一個(gè)數(shù)據(jù)值con_receive為1時(shí),得到兩個(gè)數(shù)據(jù)00,并將邏輯值0賦給con_receive;當(dāng)前一個(gè)數(shù)據(jù)為0時(shí),得到一個(gè)數(shù)據(jù)1,并將邏輯值1賦給con_receive。如圖3,在c上升沿之后t=1.5T’時(shí)間的d處檢測(cè)到上升沿,由于在c上升沿得到的邏輯值為1,則得到數(shù)據(jù)00,con_receive的值也相應(yīng)變?yōu)?;又經(jīng)過(guò)T’時(shí)間后到達(dá)e上升沿,得到與前一個(gè)邏輯值相同的數(shù)據(jù)0;又經(jīng)過(guò)t=1.5T’時(shí)間到達(dá)f上升沿,由于前一個(gè)數(shù)據(jù)的邏輯值為0,則得到數(shù)據(jù)1,con_receive也相應(yīng)變?yōu)?;如果檢測(cè)到兩個(gè)上升沿之間的時(shí)間間隔t=2T’時(shí),得到兩個(gè)數(shù)據(jù)01,并將邏輯值1賦給con_receive。如圖3,在f上升沿之后的t=2T’時(shí)間的g處檢測(cè)到上升沿,得到兩個(gè)數(shù)據(jù)01;
如果檢測(cè)到兩個(gè)上升沿之間的時(shí)間間隔t不等于T’、1.5T’、2T’中的任何一個(gè),則采集數(shù)據(jù)出錯(cuò)。
在采集數(shù)據(jù)過(guò)程中,由于一些干擾或者其他因素,采集數(shù)據(jù)錯(cuò)誤是無(wú)法避免的,出錯(cuò)處理部分可由讀者自己決定作如何處理。比如:可以選擇為重新開始提取同步時(shí)鐘信號(hào),重新譯碼,如果在連續(xù)的重新譯碼一定的次數(shù)之后,還沒(méi)有得到64位數(shù)據(jù)則報(bào)警等。
2.2 數(shù)據(jù)校驗(yàn)及數(shù)據(jù)處理
為了便于對(duì)讀出的數(shù)據(jù)進(jìn)行奇偶機(jī)校驗(yàn),將起始位9個(gè)1之后的55個(gè)數(shù)據(jù)按每5位作為一個(gè)字節(jié)進(jìn)行存放,在數(shù)據(jù)全部讀出后,根據(jù)ID卡的數(shù)據(jù)結(jié)構(gòu),對(duì)數(shù)據(jù)進(jìn)行奇偶校驗(yàn)。奇偶校驗(yàn)正確之后,可以對(duì)這些原始數(shù)據(jù)做進(jìn)一步的處理以作實(shí)驗(yàn)應(yīng)用。
2.3 其他一些說(shuō)明
在理想狀態(tài)下,傳送一位數(shù)據(jù)的時(shí)間T’應(yīng)該等于位時(shí)鐘周期T,由于射頻場(chǎng)信號(hào)的強(qiáng)弱和外界的影響,T’不是一個(gè)穩(wěn)定的值,因此在實(shí)際應(yīng)用中,T’是一個(gè)取值范圍。例如:例如:當(dāng)位時(shí)鐘周期T=512μs,理想狀態(tài)下,T’=T=512μs,但實(shí)際中T’選取一個(gè)范圍,比如可以取400μs<T’<580μs,640μs<1.5T’<820μs,870μs<2T’<1100μs(這些取值范圍并不是固定的,也沒(méi)有太嚴(yán)格的要求。在實(shí)際應(yīng)用中,最好對(duì)所使用的ID卡進(jìn)行測(cè)量一下,然后參考測(cè)量的結(jié)果來(lái)選取。
有些ID卡曼徹斯特編碼是位數(shù)據(jù)1對(duì)應(yīng)著電平下位,位數(shù)據(jù)0對(duì)應(yīng)著電平上跳,當(dāng)對(duì)這種卡進(jìn)行解碼時(shí),只要把程序中檢測(cè)上升沿變?yōu)闄z測(cè)下降沿、檢測(cè)下降沿變?yōu)闄z測(cè)上升沿即可。
檢測(cè)上升沿(或下降沿)可以采用中斷法或者掃描法。當(dāng)采用掃描法時(shí),由于在現(xiàn)實(shí)工作中,數(shù)據(jù)信號(hào)會(huì)受到調(diào)制、解調(diào)、噪聲各種效應(yīng)的影響,其上升沿和下降沿存在抖動(dòng),可以采用鍵盤消除抖動(dòng)的辦法消除抖動(dòng)的影響。
如果奇偶校驗(yàn)連續(xù)NG一定次數(shù)之后,還沒(méi)有得到正確的64位數(shù)據(jù),則可以采用報(bào)警或者其它辦法處理。
本文通過(guò)對(duì)采用曼碼調(diào)制的ID卡進(jìn)行解碼為例,目的是介紹一種對(duì)曼碼進(jìn)行譯碼的方法,能過(guò)實(shí)際應(yīng)用,本程序數(shù)據(jù)首讀出率高,誤碼率極低,對(duì)讀者具有一定的參考意義。
評(píng)論