新版非接触IC卡读写器使用说明.docx

上传人:b****6 文档编号:7871512 上传时间:2023-01-26 格式:DOCX 页数:21 大小:618.34KB
下载 相关 举报
新版非接触IC卡读写器使用说明.docx_第1页
第1页 / 共21页
新版非接触IC卡读写器使用说明.docx_第2页
第2页 / 共21页
新版非接触IC卡读写器使用说明.docx_第3页
第3页 / 共21页
新版非接触IC卡读写器使用说明.docx_第4页
第4页 / 共21页
新版非接触IC卡读写器使用说明.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

新版非接触IC卡读写器使用说明.docx

《新版非接触IC卡读写器使用说明.docx》由会员分享,可在线阅读,更多相关《新版非接触IC卡读写器使用说明.docx(21页珍藏版)》请在冰豆网上搜索。

新版非接触IC卡读写器使用说明.docx

新版非接触IC卡读写器使用说明

新版非接触IC卡开发板使用说明

新版非接触IC开发板功能强大,可以作为一个读写卡器,通过1602或12864液晶屏显示相关信息,也可以作为一个独立的产品,实现相关功能,如门禁系统(需要另购程序)、电子钱包功能(需要自编或与我们联系)。

第一部分上位机为DELPHI,1602显示读写卡

一、下载下位机1602程序

1.把串口线(如果是笔记本电脑,须采用USB转串口线)将开发板与PC机连接好。

2.把1602液晶显示器插在开发板上。

3.打开STC下载软件,选择STC89C516RD+单片机,内部扩展选择禁止内部AUX-RAM,如图所示:

4.点击打开按钮,找到1602下位机源程序中的hex文件。

再点击下载按钮,提示给开发板上电,此时,用USB线给开发板供电,将程序下载到开发板的单片机中。

二、用DELPHI上位机软件读写卡

1.双击启动测试软件,进入功能选项“参数设置”里面,可以设置串口通讯参数:

串口号、波特率、校验位、数据位、停止位等等,设置玩了以后点击“修改串口”,如果出现“串口参数设置成功”,表明串口设置成功,如果出现异常,请按照提示做出改动。

2.设置完毕以后可以点击“测试读卡器”,如果出现“读卡器连接成功”,并且听到读卡器的风鸣器响声,证明串口设置正确,如果出现“读卡器连接失败”,表明串口设置有问题,请重新设置。

读写器默认参数:

Com1、9600bps、N、8、1.

3.把一张MifareOne卡片放在天线区域范围内

4.进入功能选项“低级操作”里面点击“寻卡”,如果出现“寻卡成功!

”表明寻卡正常,如果出现“执行失败!

”表明出现异常,请检查卡片是否在寻卡范围内,如果确认卡片没有问题,那么程序下载不正确,或读写器异常。

5.点击“防冲突”,如果出现“执行成功”表明防冲突正常,如果出现“执行失败”表明读写器出现异常或者卡片没有在天线区域范围内。

6.点击“选择”,如果出现“执行成功”表明选择正常,如果出现“执行失败”表明读写器出现异常或者卡片没有在天线区域范围内。

7.进入功能选项“密码下载”里面下载卡片密码,比如需要测试卡片扇区1数据的读写,那么就在扇区1后面填上密码A/B(注:

卡片的初始密码A/B均为全‘F’),然后选择“A组密码”或者“B组密码”,最后点击“下载”,如果出现“密码下载成功”表明密码下载成功,如果出现异常请按照错误提示更改后再下载一次,直至“下载成功”为止。

如果密码下载不成功,下步操作无法进行,即无法读写卡。

8.进入功能选项“数据读写”里面,“请选择扇区号”下面的可拉选项里面选择第5步下载密码的扇区号(比如扇区1),然后点击“读出”,如果提示“第*扇区数据读出成功”表明读数据正确。

如果出现“第*扇区数据读出失败”表明密码校验出错或者出现其他异常,请返回第5步重新下载密码。

9.如果读数据正确,在块0、块1、块2后面修改数据,比如改成:

“块0:

12345678901234567890123456789012”

“块1:

234567*********78901234567890123”

“块2:

34567890123456789012345678901234”

然后点击“写入”,如果出现“第*扇区数据写入成功”表明写入数据正确。

如果出现“第*扇区写入失败”表明密码校验出错或者出现其他异常,请返回第5步重新下载密码。

10.再次点击“读出”键,然后点击“读出”,如果提示“第*扇区数据读出成功”表明读数据正确,再对比块0、块1、块2是否和第7步写入的数据一样,如果数据一样,证明写入成功了。

如果出现“第*扇区数据读出失败”表明密码校验出错或者出现其他异常,请返回第5步重新下载密码。

三、MifareOne卡片块值测试

1.进入功能选项“块值操作”里面,在“扇区号”下面的可拉选项里面选择下载密码的扇区号(比如扇区1),在“块号”下面的可拉选项里面选择你想测试的块号(比如第1块)

2.在“操作值”后面填上你所希望的初始值(比如“11111111”),然后点击“初始化”,如果出现“数据初始化成功”表明操作成功。

如果出现“数据初始化失败”表明操作失败,请检查密码是否正确,返回第前面重新操作一次。

3.点击“读出”,如果在“当前值”后面出现是你原来写进去的初始值,证明操作正确,如果“数据读出失败”表明块值操作有异常,请重新初始化。

4.在“操作值:

”后面填上你所希望的操作值(比如“22222222”),然后点击“加值”,如果出现“数值加操作成功”,表明操作成功。

如果出现其他提示表明操作失败。

5.点击“读出”,如果在“当前值:

”后面出现是你初始值加上加值(11111111+22222222=33333333)表明操作正确,如果是其他的值表明失败。

6.在“操作值:

”后面填上你所希望的操作值(比如“11111111”),然后点击“减值”,如果出现“数值减操作成功”,表明操作成功。

如果出现其他提示表明操作失败。

7.点击“读出”,如果在“当前值:

”后面出现是你当前值减去操作值(33333333-11111111=22222222),表明操作正确,如果是其他值表明失败。

四、修改密码和控制位

1.进入功能选项“修改密码”里面,在“扇区号”下面的可拉选项里面选择前面下载密码的扇区号(比如扇区1)。

2.在“密码A”和“密码B”后面分别写入你想修改的密码A和密码B。

3.卡片控制位修改之前请详细阅读卡片资料,因为控制位修改不正确,就会导致卡片不能再使用,请务必小心使用。

4.在控制位后面填上该扇区的控制位。

5.点击“修改密码”,如果出现“修改密码成功”,表示操作正确,如果出现出错提示,请按照出错提示做相应的处理。

(注:

密码修改后请务必记住,密码遗忘卡片就不能再次是使用了)。

五、调试信息

进入功能选项“调试信息”里面,在“串口信息发送与接受”处可以看到PC机和读卡器之间通讯的详细过程,对调试非常有帮助。

六、注意几点

1.STC单片机下载程序时,一定要选AUX-RAM禁止访问。

2.在密码下载选项卡中,要先输入相应扇区的密码后(比如扇区1输入:

FFFFFFFFFFFF),才能读出和写入扇区1的数值,否则,无法读取和写入扇区1,其它扇区依次类推。

3.当修改密码时,一定要记住,初始密码为FFFFFF,如果要修改为111111,请在修改密码的选项卡进行修改,修改后,密码即为111111,如果要改回到FFFFFF,请先将111111密码先下载,然后才能回到修改密码选项卡,对密码进行修改。

修改完成后再下载,就可以读取数据了,否则,若密码不正确,则无法读取数据。

4.液晶显示只显示部分信息,使用者可根据情况,通过修改程序,显示相应信息。

第二部分上位机为DELPHI,12864并口显示读写卡

将带汉字库的12864液晶显示屏插到开发板上,下载好程序,其它使用方法与第一部分完全相同。

注意,12864显示的信息为部分内容,如果要显示其它信息,请自行修改下位机源程序。

第三部分上位机为VB,不采用液晶屏读写卡

一、下载下位机程序

1.把串口线(如果是笔记本电脑,须采用USB转串口线)将开发板与PC机连接好。

2.把1602液晶显示器插在开发板上。

3.打开STC下载软件,选择STC89C516RD+单片机,内部扩展选择允许内部AUX-RAM,如图所示:

4.点击打开按钮,找到下位机源程序中的hex文件。

再点击下载按钮,提示给开发板上电,此时,用USB线给开发板供电,将程序下载到开发板的单片机中。

二、用VB上位机软件读写卡

1.安装VB6软件,并将MSCOMM32.OCX文件拷贝到windows\system32里面去。

(如果之前已经拷贝,就不用再拷贝了)。

2.双击启动可执行软件RFIDTools,选择串口,这里使用的是USB转串口线,虚拟串口号为COM3,点击打开串口,如图所示:

2.打开串口后,将卡放到开发板天线附近,此时,会显示卡号,如图所示:

3.在密码A、密码B编辑框中输入射频卡的相应密码,并选择使用A密码或B密码。

一般射频卡的初试密码是12个F。

之后点击“装载密码”,密码将被送往单片机用于读写卡操作时的密码认证。

4.之后将射频卡靠近RFIDDEMO天线,将会自动进行读卡操作,读出卡的卡号并显示在RFIDTool中。

如果密码正确,电脑将发出短促清脆的“嘀”声,RFID_Tool下半部分的数据显示区将默认显示第1扇区第4块的16个字节的数据。

如果密码错误,电脑将发出“嗤嗤”的声音,卡号显示为30303030,显示数据也不会更新。

5.要读出其他扇区其他块的数据,只需输入相应的扇区号和块号,点击“读卡操作”。

之后将射频卡靠近天线即可,数据显示区将会自动显示读出的数据。

6.要往某扇区某块中写入数据,首先按照前面的操作,读出该块的数据,之后在数据显示区直接修改,输入要写入的新数据,然后点击“写入数据”,再将射频卡靠近天线即可。

(要验证写卡是否成功,可以按照前面的步骤,先读另外某个扇区某个块的数据,再重新读出刚刚写入过的块,看看数据显示区域的数据是否正确更新显示)

7.加减值对于块数据有格式要求,所以我们先将块数据初始化为要求的格式,上位机以初始化为数值0x00000055为例。

选择某扇区某块,之后点击“初始化(数值块)value:

55”,然后将射频卡靠近天线即可,可以看到数据被初始化为如下值:

之后点击“增加一(数据块)”,然后将射频卡靠近天线,可以看到数据更新,相应的增加了1;点击“减少一(数据块)”,然后将射频卡靠近天线,可以看到数据更新,相应的减少了1。

三、软件说明

1.软件目录结构说明

源程序文件夹中有这样几个目录文件:

SourceFile目录:

全套源代码(.c和.h)放在该目录下。

后文将介绍源代码结构。

Keil目录:

单片机程序使用Keil编译,相关文件在该目录下。

编译时,打开Keil,点击菜单Project->OpenProject,选择Keil\P1200.Uv2打开编译工程,之后点击工具栏的即可编译。

编译生成的目标代码是Keil\P1200.hex,后面用单片机下载程序下载的目标代码也就是这个文件。

需要Keil的用户请自行下载或者与我们联系,由于该程序体积较大不包含在资料包中。

其他DesignEasy_RFID.*文件:

我们通常使用SourceInsightV3.5查看代码,这是一款功能强大的代码编辑、阅读工具,用不同的颜色区分不同的语句,而且查找搜索十分方便。

这些若干DesignEasy_RFID.*文件即是SourceInsight的工程文件。

已经安装了SourceInsightV3.5程序的用户可以直接双击DesignEasy_RFID.PR即可用SourceInsight查看代码。

需要SourceInsight的用户请自行下载,由于该程序体积较大不包含在资料包中。

当然,用户可以使用任意自己熟悉的代码查看软件或者编辑器,不是一定非要用SourceInsight,不用SourceInsight的用户可以忽略或者删除根目录下的那些DesignEasy_RFID.*文件。

2.源代码系统图解(8bit并行接口)

以下描述适用于8bit并行接口,也就是适用于RC500、RC531、RC632、FM1702NL这些读卡器芯片。

从上图可以看出,单片机程序部分,有3条主线(粉红色标注部分):

外部中断1中断处理函数RC500ISR()

uart中断处理函数UartInterruptService()

main()中检测卡、读写卡的操作cmd_inqury()

以下分别介绍。

3.uart中断处理函数UartInterruptService()

MCU的uart功能,每从串口接收到1个字节的数据,就会产生一次uart中断。

因此在uart中断处理

函数中,我们需要将多次接收到的数据按照规定的数据格式进行解析,获取上位机程序向单片机发送的

命令。

此外,MCU通过读卡芯片,获得卡的ID信息,以及卡上的数据,也要通过串口发回上位机程序。

接收和发送的串口数据格式定义如下:

起始符:

1个字节,一定为0x02;

命令,包括命令类型(1个字节)和命令数据(小于100个字节),其中命令数据为1种或者多种

具体的数据内容组成。

根据命令类型不同,命令数据的格式也不同,具体如下:

上位机发向单片机:

a.命令类型为0x30:

装载某个块的A密码,

命令数据为2字节的块号数据加上12字节的密码数据。

b.命令类型为0x31:

装载某个块的B密码

命令数据为2字节的块号数据加上12字节的密码数据。

c.命令类型为0x32:

读取某个块的数据

命令数据为2字节的块号数据。

d.命令类型为0x33:

向某个块写数据

命令数据为2字节的块号数据加上32字节的读写数据。

e.命令类型为0x34:

将某块初始化为加减值要求的格式

命令数据为2字节的块号数据

f.命令类型为0x35:

加值操作

无命令数据

g.命令类型为0x36:

减值操作

无命令数据

单片机发向上位机:

h.命令类型为0x39:

上传卡ID

命令数据为8字节ID数据。

i.命令类型为0x32:

读到某个块的数据

命令数据为2字节的块号数据加上32字节的读写数据。

结束符:

1个字节,一定为0x03;

各种类型的命令数据都用ASCII码传输,具体格式定义如下:

块号数据:

2字节

第一字节表示扇区号的ASCII码,第二字节表示扇区内块号的ASCII码。

比如,第4个扇区内的第2个块(块号为:

13=3x4+1,因为标号都从0开始)将表示为:

0x330x31,

也就是字符:

‘3’‘1’

密码数据:

12字节

相邻2个字节组合成1个字节的密码,分别为高4bit的ASCII码和低4bit的ASCII。

比如,密码若为:

0x1234567890AB(6字节)将表示为:

0x300x310x320x330x340x350x360x37

0x380x390x300x410x42,也就是字符:

‘0’‘1’‘2’‘3’‘4’‘5’‘6’‘7’‘8’‘9’‘A’‘B’

读写数据:

32字节

相邻2个字节组合成1个字节的数据,分别为高4bit的ASCII码和低4bit的ASCII。

比如,如要往卡内写入数据的某字节是0x12,将表示为:

0x300x31,也就是字符:

‘1’‘2’

ID数据:

8字节

相邻2个字节组合成1个字节的数据,分别为高4bit的ASCII码和低4bit的ASCII。

比如,如果ID是0x1234ABCD将表示为0x310x320x330x340x410x420x430x44,也就是‘1’

‘2’‘3’‘4’‘A’‘B’‘C’‘D’

uart中断处理函数UartInterruptService()中,将根据以上数据格式定义,对接收到的数据进行解析,

将解析的结果存放在OperateState、BlockNo、MKeys、blockdata等全局变量中。

4.main()中检测卡、读写卡的操作cmd_inqury()

cmd_inqury()中的主要操作流程是:

检测是否有卡靠近;

如果有,选择某张卡(如果有多张的话),获得卡ID;

进行密码认证;

如果密码认证通过,那么根据OperateState的值进行相应操作;

通过串口将读到的数据传给电脑;

等待卡离开

其中,通过串口将ID或者读到的数据传给电脑,数据的传输格式如前所述。

其中,对卡的操作函数,诸如Request、AnticollSelect、Authentication等,是NXP提供的函数接口,

里面的操作主要是根据芯片工作流程、向读卡芯片内读、写数据,有兴趣请查看代码中的注释和定义。

四、加减值说明

值加减的意义:

Mifare1卡大量应用于小额消费领域,所以有冲值和消费两种。

对于消费来说,只需要关心扣款即可,不需要知道卡里面有多少钱。

而一般常规的扣款操作从卡中读出金额,与扣款金额相减,相减后把值返回卡中,这样很容易导致一个

问题:

1:

知道卡中金额

2:

通过扣款权限可以对卡进行冲值,导致作弊

所以一般Mifare1卡的A密钥为扣款密码,B密钥为冲值密钥,而对金额的管理权限也只能是加值或者

减值,不能同时拥有两者。

以上就是值加减的来由。

一般的说,金融行业,把B密钥作为冲值,有相应的密钥管理卡,一般叫冲值SAM卡,把A密钥作为消

费密钥,有相应的密钥管理卡,一般叫消费SAM卡,也叫PSAM卡,SAM卡类似手机SIM卡,也是ISO7816

接口。

SAM卡的作用有以下几点:

1:

管理Mifare1卡的密码,每张卡,每个Block的密码都是不同的,所以需要一张卡来管理,一般的

流程如下,通过RFID获取Mifare1的ID号,再把ID号通过SAM卡获得Mifare1卡的密码,如果是PSAM

卡,就获得了A密钥,如果是冲值SAM卡,就获得了B密钥。

之后就可以根据流程处理

2:

对金额的管理,一般卡内存储的金额不是明码的,需要通过SAM卡才能转换,或者处理。

值操作流程:

1:

一个值最大不能超过32bit,其中最高位31bit位是无效的,也就是说最大值是2^31。

2:

一个Block是16BYTE,而值是32bit,也就是4Byte,所以这两者之间有一定的关联,格式如下:

例子如下:

blockdata[0]=0x55;

blockdata[1]=0x00;

blockdata[2]=0x00;

blockdata[3]=0x00;

blockdata[4]=0xAA;

blockdata[5]=0xFF;

blockdata[6]=0xFF;

blockdata[7]=0xFF;

blockdata[8]=0x55;

blockdata[9]=0x00;

blockdata[10]=0x00;

blockdata[11]=0x00;

blockdata[12]=BlockNo;

blockdata[13]=~BlockNo;

blockdata[14]=BlockNo;

blockdata[15]=~BlockNo;

代码中,调用InitBlock即可将块初始化为要求的格式,并将数据写入。

之后就可以对值操作,用以下两个命令即可:

加值指令

status=ValueOper(MIFARE_INCREMENT,BlockNo,Test_Add_Sub_Step,BlockNo);

减值指令

status=ValueOper(MIFARE_DECREMENT,BlockNo,Test_Add_Sub_Step,BlockNo);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1