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