蔡卓恩,郭志成
(蘭州工業(yè)學(xué)院,甘肅 蘭州730050)
基于PIC16F877A的S50射頻卡讀寫電路的設(shè)計(jì)*
蔡卓恩,郭志成
(蘭州工業(yè)學(xué)院,甘肅蘭州730050)
主要闡述了基于PIC16F877A單片機(jī)的S50射頻卡讀寫電路的設(shè)計(jì),介紹了PIC16F877A最小應(yīng)用系統(tǒng)及其與讀卡芯片RC522的接口電路,并重點(diǎn)介紹了S50中所儲(chǔ)存數(shù)據(jù)用作電子錢包的軟件實(shí)現(xiàn),可作為類似系統(tǒng)的應(yīng)用參考。
PIC16F877A;RC522;S50;電子錢包
射頻卡即非接觸式IC卡,將射頻識(shí)別技術(shù)和IC卡技術(shù)結(jié)合起來,在大小和普通信用卡相同的PVC卡片內(nèi)嵌置IC芯片和感應(yīng)天線,無任何外露部分。S50是采用NXPMF1ICS50制作的非接觸IC卡,符合ISO14443A標(biāo)準(zhǔn),可以和低成本的射頻卡基站RC522構(gòu)成完整的射頻卡應(yīng)用系統(tǒng),目前國(guó)內(nèi)有很多公司可向用戶提供S50射頻卡的服務(wù)。由于S50具有很高的性價(jià)比,操作方便,加密性能好。因此在公交系統(tǒng)、餐飲服務(wù)系統(tǒng)等領(lǐng)域得到了廣泛的應(yīng)用[1]。
2.1PIC16F877A介紹
控制系統(tǒng)選用由美國(guó)Microchip公司生產(chǎn)的8位單片微控制器PIC16F877A作為核心控制單元,PIC16F877A具有獨(dú)特的精簡(jiǎn)指令集(RISC)結(jié)構(gòu),數(shù)據(jù)總線和指令總線分離的哈佛總線結(jié)構(gòu),使器件性能和運(yùn)算速度大大提高。片內(nèi)集成有8k的Flash可重復(fù)編程存儲(chǔ)器,368Byte的數(shù)據(jù)存儲(chǔ)器,256Byte 的EEPROM數(shù)據(jù)存儲(chǔ)器,3個(gè)定時(shí)/計(jì)數(shù)器,2個(gè)CCP模塊,同步串行通信端口,8通道10位A/D轉(zhuǎn)換器,以及時(shí)鐘、看門狗等,具有上電復(fù)位、PWM輸出、LCD驅(qū)動(dòng)等功能,有40只引腳。由于片內(nèi)集成的外圍設(shè)備種類和數(shù)量多,使其外圍電路大大簡(jiǎn)化。此外,此芯片還具有低功耗睡眠(SLEEP)模式,易于實(shí)現(xiàn)低功耗設(shè)計(jì)[2]。
圖1所示為單片機(jī)最小應(yīng)用系統(tǒng),包括復(fù)位電路﹑晶振﹑編程接口電路。C19﹑R46﹑R53﹑D4構(gòu)成上電復(fù)位電路,系統(tǒng)使用20M晶振,J3為ICD2編程接口,連接ICD2仿真器可實(shí)現(xiàn)程序的在線仿真及下載。
圖1 單片機(jī)最小應(yīng)用系統(tǒng)
2.2RC522接口電路
圖2所示為單片機(jī)與讀卡芯片RC522的接口電路,S50卡通過發(fā)射機(jī)應(yīng)答器振蕩線圈與基站振蕩線圈的耦合取得能量,通過必要的通信軟件配合,保證卡與基站間實(shí)現(xiàn)雙向數(shù)據(jù)交換。RC522需要3.3V供電,通過穩(wěn)壓芯片AS2830將5V電壓轉(zhuǎn)換為3.3V。
圖2 RC522讀寫系統(tǒng)接口電路
3.1S50的存儲(chǔ)結(jié)構(gòu)
S50非接觸式IC卡容量為8K位 (bits)=1K字節(jié)(bytes)EEPROM,分為16個(gè)扇區(qū),每個(gè)扇區(qū)為4塊,每塊16個(gè)字節(jié),以塊為存取單位,每個(gè)扇區(qū)有獨(dú)立的一組密碼及訪問控制;每張卡有唯一序列號(hào),為32位;具有防沖突機(jī)制,支持多卡操作;無電源,自帶天線,內(nèi)含加密控制邏輯和通訊邏輯電路;數(shù)據(jù)保存期為10年,可改寫10萬次,讀無限次;工作頻率為13.56MHZ;通信速率為106KBPS;讀寫距離一般在10cm以內(nèi)(與讀寫器有關(guān))[3]。
S50存儲(chǔ)結(jié)構(gòu)如圖3所示,M1卡分為16個(gè)扇區(qū),每個(gè)扇區(qū)由4塊(塊0、塊1、塊2、塊3)組成,(我們也將16個(gè)扇區(qū)的64個(gè)塊按絕對(duì)地址編號(hào)為0~63;第0扇區(qū)的塊0(即絕對(duì)地址0塊),它用于存放廠商代碼,已經(jīng)固化,不可更改。每個(gè)扇區(qū)的塊0、塊1、塊2為數(shù)據(jù)塊,可用于存貯數(shù)據(jù)。每個(gè)扇區(qū)的塊3為控制塊,包括了密碼A、存取控制、密碼B。
圖3 S50存儲(chǔ)結(jié)構(gòu)
3.2S50的電子錢包應(yīng)用
數(shù)據(jù)塊可作兩種應(yīng)用:(1)用作一般的數(shù)據(jù)保存,可以進(jìn)行讀、寫操作。(2)用作數(shù)據(jù)值,可以進(jìn)行初始化值、加值、減值、讀值操作,即電子錢包。以下為數(shù)據(jù)塊作電子錢包應(yīng)用的函數(shù),這種方式可直接對(duì)數(shù)據(jù)進(jìn)行增減。
//電子錢包函數(shù)
voidmoneyset(unsignedintmon,unsignedchar adr)
{mon=mon*100;
money[1]=mon/256;
money[0]=mon%256;
money[2]=0;
money[3]=0;
money[4]=~money[0];
money[5]=~money[1];
money[6]=~money[2];
money[7]=~money[3];
money[8]=money[0];
money[9]=money[1];
money[10]=money[2];
money[11]=money[3];
money[12]=adr;
money[13]=~adr;
money[14]=adr;
money[15]=~adr;
}
3.3刷卡自動(dòng)扣款系統(tǒng)
非接觸式射頻卡讀寫系統(tǒng)應(yīng)用于刷卡自動(dòng)扣款系統(tǒng),采用射頻卡作為電子貨幣載體。刷卡功能有定值預(yù)扣模式和在線消費(fèi)兩種模式,在線消費(fèi)模式根據(jù)實(shí)際用量扣去射頻卡內(nèi)相應(yīng)金額。用戶刷卡后,主控機(jī)檢測(cè)刷卡信息,配置默認(rèn)用量,扣除對(duì)應(yīng)金額;若在中途停止并再次刷卡,則根據(jù)實(shí)際用量返還金額。刷卡子程序流程圖如圖4所示,再次刷卡返還金額流程中減值操作變?yōu)樵鲋挡僮骷纯桑?]。
圖4 刷卡子程序流程圖
扣款和充值子程序:
//參數(shù)說明:dd_mode[IN]:命令字
//0xC0=扣款
//0xC1=充值
//addr[IN]:錢包地址
//pValue[IN]:4字節(jié)增(減)值,低位在前
charPcdValue(unsignedchardd_mode,unsigned
charaddr,unsignedchar*pValue)
{
charstatus;
unsignedintunLen;
unsignedchari,ucComMF522Buf[MAXRLEN];
ucComMF522Buf[0]=dd_mode;
ucComMF522Buf[1]=addr;
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf
[2]);
status=PcdComMF522(PCD_TRANSCEIVE,uc-
ComMF522Buf,4,ucComMF522Buf,&unLen);
if(status!=MI_OK)||(unLen!=4)||
(ucComMF522Buf[0]&0x0F)!=0x0A))
{status=MI_ERR;}
if(status==MI_OK)
{
//memcpy(ucComMF522Buf,pValue,4);
for(i=0;i<16;i++)
{ucComMF522Buf[i]=*(pValue+i);}
CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf
[4]);
unLen=0;
status=PcdComMF522(PCD_TRANSCEIVE,uc-
ComMF522Buf,6,ucComMF522Buf,&unLen);
if(status!=MI_ERR)
{status=MI_OK;}
}
if(status==MI_OK)
{
ucComMF522Buf[0]=PICC_TRANSFER;
ucComMF522Buf[1]=addr;
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf
[2]);
status=PcdComMF522(PCD_TRANSCEIVE,uc-
ComMF522Buf,4,ucComMF522Buf,&unLen);
if(status!=MI_OK)||(unLen!=4)||
(ucComMF522Buf[0]&0x0F)!=0x0A))
{status=MI_ERR;}
}
returnstatus;
}
S50中所儲(chǔ)存數(shù)據(jù)可用作數(shù)據(jù)值即電子錢包,這種方式可直接對(duì)數(shù)據(jù)進(jìn)行增減。本文討論了S50非接觸式IC卡在刷卡自動(dòng)扣款系統(tǒng)中的應(yīng)用,提供了作為電子錢包使用的一種軟硬件實(shí)現(xiàn)方法,由于S50在多個(gè)領(lǐng)域得到廣泛應(yīng)用,本文可作為類似系統(tǒng)的應(yīng)用參考。
[1] 張曉紅.自動(dòng)售水機(jī)的研究與實(shí)現(xiàn)[D].東華理工大學(xué)碩士學(xué)位論文,2012.
[2] 朱兆優(yōu),陳堅(jiān),王海濤,鄧文娟.單片機(jī)原理及應(yīng)用[M].電子工業(yè)出版,2010.9.
[3] 吳滌,射頻IC卡讀寫系統(tǒng)設(shè)計(jì)[D].西南交通大學(xué)碩士學(xué)位論文,2005.
[4] 陸永寧.IC卡應(yīng)用系統(tǒng)[M].南京:東南大學(xué)出版社,2005.5.
TP273.5
甘肅省高??蒲许?xiàng)目資助2015B-126。