蔡卓恩,郭志成
(兰州工业学院,甘肃 兰州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。