首页 理论教育 高频RFID读/写实验成果

高频RFID读/写实验成果

时间:2023-10-21 理论教育 版权反馈
【摘要】:2)通过学习本实验,能否使用一张RFID卡片既作为饭卡,又作为公交

高频RFID读/写实验成果

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卡片的一项基本操作,是指查询手持机读卡范围内有无卡片,有什么类型的卡片,具体函数如下:

978-7-111-34147-5-Chapter03-112.jpg

相关参数如下:

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函数的功能是更新控件关联的变量。相关函数原型如下:

978-7-111-34147-5-Chapter03-113.jpg

该函数的参数如下:

nSector为扇区号;

nBlock为块号;

pszKey为扇区密钥;

iKeyLen为扇区密钥长度;

pszData为初始化钱包里的金额;

iDataLen为金额数据的长度。

该函数成功返回1,失败则返回0。电子钱包充值、扣款以及余额查询的函数参数与初始化函数类似,其原型分别为:

978-7-111-34147-5-Chapter03-114.jpg

下面结合手持机上后台程序的代码,简单介绍如何使用上述函数操作RFID卡片。(www.xing528.com)

卡片查询是进行卡片其他操作的前提,主要是查询卡片是否存在,并获得卡片序列号(CSN)。主要查询过程如下:

978-7-111-34147-5-Chapter03-115.jpg

978-7-111-34147-5-Chapter03-116.jpg

电子钱包初始化主要完成钱包金额的设定,即将变量m_money所保存的初始化金额进行格式转换并写入卡片,相关的代码如下:

978-7-111-34147-5-Chapter03-117.jpg

电子钱包充值增加钱包的金额,具体过程与初始化类似,代码如下:

978-7-111-34147-5-Chapter03-118.jpg

978-7-111-34147-5-Chapter03-119.jpg

电子钱包的消费过程与充值过程相反,即减去钱包中相应的金额,相关代码如下:

978-7-111-34147-5-Chapter03-120.jpg

余额查询是最常用的一个操作,即读取RFID卡片中的金额数目,相关的代码如下:

978-7-111-34147-5-Chapter03-121.jpg

978-7-111-34147-5-Chapter03-122.jpg

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”按钮查询余额。

978-7-111-34147-5-Chapter03-123.jpg

图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.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈