1.实验目的
本实验介绍如何使用高频手持机对符合ISO 14443TypeA标准的13.56MHz的高频RFID卡片进行信息写入和信息读出的操作,并通过一个电子钱包实例的讲解使读者对高频RFID有一个初步的了解,熟悉和掌握高频RFID卡片的特点,为今后开发基于高频RFID的应用做准备。
2.实验设备
(1)硬件
● RFID实验硬件(IOT-RFID)1套。
● ISO 14443A标准的电子标签1个。
(2)软件
● 高频手持机RFID读卡与电子钱包程序。
3.实验原理
ISO 14443TypeA标准的卡片类型较多,本实验以飞利浦Mifare One S50非接触式卡片为例,演示如何对该卡片进行查询、读卡、写卡等基本操作。在进行实验前,建议先阅读ISO 14443TypeA标准,对其原理和过程有大致的了解。
在进行写卡操作前,需要了解所要操作卡的卡结构,否则容易造成锁卡,导致部分扇区无法使用。飞利浦Mifare One S5卡片有如下结构:
1)卡片共分16个扇区,扇区编号为0~15,每个扇区分4块存储区,块号为0~3。其中用户可操作区域为扇区0中的1~3块,扇区1~15中的0~3块。
2)在卡中每块可以保存16字节数据,在扇区0中数据可以保存在1、2块中,共保存2×16字节数据,扇区1~15中数据可以保存在0~2中,共保存3×16字节数据。
3)每个扇区中有3块用于保存该扇区的密钥信息。
在操作飞利浦Mifare One S5卡片时,有如下注意事项:
1)在扇区0中0块为只读块保存卡片基本信息,不可进行写操作。
2)每个扇区中有3块用于保存该扇区的密钥信息,如果更改内容请将更改后的扇区密钥记录,如果遗忘扇区密钥,会导致该扇区不能使用,无法读取扇区中的数据以及对该扇区进行写数据操作。
下面结合一个电子钱包的代码实例,说明如何实现卡片的查询和读写操作。电子钱包是一种常见的基于RFID的电子支付手段,通常用于校园、交通等小额支付场景。本实验实现一个基本的电子钱包的演示程序。该程序具有卡片查询、初始化、余额查询、充值、消费等基本功能。下面对这5个函数接口进行介绍。
卡片的查询是RFID卡片的一项基本操作,是指查询手持机读卡范围内有无卡片,有什么类型的卡片,具体函数如下:
相关参数如下:
bMode为查询卡的模式;x52为QUERY_ALL;x26为QUERY_IDLE;
pszData为返回查询到的卡数据,第1个字节为状态,x00表示有卡,x01表示无卡;第2个字节为卡类型,x01 Mifare Light;x04 Mifare Ultra Light;x08 Mifare Standard S50;x10 Mifare Plus S70;第3、4字节为卡的ATQ;第5~8字节为查到的卡号。
该函数成功返回数据的长度,失败则返回0。
电子钱包金额初始化函数以A密钥认证方式初始化块金额。该函数是将要初始化的金额数据进行转换,存储到指定块的某一字节中,取值的时候再转换回来。而写卡是存储指定块的指定字节,这是两者的区别。UpdateData函数的功能是更新控件关联的变量。相关函数原型如下:
该函数的参数如下:
nSector为扇区号;
nBlock为块号;
pszKey为扇区密钥;
iKeyLen为扇区密钥长度;
pszData为初始化钱包里的金额;
iDataLen为金额数据的长度。
该函数成功返回1,失败则返回0。电子钱包充值、扣款以及余额查询的函数参数与初始化函数类似,其原型分别为:
下面结合手持机上后台程序的代码,简单介绍如何使用上述函数操作RFID卡片。(www.xing528.com)
卡片查询是进行卡片其他操作的前提,主要是查询卡片是否存在,并获得卡片序列号(CSN)。主要查询过程如下:
电子钱包初始化主要完成钱包金额的设定,即将变量m_money所保存的初始化金额进行格式转换并写入卡片,相关的代码如下:
电子钱包充值增加钱包的金额,具体过程与初始化类似,代码如下:
电子钱包的消费过程与充值过程相反,即减去钱包中相应的金额,相关代码如下:
余额查询是最常用的一个操作,即读取RFID卡片中的金额数目,相关的代码如下:
4.实验内容
熟悉ISO1 4443TypeA标准,了解RFID相关基础知识和RFID卡片构造,以及存储和访问方式。
掌握手持机上高频手持机RFID读卡和电子钱包程序的操作,并能够使用手持机对13.56MHz卡片进行操作。
5.实验步骤
1)启动手持机上的RFID读卡与电子钱包程序。
2)将卡放置读卡区(设备背板后面)。在“Key”文本框中输入14443A密码。单击“Sector”下拉列表框的下拉按钮,可以选择扇区号(0~15),共有16个扇区。
3)选择完扇区后单击“Read”按钮可以进行14443A读卡操作,读到的数据会显示在下面的列表框中,读到的卡数据以十六进制显示,Block列显示块号,Data列显示读取到块中的数据,每个扇区有4个块,这里只读(0~2)3块。双击要进行电子钱包操作的块号(这里选择Block3)就可以打开电子钱包操作程序界面——14443A_WRITE_MONEY对话框,如图3-20所示。
4)钱包初始化。在“Purse”文本框中输入要初始化的金额。单击“Initialize”按钮进行初始化操作,操作成功在下面的状态栏会提示初始化成功。
5)余额查询。单击“Readval”按钮,查询成功后余额会显示在“Purse”文本框中。
6)钱包充值。进入14443A_WRITE_MONEY对话框,先在“Purse”文本框中输入充值金额。单击“Increment”按钮,充值成功后在窗口下方的状态显示区会提示充值成功,充值完成后可以单击“Readval”按钮查询余额。
图3-20 电子钱包操作程序界面
7)钱包消费。在“Purse”文本框中输入要扣值的数额,单击“Decrement”按钮进行扣值操作,扣值成功后在窗口下面的状态显示区会提示扣值成功,单击“Readval”按钮余额查询,可以看到钱包内容已经改变。
6.思考题
1)卡片为何要紧贴手持机?
2)通过学习本实验,能否使用一张RFID卡片既作为饭卡,又作为公交卡?
7.补充阅读
[1]ISO/IEC 14443-1:2008 Identification cards—Contactless integrated circuit cards—Proximity cards—Part1:Physical characteristics.
[2]ISO/IEC 14443-2:2001 Identification cards—Contactless integrated circuit(s)cards—Proximity cards—Part2:Radio frequency power and signal interface.
[3]ISO/IEC 14443-3:2001Identification cards—Contactless integrated circuit(s)cards—Proximity cards—Part3:Initialization and anticollision.
[4]ISO/IEC 14443-4:2008 Identification cards—Contactless integratedcir cuitcards—Proximity cards—Part4:Transmission protocol.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。