蔡卓恩,郭志成
(蘭州工業學院,甘肅 蘭州730050)
基于PIC16F877A的S50射頻卡讀寫電路的設計*
蔡卓恩,郭志成
(蘭州工業學院,甘肅蘭州730050)
主要闡述了基于PIC16F877A單片機的S50射頻卡讀寫電路的設計,介紹了PIC16F877A最小應用系統及其與讀卡芯片RC522的接口電路,并重點介紹了S50中所儲存數據用作電子錢包的軟件實現,可作為類似系統的應用參考。
PIC16F877A;RC522;S50;電子錢包
射頻卡即非接觸式IC卡,將射頻識別技術和IC卡技術結合起來,在大小和普通信用卡相同的PVC卡片內嵌置IC芯片和感應天線,無任何外露部分。S50是采用NXPMF1ICS50制作的非接觸IC卡,符合ISO14443A標準,可以和低成本的射頻卡基站RC522構成完整的射頻卡應用系統,目前國內有很多公司可向用戶提供S50射頻卡的服務。由于S50具有很高的性價比,操作方便,加密性能好。因此在公交系統、餐飲服務系統等領域得到了廣泛的應用[1]。
2.1PIC16F877A介紹
控制系統選用由美國Microchip公司生產的8位單片微控制器PIC16F877A作為核心控制單元,PIC16F877A具有獨特的精簡指令集(RISC)結構,數據總線和指令總線分離的哈佛總線結構,使器件性能和運算速度大大提高。片內集成有8k的Flash可重復編程存儲器,368Byte的數據存儲器,256Byte 的EEPROM數據存儲器,3個定時/計數器,2個CCP模塊,同步串行通信端口,8通道10位A/D轉換器,以及時鐘、看門狗等,具有上電復位、PWM輸出、LCD驅動等功能,有40只引腳。由于片內集成的外圍設備種類和數量多,使其外圍電路大大簡化。此外,此芯片還具有低功耗睡眠(SLEEP)模式,易于實現低功耗設計[2]。
圖1所示為單片機最小應用系統,包括復位電路﹑晶振﹑編程接口電路。C19﹑R46﹑R53﹑D4構成上電復位電路,系統使用20M晶振,J3為ICD2編程接口,連接ICD2仿真器可實現程序的在線仿真及下載。

圖1 單片機最小應用系統
2.2RC522接口電路
圖2所示為單片機與讀卡芯片RC522的接口電路,S50卡通過發射機應答器振蕩線圈與基站振蕩線圈的耦合取得能量,通過必要的通信軟件配合,保證卡與基站間實現雙向數據交換。RC522需要3.3V供電,通過穩壓芯片AS2830將5V電壓轉換為3.3V。

圖2 RC522讀寫系統接口電路
3.1S50的存儲結構
S50非接觸式IC卡容量為8K位 (bits)=1K字節(bytes)EEPROM,分為16個扇區,每個扇區為4塊,每塊16個字節,以塊為存取單位,每個扇區有獨立的一組密碼及訪問控制;每張卡有唯一序列號,為32位;具有防沖突機制,支持多卡操作;無電源,自帶天線,內含加密控制邏輯和通訊邏輯電路;數據保存期為10年,可改寫10萬次,讀無限次;工作頻率為13.56MHZ;通信速率為106KBPS;讀寫距離一般在10cm以內(與讀寫器有關)[3]。
S50存儲結構如圖3所示,M1卡分為16個扇區,每個扇區由4塊(塊0、塊1、塊2、塊3)組成,(我們也將16個扇區的64個塊按絕對地址編號為0~63;第0扇區的塊0(即絕對地址0塊),它用于存放廠商代碼,已經固化,不可更改。每個扇區的塊0、塊1、塊2為數據塊,可用于存貯數據。每個扇區的塊3為控制塊,包括了密碼A、存取控制、密碼B。

圖3 S50存儲結構
3.2S50的電子錢包應用
數據塊可作兩種應用:(1)用作一般的數據保存,可以進行讀、寫操作。(2)用作數據值,可以進行初始化值、加值、減值、讀值操作,即電子錢包。以下為數據塊作電子錢包應用的函數,這種方式可直接對數據進行增減。
//電子錢包函數
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刷卡自動扣款系統
非接觸式射頻卡讀寫系統應用于刷卡自動扣款系統,采用射頻卡作為電子貨幣載體。刷卡功能有定值預扣模式和在線消費兩種模式,在線消費模式根據實際用量扣去射頻卡內相應金額。用戶刷卡后,主控機檢測刷卡信息,配置默認用量,扣除對應金額;若在中途停止并再次刷卡,則根據實際用量返還金額。刷卡子程序流程圖如圖4所示,再次刷卡返還金額流程中減值操作變為增值操作即可[4]。

圖4 刷卡子程序流程圖
扣款和充值子程序:
//參數說明:dd_mode[IN]:命令字
//0xC0=扣款
//0xC1=充值
//addr[IN]:錢包地址
//pValue[IN]:4字節增(減)值,低位在前
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中所儲存數據可用作數據值即電子錢包,這種方式可直接對數據進行增減。本文討論了S50非接觸式IC卡在刷卡自動扣款系統中的應用,提供了作為電子錢包使用的一種軟硬件實現方法,由于S50在多個領域得到廣泛應用,本文可作為類似系統的應用參考。
[1] 張曉紅.自動售水機的研究與實現[D].東華理工大學碩士學位論文,2012.
[2] 朱兆優,陳堅,王海濤,鄧文娟.單片機原理及應用[M].電子工業出版,2010.9.
[3] 吳滌,射頻IC卡讀寫系統設計[D].西南交通大學碩士學位論文,2005.
[4] 陸永寧.IC卡應用系統[M].南京:東南大學出版社,2005.5.
TP273.5
甘肅省高校科研項目資助2015B-126。