一.前言
ZLG500B 是串行讀寫模塊, 內含主要器件有符合ISO14443A標準的讀卡芯片、微控制器和印制板天線。它可以讀寫符合ISO14443A標準的的Mifare 1無線智能卡,應用廣泛,如制作各種刷卡器[1]。
此模塊的主要特點如下。
.四層電路板設計雙面表貼,EMC性能優良;
.UART串行接口能外接RS232 或RS485芯片;
.自動波特率探測;
.控制線輸出口;
.能讀寫無線智能卡芯片內部EEPROM;
.發光二極管指示模塊當前狀態;
實際尺寸:約41.5mm ×25.3mm,見下圖1。
圖1 ZLG500B的非接觸讀卡模塊
圖 2 液晶屏顯示卡號
應用此模塊制作的刷卡器顯示卡號的圖片見上圖2。
下面對與此模塊使用有關的內容逐一介紹。
二.模塊硬件電路設計
(一)射頻芯片介紹
模塊內含的讀卡芯片將標準的調制和解調電路完整的集成起來,支持所有的以13.56Mhz頻率通信的非接觸式IC卡通訊協議[2]。
讀卡芯片內部的發射部分能夠在不需要額外的激活電路的情況下就可驅動一個針對近離耦合(最大到100毫米)而設計的天線。接收電路部分則能夠健壯和高效的執行將符合ISO14443A兼容的信號解調和解碼。
數字電路部分則采用符合ISO14443A標準的幀和錯誤檢測(校驗和CRC),另外還支持快
速CRYPTO 1的安全算法去驗證MIFARE類的卡片。
完善的并行接口能夠直接連接到通用的8位微處理器上,以便靈活的設計讀卡終端。
射頻芯片特征如下。
.輸出緩沖驅動和連接外部天線,使外部器件數目最小化;
.并行微處理器接口,外部地址鎖存,自動識別接口類型;
.有IRQ中斷腳,靈活的中斷操作;
.硬件復位,掉電模式,低功耗功能,可編程定時器;
.唯一的產品序列號。
(二)模塊與單片機的接口
ZLG500B模塊可方便地與單片機進行連接,接口如下圖4所示。通常采用8位單片機即可實現與模塊通過串口連接的功能。讀出的卡號由1602液晶顯示器顯示。
圖4 模塊與單片機的接口電路原理圖
三.ZLG500B 讀卡模塊數據傳輸協議
(一)Mifare 1非接觸式IC射頻卡工作原理
為了理解好下面介紹的ZLG500B 讀卡模塊數據傳輸協議,有必要先對Mifare 1非接觸式
IC射頻卡工作原理了解清楚[3-4]。
- Mifare 1非接觸式IC射頻卡特點
Mifare 1 IC智能(射頻)卡采用先進的芯片制造工藝制作。內建有高速的CMOS EEPROM,MCU等。卡片上除了IC微晶片及一副高效率天線外,無任何其他元件。
卡片上無源(無任何電池),工作時的電源能量由卡片讀寫器天線發送無線電載波信號耦合到卡片上天線而產生電能,一般可達2V以上,供卡片上IC工作。工作頻率 13.56MHZ。
整個卡片包含了兩個部分,RF射頻接口電路和數字電路部分。
- RF射頻接口電路
在RF射頻接口電路中,主要包括有波形轉換模塊。它可將卡片讀寫器上的13.56MHZ的無線電調制頻率接收,一方面送調制/解調模塊,另一方面進行波形轉換,將正弦波轉換為方波,然后對其整流濾波,由電壓調節模塊對電壓進行進一步的處理,包括穩壓等,最終輸出供給卡片上的各電路。
- Mifare 1非接觸式IC射頻卡工作過程
(1)ATR模塊:Answer to Request(“請求之應答“)
當一張Mifare 1卡片處在卡片讀寫器的天線的工作范圍之內時,程序員控制讀寫器向卡片發出REQUEST all(或REQUEST std) 命令后,卡片的ATR將啟動,將卡片Block 0 中的卡片類型(TagType)號共2個字節傳送給讀寫器,建立卡片與讀寫器的第一步通信聯絡。
如果不進行第一步的ATR工作,讀寫器對卡片的其他操作(Read/Write等)將不會進行。
卡片的類型(TagType)號共2個字節,可能為:0004H
(2)AntiCollision模塊:防止(卡片)重疊功能
如果有多張Mifare 1卡片處在卡片讀寫器的天線的工作范圍之內時,AntiCollision模塊的防重疊功能將被啟動工作。在程序員控制下的卡片讀寫器將會首先與每一張卡片進行通信,取得每一張卡片的系列號。由于Mifare 1卡片每一張都具有其唯一的系列號,決不會相同,因此卡片讀寫器根據卡片的序列號來識別、區分已選的卡片,卡片讀寫器中的MCM中的AntiCollision防重疊功能配合卡片上的防重疊功能模塊,由程序員來控制讀寫器,根據卡片的序列號來選定一張卡片。被選中的卡片將直接與讀寫器進行數據交換,未被選擇的卡片處于等待狀態,隨時準備與卡片讀寫器進行通信。
AntiCollision模塊(防重疊功能)啟動工作時,卡片讀寫器將得到卡片的序列號Serial Number。序列號Serial Number存儲在卡片的Block 0中,共有5個字節,實際有用的為4個字節,另一個字節為序列號Serial Number的校驗字節。
序列號Serial Number中實際有用的4個字節,可能為:007e0a42h 。
(3) Select Application 模塊:主要用于卡片的選擇。
當卡片與讀寫器完成了上述的二個步驟,程序員控制的讀寫器要想對卡片進行讀寫操
作,必須對卡片進行“Select” 操作。以使卡片真正地被選中。
被選中的卡片將卡片上存儲在Block 0中的卡片的容量“Size” 字節傳送給讀寫器。當讀寫器收到這一字節后,將明確可以對卡片進行進一步的操作了。例如,可以進行密碼驗證等等。
讀寫器收到的“Size” 字節可能為:88h。
(4)Authentication & Access Control 模塊: 認證及存取控制模塊
在確認了上述的三個步驟,確認已經選擇了一張卡片時,程序員對卡片進行讀寫操作之前,必須對卡片上已經設置的密碼進行認證,如果匹配,則允許進一步的Read/Write操作。
Mifare 1 卡片上有16個扇區,每個扇區都可分別設置各自的密碼,互不干涉。因此每個扇區可獨立地應用于一個應用場合。整個卡片可以設計成“一卡通”形式來應用。
(5)Control & Arithmetic Unit 控制及算術運算單元
這一單元是整個卡片的控制中心,是卡片的“頭腦”。它主要進行對整個卡片的各個單位進行微操作控制,協調卡片的各個步驟;同時它還對各種收/發的數據進行算術運算處理,遞增/遞減處理,CRC運算處理等等。是卡片中內建的中央微處理機(MCU)單元。
(6) RAM/ROM 單元
RAM主要配合控制及算術運算單元,將運算的結果進行暫時存儲,如果某些數據需要存儲到EEPROM,則由控制及算術運算單元取出送到EEPROM存儲器中;如果某些數據需要傳送給讀寫器,則由控制及算術運算單元取出,經過RF射頻接口電路的處理,通過卡片上的天線傳送給卡片讀寫器。RAM中的數據在卡片失掉電源后(卡片離開讀寫器天線的有效工作范圍內)將被清除。
同時,ROM中還固化了卡片運行所需要的必要的程序指令,由控制及算術運算單元取出去對每個單元進行微指令控制。使卡片能有條不紊地與卡片的讀寫器進行數據通信。
(7) Crypto Unit 數據加密單元
該單元完成對數據的加密處理及密碼保護。加密的算法可以為DES標準算法或其他。
(8) EEPROM INTERFACE/EEPROM MEMORY EEPROM存儲器及其接口電路
該單元主要用于存儲數據。EEPROM中的數據在卡片失掉電源后(卡片離開讀寫器天線的有效工作范圍內)仍將被保持。用戶所要存儲的數據被存放在該單元中。Mifare 1卡片中的這一單元容量為8196bit(1 Kbyte)。分為16個扇區。
在ZLG500B模塊中,已經固化了上述操作的程序,應用ZLG500B模塊制作產品的主要工作就是:熟悉讀卡模塊ZLG500B 與主機微處理器之間的串行通信軟件的通信協議和命令。
(二) ZLG500B 讀卡模塊數據傳輸協議
1.自動波特率探測
UART 接口一幀的數據格式為1 個起始位,8 個數據位,無奇偶校驗位,1 個停止位,自動波特率探測。ZLG500B上電后將讀卡芯片內EEPROM中地址為0x7F單元的內容讀出,取其低3位來初始化自己的波特率。在接收主機發出的STX的同時,測量波特率,若一致,則繼續通信;若不一致,則修改自己的波特率與主機一致,存入0x7F單元,準備接收下一個STX。
ZLG500B波特率與讀卡芯片內EEPROM中0x7F單元低3位值的對應關系見表1。
2.控制字符定義
控制字符定義見表2。
3.協議描述
通信必須先由主機發送命令和數據給ZLG500B, ZLG500B執行命令完畢后,將命令執行的狀態和響應數據發回主機。開始通信前,收發雙方必須處于就緒狀態。首先主機發出STX, 然后等待ZLG500B的響應ACK。 若在10ms 內未檢測到此響應,或收到NAK ,則再次發送STX, 如此反復3次,若3次均未收到正確應答ACK, 則退出本次傳輸,將錯誤代碼返回給主程序,由主程序進行錯誤處理。若主機收到ZLG500B 正確響應ACK ,則可將數據塊發送出去,最后發送1 個終止符ETX結束本次發送。主機發送格式見表3。
然后主機等待ZLG500B發回的狀態和響應數據。若在300ms內未檢測到響應,則退出本次傳輸,且向主程序報告錯誤代碼。ZLG500B發送格式見表4 。
- ZLG500B 和微處理器命令C51 函數
(1)底層函數和高級函數
底層函數和高級函數見表5,已經固化在ZLG500B模塊中,使用時直接調用即可。
(2) 函數描述舉例
下面是C51 函數聲明,包含在頭文件ZLG500B.h 中,寫應用程序時將其包含在應用函數中即可。
舉一個例子: 請求Request equest函數介紹如下。
聲明:
uchar mifs_request(uchar _Mode,uchar idata *_TagType);
MCU ⇒ ZLG500:
命令符:0x41
長度:1
Data[0]: _Mode
ZLG500 ⇒ MCU:
狀態值:MI_OK, MI_QUIT ,MI_NOTAGERR, MI_BITCOUNTERR ,COMM_ERR
長度:2
Data[0]: tagtype (低字節)
Data[1]: tagtype (高字節)
參數:
_Mode:
ALL=0 :請求天線范圍內IDLE 狀態的卡HALT狀態的除外。
ALL=1: 請求天線范圍內的所有卡。
_tagtype :當發生錯誤時不返回任何內容Len=0
描述:
此函數發送Request 命令檢查在有效范圍內是否有卡存在這個函數在選擇一個新的卡是必須調用的。
四.應用程序設計
(一)總的流程圖
應用ZLG500B模塊,讀取非接觸卡卡號并在液晶屏上顯示出來的流程圖見下圖4。
圖4 應用程序流程圖
在上圖中,初始化部分包括對讀卡模塊復位以及單片機和讀卡芯片內部各硬件寄存器設定初始值。
(二)具體程序
程序由三大部分組成。
主程序:由main.c 和main.h構成。其中main.c部分完成讀寫卡片的功能,對射頻芯片的操作都是通過訪問和更改射頻芯片內的寄存器來實現射頻信號的收發的,并實現對液晶屏的顯示控制。
ZLG500B 與主機微處理器之間的串行通信軟件的通信協議和命令函數:由zlg500B.C 和zlg500B.H構成。在主程序中出現的各種命令都在zlg500B.C中具體實現。
液晶屏顯示程序:由lcd.h構成。由于此液晶顯示模塊本身不帶字庫,故需要字符點陣顯示數據,在lcd.h提供。
由于篇幅限制,下面只介紹程序的概要 。
1.主程序部分
#define __SRC
#include "main.h"
#undef __SRC
#include "zlg500B.h"http://主要是ZIG500B模塊里內嵌的所有函數的定義
#include "lcd.h"http://主要是液晶顯示模塊里顯示字符的點陣數據
……
sbit zlg500B_RST=P1^4;//定義復位讀卡模塊的管腳
……
uchar code Nkey_a[6] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5};
uchar code Nkey_b[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
……
void ASCII2BCD(void)//讀取卡號并顯示在液晶屏上
{
write_ch(31,2,num[card_snr[3]/16]);write_ch(39,2,num[card_snr[3]%16]);
write_ch(47,2,num[card_snr[2]/16]);write_ch(55,2,num[card_snr[2]%16]);
write_ch(63,2,num[card_snr[1]/16]);write_ch(72,2,num[card_snr[1]%16]);
write_ch(80,2,num[card_snr[0]/16]);write_ch(88,2,num[card_snr[0]%16]);
}
main( )
{
……
serial_init();//串口初始化
//定時器工作方式設置
/*TMOD=0x21;
TH0=0x4C;
TL0=0x00;
ET0=1;
ES=1;*/
EA=1;
……
}
- ZLG500B 與主機微處理器之間的串行通信軟件的通信協議和命令函數
#include "main.h"
#define __SRC
#include "zlg500B.h"
#undef __SRC
#if mifs_read_en
uchar mifs_read(uchar _Adr,uchar idata *_Data)// 從卡中相應地址中讀出一個 16字節的塊
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x46;
ser_buffer[LENGTH]=0x01;
ser_buffer[DATA]=_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_Data,&ser_buffer[DATA],16);
}
return ser_buffer[STATUS];
}
#endif
……
}
五.結束語
本文介紹了內含符合ISO14443A標準的讀卡芯片的非接觸讀卡模塊ZLG500B的使用。文中首先介紹了Mifare 1非接觸式IC射頻卡的工作過程,然后對非接觸讀卡模塊本身的硬件電路的核心部分也做了介紹;其次還介紹了讀卡模塊與8位微處理器之間的串行通信協議和命令;最后介紹了實現通信協議的具體軟件中的主要部分。通過本模塊的應用,可達到降低設計難度,提高產品質量,和減少開發費用的目的。這也是現在通用的一種開發思路和做法。
特別說明:本文中ZLG500B模塊本身部分的原理圖和ZLG500B模塊本身部分的軟件版權歸其開發者周立功單片機科技公司所有。