一、动态库简介
动态库OUR_MIFARE.dll用VC开发,编译成32位Release实体或64位Release实体,适用于WIN2000、XP、2003、win7、win8、win10的32或64位编译和运行环境。本文档下面的源代码例子是Vb6的调用格式。
本动态库是本公司USB接口NFC系列NTAG2x卡读写器的配套文件,必须和读写器一起使用。
OUR_MIFARE.dll支持在软件运行中可以随时更换USB接口。本公司免驱型和有驱型读写器使用的OUR_MIFARE.dll不同,但函数的调用一样,如果客户程序开发好了,免驱型和有驱型互换时,只需更换对应的OUR_MIFARE.dll。
推荐使用动态调用的方法使用本动态库。
本说明使用设备的淘宝链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.11.4b8ae728rekhH0&id=545110725733
Ntag2x卡结构说明
二、易用函数
我们把复杂的NTAG2x卡认初始化、读、写过程集成转化为更简单的函数调用操作,即使是从未接触过一卡通开发的软件开发人员,写起程序来也毫不困难,一点都不浪费开发时间。开发人员不再需要花大量时间去了解NTAG2x卡的内部机制,我们将它封装成几个函数:1、初始化NTAG2x卡;2、轻松读NTAG2x卡;3、轻松写NTAG2x卡,只需十分钟就可轻松搞定NTAG2x卡!。
初始化NTAG2x卡
函数名:piccinit_ntag
功能 | 设置NTAG2x是否要认证卡密码才能读写卡(出厂状态的卡不需要认证卡密码就可以读、写),也可以用此函数修改卡片认证密码。 | |
VB声明 | Declare Function piccinit_ntag Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal picckey As Long, ByVal piccdata As Long) As Byte | |
输入 | 1、ctrlword 控制字,取值请参看示例。 2、serial只需指向一个至少已分配了7个char空间的可写数组 unsigned char *指针,serial的下标由0开始。 3、picckey指向存放认证密码的数组4个字节。 4、piccdata初始化卡的信息共16个字节,每个字节的取值请参看示例。 | |
返回 | ||
返 回 值 说 明 | 0 | 初始化卡成功 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
12 | 卡片密码认证失败。 | |
14 | 设置失败,可能需要验证密码。 | |
22 | 动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。 | |
23 | 没有连上USB 读写器。 | |
24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。 | |
其他 | 见函数返回代码表: |
轻松读NTAG2x卡:
函数名:piccreadex_ntag
功能 | 超强读卡,使用此函数可以一次读取多个连续页(最多12个)的信息,并且返回卡序列号。 | |
VB声明 | Declare Function piccreadex_ntag Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal picckey As Long, ByVal blockaddr As Byte, ByVal blocksize As Byte, ByVal piccdata As Long) As Byte | |
输入 | 1、ctrlword:控制字,取值16表示要先认证卡密码,取值0表示不认证卡密码。 2、serial:只需指向一个至少已分配了7个char空间的可写数组 unsigned char *指针,serial的下标由0开始。 3、picckey:指向存放认证密码的数组4个字节。 4、blockaddr:读起始页地址。 5、blocksize:本次读取的页数,最大取值12。 6、piccdata:是指向下标个数不小于48的字节数组,用于存放本次读取的数据,每个页4个字节。 | |
返回 | 返回unsigned char值,并将本次从卡内读取的数据传值到*piccdata指向的数组中。 | |
返 回 值 说 明 | 0 | 操作成功,读出的数据有效。 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
12 | 卡片密码认证失败。 | |
13 | 读卡失败,可能需要验证密码。 | |
23 | 没有连上USB 读写器 | |
其他 | 见函数返回代码表: | |
例子及注释 | 请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |
轻松写NTAG2x卡
函数名:piccwriteex_ntag
功能 | 超强写卡,使用此函数可以一次性写多个连续页(最多11个)数据到页地址大于3的用户数据页。Ntag2x卡0、1、2、3前面4个页保存了UID序列号、制造商信息、卡类型及容量等信息不可改写。 | |
VB声明 | Declare Function piccwriteex_ntag Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal picckey As Long, ByVal blockaddr As Byte, ByVal blocksize As Byte, ByVal piccdata As Long) As Byte | |
输入 | 1、ctrlword:控制字,取值16表示要先认证卡密码,取值0表示不认证卡密码。 2、serial:只需指向一个至少已分配了7个char空间的可写数组 unsigned char *指针,serial的下标由0开始。 3、picckey:指向存放认证密码的数组4个字节。 4、blockaddr:写起始页地址,取值大于3。 5、blocksize:本次写入的页数,最大取值11。 6、piccdata:是指向下标个数不小于44的字节数组,用于存放本次要写入卡片的数据,数据写入到从从blockaddr开始的页内,每个页4个字节。 | |
返回 | 返回unsigned char值,并将piccdata数组内的数据写入卡内。 | |
返 回 值 说 明 | 0 | 操作成功。 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
12 | 卡片密码认证失败。 | |
14 | 写卡失败,可能需要验证密码 | |
20 | 写卡失败,页已锁定不可写 | |
23 | 没有连上USB 读写器 | |
其他 | 见函数返回代码表: |
只读取NTAG2x卡UID
函数名:piccrequest_ul
功能 | 读取Ntag2x卡的出厂序列号,不管卡片是否加密都可以读取。 | |
VB声明 | Declare Function piccrequest_ul Lib "OUR_MIFARE.dll" (ByVal serial As Long) As Byte | |
输入 | 1、serial:只需指向一个至少已分配了7个char空间的可写数组 unsigned char *指针,serial的下标由0开始。 | |
返回 | 返回unsigned char值,并将piccdata数组内的数据写入卡内。 | |
返 回 值 说 明 | 0 | 操作成功。 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
23 | 没有连上USB 读写器 | |
其他 | 见函数返回代码表: |
读取NTAG2x卡内4个连续页
函数名:piccrequest_ul
功能 | 读取Ntag2x卡4个连续页数据,Ntag2x卡0、1、2、3前面4个页保存了UID序列号、制造商信息、卡类型及容量等信息,不需要认证卡密码都可以读出,页4开始的用户数据页如果开启了读密码保护后不能用此函数读取。 | |
VB声明 | Declare Function piccread_ul Lib "OUR_MIFARE.dll" (ByVal area As Byte, ByVal piccdata As Long) As Byte | |
输入 | 1、 area:要读取的页起始地址, 如果area取值为0、1、2、3,都表示读0-3页数据, 当area取值大于3时卡片如设置了读密码保护此函数无效;卡未启用读密码保护将读取起始页地址为area的连续四个页数据。 2、 *piccdata是指向下标个数不小于16的数组,作为返回16个字节的卡数据的缓存。 | |
返回 | 返回unsigned char值,并将piccdata数组内的数据写入卡内。 | |
返 回 值 说 明 | 0 | 操作成功。 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
13 | 读卡失败,请先执行读卡序列号的piccrequest_ul,或卡片已设为读密码保护,请使用piccreadex_ntag读取。 | |
23 | 没有连上USB 读写器 | |
其他 | 见函数返回代码表: |
写NTAG2x卡1个页
函数名:piccwrite_ul
功能 | 写Ntag2x卡用户数据页的指定页,Ntag2x卡0、1、2、3前面4个页保存了UID序列号、制造商信息、卡类型及容量等信息不可改写,页4开始的用户数据页如果开启了密码保护后不能用此函数写。 | |
VB声明 | Declare Function piccwrite_ul Lib "OUR_MIFARE.dll" (ByVal area As Byte, ByVal piccdata As Long) As Byte | |
输入 | 1、 area:要写页的起始地址,取值大于3。 2、*piccdata是指向下标个数为4的数组,作为4个字节的写卡缓存。 | |
返回 | 返回unsigned char值,并将piccdata数组内的数据写入卡内。 | |
返 回 值 说 明 | 0 | 操作成功。 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
14 | 写卡失败,请先执行读卡序列号的piccrequest_ul;或可能需要验证密码,请用piccwriteex_ntag函数写卡。 | |
20 | 写卡失败,页已锁定不可写 | |
23 | 没有连上USB 读写器 | |
其他 | 见函数返回代码表: |
让读写器发出声音
函数名:pcdbeep
功能 | 让读写器发出声响。(暂不开放对指示灯的控制,如果有特殊要求请致电本公司) | |
原始声明 | unsigned char __stdcall pcdbeep(unsigned long xms) | |
输入 | xms为响声的时间长度,单位为2毫秒 | |
返回 | 返回unsigned char值。 | |
返 回 值 说 明 | 0 | 操作成功。 |
22 | 动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。 | |
24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。 | |
27 | USB传输不稳定导致传输的字符不全。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | 请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |
读取读写器的设备编号
函数名:pcdgetdevicenumber
功能 | 返回本读写器独一无二的设备编号,此编号固化在芯片中,并通过加密的方式传输。根据此编号可在本公司网站查询是否真正为本公司的质保产品。因为可以返回全球唯一的设备编号,所以只需增加少量的算法,本读写器也可作软件加密狗用。 | |
原始声明 | unsigned char __stdcall pcdgetdevicenumber(unsigned char *devicenumber) | |
输入 | devicenumber只需指向一个至少已分配了4个char空间的可写数组 unsigned char *指针, serial的下标由0开始。因为此数组仅用于返回设备编号。 | |
返回 | 返回unsigned char值,并将寻到的卡的序列号传值到*serial数组。 | |
返 回 值 说 明 | 0 | 操作成功,* devicenumber数组中的数据有效。 |
22 | 动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。 | |
24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。 | |
28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | 请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |