性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

利用非接觸讀卡模塊進行開發(fā)設(shè)計

一.前言

ZLG500B 是串行讀寫模塊, 內(nèi)含主要器件有符合ISO14443A標準的讀卡芯片、微控制器和印制板天線。它可以讀寫符合ISO14443A標準的的Mifare 1無線智能卡,應(yīng)用廣泛,如制作各種刷卡器[1]。

此模塊的主要特點如下。

.四層電路板設(shè)計雙面表貼,EMC性能優(yōu)良;

.UART串行接口能外接RS232 或RS485芯片;

.自動波特率探測;

.控制線輸出口;

.能讀寫無線智能卡芯片內(nèi)部EEPROM;

.發(fā)光二極管指示模塊當前狀態(tài);

實際尺寸:約41.5mm ×25.3mm,見下圖1。

圖1 ZLG500B的非接觸讀卡模塊

圖 2  液晶屏顯示卡號

應(yīng)用此模塊制作的刷卡器顯示卡號的圖片見上圖2。

下面對與此模塊使用有關(guān)的內(nèi)容逐一介紹。

   

二.模塊硬件電路設(shè)計

(一)射頻芯片介紹

模塊內(nèi)含的讀卡芯片將標準的調(diào)制和解調(diào)電路完整的集成起來,支持所有的以13.56Mhz頻率通信的非接觸式IC卡通訊協(xié)議[2]。

讀卡芯片內(nèi)部的發(fā)射部分能夠在不需要額外的激活電路的情況下就可驅(qū)動一個針對近離耦合(最大到100毫米)而設(shè)計的天線。接收電路部分則能夠健壯和高效的執(zhí)行將符合ISO14443A兼容的信號解調(diào)和解碼。

數(shù)字電路部分則采用符合ISO14443A標準的幀和錯誤檢測(校驗和CRC),另外還支持快

速CRYPTO 1的安全算法去驗證MIFARE類的卡片。

完善的并行接口能夠直接連接到通用的8位微處理器上,以便靈活的設(shè)計讀卡終端。

射頻芯片特征如下。

.輸出緩沖驅(qū)動和連接外部天線,使外部器件數(shù)目最小化;

.并行微處理器接口,外部地址鎖存,自動識別接口類型;

.有IRQ中斷腳,靈活的中斷操作;

.硬件復(fù)位,掉電模式,低功耗功能,可編程定時器;

.唯一的產(chǎn)品序列號。

 

(二)模塊與單片機的接口

ZLG500B模塊可方便地與單片機進行連接,接口如下圖4所示。通常采用8位單片機即可實現(xiàn)與模塊通過串口連接的功能。讀出的卡號由1602液晶顯示器顯示。

圖4   模塊與單片機的接口電路原理圖

   

三.ZLG500B 讀卡模塊數(shù)據(jù)傳輸協(xié)議

(一)Mifare 1非接觸式IC射頻卡工作原理

為了理解好下面介紹的ZLG500B 讀卡模塊數(shù)據(jù)傳輸協(xié)議,有必要先對Mifare 1非接觸式

IC射頻卡工作原理了解清楚[3-4]。

  1. Mifare 1非接觸式IC射頻卡特點

Mifare 1 IC智能(射頻)卡采用先進的芯片制造工藝制作。內(nèi)建有高速的CMOS EEPROM,MCU等??ㄆ铣薎C微晶片及一副高效率天線外,無任何其他元件。

   

卡片上無源(無任何電池),工作時的電源能量由卡片讀寫器天線發(fā)送無線電載波信號耦合到卡片上天線而產(chǎn)生電能,一般可達2V以上,供卡片上IC工作。工作頻率 13.56MHZ。

整個卡片包含了兩個部分,RF射頻接口電路和數(shù)字電路部分。

  1. RF射頻接口電路

在RF射頻接口電路中,主要包括有波形轉(zhuǎn)換模塊。它可將卡片讀寫器上的13.56MHZ的無線電調(diào)制頻率接收,一方面送調(diào)制/解調(diào)模塊,另一方面進行波形轉(zhuǎn)換,將正弦波轉(zhuǎn)換為方波,然后對其整流濾波,由電壓調(diào)節(jié)模塊對電壓進行進一步的處理,包括穩(wěn)壓等,最終輸出供給卡片上的各電路。

  1. Mifare 1非接觸式IC射頻卡工作過程

(1)ATR模塊:Answer to Request(“請求之應(yīng)答“)

當一張Mifare 1卡片處在卡片讀寫器的天線的工作范圍之內(nèi)時,程序員控制讀寫器向卡片發(fā)出REQUEST all(或REQUEST std) 命令后,卡片的ATR將啟動,將卡片Block 0 中的卡片類型(TagType)號共2個字節(jié)傳送給讀寫器,建立卡片與讀寫器的第一步通信聯(lián)絡(luò)。

如果不進行第一步的ATR工作,讀寫器對卡片的其他操作(Read/Write等)將不會進行。

卡片的類型(TagType)號共2個字節(jié),可能為:0004H

(2)AntiCollision模塊:防止(卡片)重疊功能

如果有多張Mifare 1卡片處在卡片讀寫器的天線的工作范圍之內(nèi)時,AntiCollision模塊的防重疊功能將被啟動工作。在程序員控制下的卡片讀寫器將會首先與每一張卡片進行通信,取得每一張卡片的系列號。由于Mifare 1卡片每一張都具有其唯一的系列號,決不會相同,因此卡片讀寫器根據(jù)卡片的序列號來識別、區(qū)分已選的卡片,卡片讀寫器中的MCM中的AntiCollision防重疊功能配合卡片上的防重疊功能模塊,由程序員來控制讀寫器,根據(jù)卡片的序列號來選定一張卡片。被選中的卡片將直接與讀寫器進行數(shù)據(jù)交換,未被選擇的卡片處于等待狀態(tài),隨時準備與卡片讀寫器進行通信。

AntiCollision模塊(防重疊功能)啟動工作時,卡片讀寫器將得到卡片的序列號Serial Number。序列號Serial Number存儲在卡片的Block 0中,共有5個字節(jié),實際有用的為4個字節(jié),另一個字節(jié)為序列號Serial Number的校驗字節(jié)。

序列號Serial Number中實際有用的4個字節(jié),可能為:007e0a42h 。

(3) Select Application 模塊:主要用于卡片的選擇。

當卡片與讀寫器完成了上述的二個步驟,程序員控制的讀寫器要想對卡片進行讀寫操

作,必須對卡片進行“Select” 操作。以使卡片真正地被選中。

 被選中的卡片將卡片上存儲在Block 0中的卡片的容量“Size” 字節(jié)傳送給讀寫器。當讀寫器收到這一字節(jié)后,將明確可以對卡片進行進一步的操作了。例如,可以進行密碼驗證等等。

 讀寫器收到的“Size” 字節(jié)可能為:88h。

(4)Authentication & Access Control 模塊: 認證及存取控制模塊

在確認了上述的三個步驟,確認已經(jīng)選擇了一張卡片時,程序員對卡片進行讀寫操作之前,必須對卡片上已經(jīng)設(shè)置的密碼進行認證,如果匹配,則允許進一步的Read/Write操作。

Mifare 1  卡片上有16個扇區(qū),每個扇區(qū)都可分別設(shè)置各自的密碼,互不干涉。因此每個扇區(qū)可獨立地應(yīng)用于一個應(yīng)用場合。整個卡片可以設(shè)計成“一卡通”形式來應(yīng)用。

(5)Control & Arithmetic Unit 控制及算術(shù)運算單元

這一單元是整個卡片的控制中心,是卡片的“頭腦”。它主要進行對整個卡片的各個單位進行微操作控制,協(xié)調(diào)卡片的各個步驟;同時它還對各種收/發(fā)的數(shù)據(jù)進行算術(shù)運算處理,遞增/遞減處理,CRC運算處理等等。是卡片中內(nèi)建的中央微處理機(MCU)單元。

(6) RAM/ROM 單元

RAM主要配合控制及算術(shù)運算單元,將運算的結(jié)果進行暫時存儲,如果某些數(shù)據(jù)需要存儲到EEPROM,則由控制及算術(shù)運算單元取出送到EEPROM存儲器中;如果某些數(shù)據(jù)需要傳送給讀寫器,則由控制及算術(shù)運算單元取出,經(jīng)過RF射頻接口電路的處理,通過卡片上的天線傳送給卡片讀寫器。RAM中的數(shù)據(jù)在卡片失掉電源后(卡片離開讀寫器天線的有效工作范圍內(nèi))將被清除。

同時,ROM中還固化了卡片運行所需要的必要的程序指令,由控制及算術(shù)運算單元取出去對每個單元進行微指令控制。使卡片能有條不紊地與卡片的讀寫器進行數(shù)據(jù)通信。

(7) Crypto Unit 數(shù)據(jù)加密單元

該單元完成對數(shù)據(jù)的加密處理及密碼保護。加密的算法可以為DES標準算法或其他。

(8) EEPROM INTERFACE/EEPROM MEMORY   EEPROM存儲器及其接口電路

該單元主要用于存儲數(shù)據(jù)。EEPROM中的數(shù)據(jù)在卡片失掉電源后(卡片離開讀寫器天線的有效工作范圍內(nèi))仍將被保持。用戶所要存儲的數(shù)據(jù)被存放在該單元中。Mifare 1卡片中的這一單元容量為8196bit(1 Kbyte)。分為16個扇區(qū)。

 

在ZLG500B模塊中,已經(jīng)固化了上述操作的程序,應(yīng)用ZLG500B模塊制作產(chǎn)品的主要工作就是:熟悉讀卡模塊ZLG500B 與主機微處理器之間的串行通信軟件的通信協(xié)議和命令。

    

(二) ZLG500B 讀卡模塊數(shù)據(jù)傳輸協(xié)議

1.自動波特率探測

UART 接口一幀的數(shù)據(jù)格式為1 個起始位,8 個數(shù)據(jù)位,無奇偶校驗位,1 個停止位,自動波特率探測。ZLG500B上電后將讀卡芯片內(nèi)EEPROM中地址為0x7F單元的內(nèi)容讀出,取其低3位來初始化自己的波特率。在接收主機發(fā)出的STX的同時,測量波特率,若一致,則繼續(xù)通信;若不一致,則修改自己的波特率與主機一致,存入0x7F單元,準備接收下一個STX。

ZLG500B波特率與讀卡芯片內(nèi)EEPROM中0x7F單元低3位值的對應(yīng)關(guān)系見表1。

2.控制字符定義

控制字符定義見表2。

3.協(xié)議描述

通信必須先由主機發(fā)送命令和數(shù)據(jù)給ZLG500B, ZLG500B執(zhí)行命令完畢后,將命令執(zhí)行的狀態(tài)和響應(yīng)數(shù)據(jù)發(fā)回主機。開始通信前,收發(fā)雙方必須處于就緒狀態(tài)。首先主機發(fā)出STX, 然后等待ZLG500B的響應(yīng)ACK。 若在10ms 內(nèi)未檢測到此響應(yīng),或收到NAK ,則再次發(fā)送STX, 如此反復(fù)3次,若3次均未收到正確應(yīng)答ACK, 則退出本次傳輸,將錯誤代碼返回給主程序,由主程序進行錯誤處理。若主機收到ZLG500B 正確響應(yīng)ACK ,則可將數(shù)據(jù)塊發(fā)送出去,最后發(fā)送1 個終止符ETX結(jié)束本次發(fā)送。主機發(fā)送格式見表3。

然后主機等待ZLG500B發(fā)回的狀態(tài)和響應(yīng)數(shù)據(jù)。若在300ms內(nèi)未檢測到響應(yīng),則退出本次傳輸,且向主程序報告錯誤代碼。ZLG500B發(fā)送格式見表4 。

  1. ZLG500B 和微處理器命令C51 函數(shù)  

(1)底層函數(shù)和高級函數(shù)

      底層函數(shù)和高級函數(shù)見表5,已經(jīng)固化在ZLG500B模塊中,使用時直接調(diào)用即可。

(2) 函數(shù)描述舉例

下面是C51 函數(shù)聲明,包含在頭文件ZLG500B.h 中,寫應(yīng)用程序時將其包含在應(yīng)用函數(shù)中即可。

舉一個例子: 請求Request equest函數(shù)介紹如下。

聲明:

uchar mifs_request(uchar _Mode,uchar idata *_TagType);

MCU ⇒ ZLG500:

命令符:0x41

長度:1

Data[0]: _Mode

ZLG500 ⇒ MCU:

狀態(tài)值:MI_OK, MI_QUIT ,MI_NOTAGERR, MI_BITCOUNTERR ,COMM_ERR

長度:2

Data[0]: tagtype (低字節(jié))

Data[1]: tagtype (高字節(jié))

參數(shù):

_Mode:  

ALL=0 :請求天線范圍內(nèi)IDLE 狀態(tài)的卡HALT狀態(tài)的除外。

ALL=1: 請求天線范圍內(nèi)的所有卡。

_tagtype :當發(fā)生錯誤時不返回任何內(nèi)容Len=0

描述:

此函數(shù)發(fā)送Request 命令檢查在有效范圍內(nèi)是否有卡存在這個函數(shù)在選擇一個新的卡是必須調(diào)用的。

   

四.應(yīng)用程序設(shè)計

(一)總的流程圖

    應(yīng)用ZLG500B模塊,讀取非接觸卡卡號并在液晶屏上顯示出來的流程圖見下圖4。

圖4   應(yīng)用程序流程圖

在上圖中,初始化部分包括對讀卡模塊復(fù)位以及單片機和讀卡芯片內(nèi)部各硬件寄存器設(shè)定初始值。

 

(二)具體程序

程序由三大部分組成。

主程序:由main.c 和main.h構(gòu)成。其中main.c部分完成讀寫卡片的功能,對射頻芯片的操作都是通過訪問和更改射頻芯片內(nèi)的寄存器來實現(xiàn)射頻信號的收發(fā)的,并實現(xiàn)對液晶屏的顯示控制。

ZLG500B 與主機微處理器之間的串行通信軟件的通信協(xié)議和命令函數(shù):由zlg500B.C 和zlg500B.H構(gòu)成。在主程序中出現(xiàn)的各種命令都在zlg500B.C中具體實現(xiàn)。

液晶屏顯示程序:由lcd.h構(gòu)成。由于此液晶顯示模塊本身不帶字庫,故需要字符點陣顯示數(shù)據(jù),在lcd.h提供。

 

       由于篇幅限制,下面只介紹程序的概要 。

1.主程序部分

#define __SRC

#include "main.h"

#undef  __SRC

#include "zlg500B.h"http://主要是ZIG500B模塊里內(nèi)嵌的所有函數(shù)的定義

#include "lcd.h"http://主要是液晶顯示模塊里顯示字符的點陣數(shù)據(jù)

        ……

sbit zlg500B_RST=P1^4;//定義復(fù)位讀卡模塊的管腳

……

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();//串口初始化

//定時器工作方式設(shè)置

 /*TMOD=0x21;

 TH0=0x4C;

 TL0=0x00;

 ET0=1;

 ES=1;*/

EA=1;

         ……

}

 

  1.  ZLG500B 與主機微處理器之間的串行通信軟件的通信協(xié)議和命令函數(shù)

#include "main.h"

#define __SRC

#include "zlg500B.h"

#undef __SRC

#if mifs_read_en

 

uchar mifs_read(uchar _Adr,uchar idata *_Data)// 從卡中相應(yīng)地址中讀出一個  16字節(jié)的塊

{

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

 

……

}

    

五.結(jié)束語

本文介紹了內(nèi)含符合ISO14443A標準的讀卡芯片的非接觸讀卡模塊ZLG500B的使用。文中首先介紹了Mifare 1非接觸式IC射頻卡的工作過程,然后對非接觸讀卡模塊本身的硬件電路的核心部分也做了介紹;其次還介紹了讀卡模塊與8位微處理器之間的串行通信協(xié)議和命令;最后介紹了實現(xiàn)通信協(xié)議的具體軟件中的主要部分。通過本模塊的應(yīng)用,可達到降低設(shè)計難度,提高產(chǎn)品質(zhì)量,和減少開發(fā)費用的目的。這也是現(xiàn)在通用的一種開發(fā)思路和做法。

特別說明:本文中ZLG500B模塊本身部分的原理圖和ZLG500B模塊本身部分的軟件版權(quán)歸其開發(fā)者周立功單片機科技公司所有。

全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒有回復(fù)呢,說說你的想法
發(fā)