USBReader开发文档
1、版本说明(版本V1.00)
*Allrightsrerved,Specificationssubjecttochangewithoutnotice.
2、返回值说明:
2.1函数返回值代码表:
0x00命令执行成功
0x01命令操作失败(失败原因请参考2.2底层单片机上传代码表)
0x02地址校验错误
0x04读写器返回超时
0x05数据包流水号不正确:
0x07接收异常
0x0A参数值超出范围
2.2底层单片机上传代码表:
0x80:参数设置成功
0x81:参数设置失败
0x82:通讯超时
0x83:卡不存在
0x84:接收卡数据出错
0x87:未知的错误
0x85:输入参数或者输入命令格式错误
0x8f:输入的指令代码不存在()
0x8A:在对于卡块初始化命令中出现错误(仅用于14443命令)
0x8B:在防冲突过程中得到错误的序列号(仅用于14443命令)
0x8C密码认证没通过(仅用于14443命令)
0x90卡不支持这个命令(仅用于15693命令)
0x91命令格式有错误(仅用于15693命令)
0x92在命令的FLAG参数中,不支持OPTION模式(仅用于15693命令)
0x93要操作的BLOCK不存在(仅用于15693命令)
0x94要操作的对象已经别锁定,不能进行修改(仅用于15693命令)
0x95锁定操作不成功(仅用于15693命令)
0x96写操作不成功(仅用于15693命令)
3SystemCommands
5、intSetSerNum(unsignedchar*newValue,
unsignedchar*buffer);
函数功能:设置8个字节的产品序列号。
输入参数:描述
*newValue8个字节的读写器序列号
*buffer用来返回接收到的数据的指针
输出参数:
*buffer返回STATUS后的状态,如果设置成功,则*buffer=0x80
如果设置失败,则*buffer为底层(读卡器单片机)上传的错误代码(参照底层协议代码表2.2)
返回值:
0x00,设置成功
0x01,设置失败
6、intGetSerNum(unsignedchar*buffer);
函数功能:
读取由厂家预设的1个字节的读卡器地址和8个字节序列号.
输入参数:
*buffer传入一个指针,用来返回接收到的数据
输出参数:
*bufferbuffer[0]读写器地址
buffer[1...8]8个字节的读写器序列号
返回值:
0x00,操作成功
0x01,操作失败
6、intWriteUrInfo(intnum_blk,
intnum_length,
char*ur_info);
函数功能:
读卡器提供4个块(每个块不能大于120个字节),共480个字节空间的用户数据区。用户可以根据
需要,储存相应的用户信息到读写器中.
输入参数:
num_blk区域号
num_length数据长度
*ur_info用户数据
返回值:
0x00,操作成功
0x01,操作失败
7、intReadUrInfo(intnum_blk,
intnum_length,
char*ur_info);
函数功能:
读取读卡器中提供4个块(每个块不能大于120个字节)的数据.
输入参数:
intnum_blk区域号
intnum_length读取的数据长度
*ur_info待读入的用户数据
输出参数:
*ur_info如果:操作失败,则ur_info[0]为错误代码
如果:操作成功,则ur_info[0..N]为读取的用户信息数据
返回值:
0x00,操作成功
0x01,操作失败
8、intGetVersionNum(char*VersionNum);
函数功能:
读取读写器的版本号.
输入参数:
*VersionNum待读入的版本号
输出参数:
*VersionNum如果:操作失败,则VersionNum[0]为错误代码
如果:操作成功,则VersionNum[0..N]为读入的版本号
返回值:
0x00,操作成功
0x01,操作失败
9、intControlLED(unsignedcharfreq,
unsignedcharduration,
unsignedchar*buffer);
函数功能:设置灯的工作状态,包括,灯亮的周期以及循环的次数
输入参数:freq周期数
duration次数
*buffer待返回的参数
输出参数:
*buffer如果:操作失败,则buffer[0]为错误代码(参考2.2)
如果:操作成功,则buffer[0]为成功标志,即为0x80
返回值:
0x00,操作成功,
0x01,操作失败
10、intControlBuzzer(unsignedcharfreq,
unsignedcharduration,
unsignedchar*buffer);
函数功能:设置蜂鸣器的工作状态,包括,蜂鸣器的工作周期以及循环的次数
输入参数:
freq周期数
duration次数
*buffer待返回的参数
输出参数:
*buffer如果:操作失败,则buffer[0]为错误代码(参考2.2)
如果:操作成功,则buffer[0]为成功标志,即为0x80
返回值:
0x00,操作成功
0x01,操作失败
4、ISO14443Type-ACommands
4.1Type-ACommands
4.1.1intMF_Request(
unsignedcharinf_mode,
unsignedchar*buffer);
函数功能:发送ISO14443A寻卡指令.
输入参数:
inf_mode寻卡模式
0x01–Idle模式(一次只对一张卡操作)
0x00–All模式(一次可对多张卡操作)
*buffer待返回的参数
输出参数:
*buffer如果:操作失败,则buffer[0]为错误代码
如果:操作成功,则buffer[0..1],返回2个字节的数据串
返回值:
0x00,操作成功
0x01,操作失败
4.1.2intMF_Anticoll(
unsignedchar*snr,
unsignedchar&status);
函数功能:
检测卡片数量,单卡或多卡,并返回4个字节的卡号。(如果有多张卡,就返回其中一张卡的卡号)
输入参数:
*snr传送一个指针,返回4个字节的卡号
&Status传送一个指针,返回卡片的数量
输出参数:
如果操作成功
Status检测到的卡片的数量(0x00表示检测到单卡,0x01表示检测到多卡)
*snr4个字节的卡号(snr[0..3])
如果操作失败
*snr为错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
4.1.3intMF_Select(
unsignedchar*snr);
函数功能:
选择卡,使卡进入被选择的状态…
输入参数:
*snr传送一个指针,传入4个字节卡号,并且返回4个字节的卡号
输出参数:
Status检测到的卡片的数量
*snr4个字节的卡号(snr[0..3])
返回值:
0x00,操作成功,
0x01,操作失败
4.1.4intMF_Halt();
函数功能:
选择卡,使卡进入被中断的状态…
输入参数:
无
返回值:
0x00,操作成功,
0x01,操作失败
4.2MifareAppilicationCommands
4.2.1intMF_Read(unsignedcharmode,
unsignedcharblk_add,
unsignedcharnum_blk,
unsignedchar*snr,
unsignedchar*buffer);
函数功能:
在指定位置读取指定长度的数据
输入参数:
mode,读取模式
(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,
RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)
(以上数字均为十六进制数字)
blk_add,读取块地址
num_blk,读取块数目
*snr,一个指针,传递的是六个字节的密钥
*buffer等待接受输出的指针变量
输出参数:
如果操作成功
*snr,4个字节的卡号
*buffer,读取到的数据(具体数量为:num_blk*16)
如果操作失败
buffer[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
4.2.2intMF_Write(unsignedcharmode,
unsignedcharblk_add,
unsignedcharnum_blk,
unsignedchar*snr,
unsignedchar*buffer);
函数功能:
在指定位置写入数据
输入参数:
mode,要写的模式
(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,
RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)
blk_add,要写块地址
num_blk,要写块数目
*snr,待写入的数据
*buffer,传入的指针符号..用来传出数据
输出参数:
如果操作成功
snr[0..3],4个字节的卡号
如果操作失败
buffer[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
4.2.3intMF_InitVal(
unsignedcharmode,
unsignedcharSectNum,
unsignedchar*snr,
unsignedchar*value);
函数功能:
初始化卡
输入参数:
mode,初始化模式
(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,
RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)
SectNum,要初始化的扇区号00-0F
*snr,6字节密钥(以指针的形式传入)
*value4字节的要初始化的数据
输出参数:
如果操作成功:
snr[0..3],4个字节的卡号
如果操作失败:
snr[0],错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
4.2.4intMF_Dec(
unsignedcharmode,
unsignedcharSectNum,
unsignedchar*snr,
int*value);
函数功能:
对卡的指定扇区进行减值操作。
输入参数:
mode,模式控制
(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,
RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)
SectNum,要写值的扇区号00-0F
*snr,6字节密钥(以指针的形式传入)
value要减的值,4个字节长度
输出参数:
如果操作成功
snr[0..3],4个字节的卡号
value[0..3]4个字节操作后的数据串
如果操作失败
snr[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
4.2.5intMF_Inc(
unsignedcharmode,
unsignedcharSectNum,
unsignedchar*snr,
int*value);
函数功能:对卡的指定扇区进行加值操作。
输入参数:
mode,模式控制
(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,
RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)
SectNum,要加值的扇区号00-0F
*snr,6字节密钥(以指针的形式传入)
value要加的值,4个字节长度
输出参数:
如果操作成功
snr[0..3],4个字节的卡号
value[0..3]4个字节操作后的数据串
如果操作失败
snr[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
4.2.6intMF_Getsnr(
unsignedcharmode,
unsignedcharhalt,
unsignedchar*snr
unsignedchar*value);
函数功能:返回1个字节的单卡或多卡标识,4个字节的卡号。
输入参数:
mode,模式控制(模式控制26or52)
0x26–Idle模式(一次只对一张卡操作)
0x52–All模式(一次可对多张卡操作)
halt,是否需要halt卡(halt选择00or01)
00不需要执行halt指令
01读写器执行halt指令
snr,返回的1个字节的单卡或多卡标识(如果读卡不成功,返回错误码)
value返回的4个字节的卡号
输出参数:
如果操作成功
snr[0],1个字节的单卡或多卡标识
value[0..3]返回的4个字节的卡号
如果操作失败
snr[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
4.2.7intMF_Restore(
unsignedcharmode,
intcardlength,
unsignedchar*carddata);
函数功能:
按照选择的模式,进行数据的发送
输入参数:
mode,模式控制0x00—不需要进行CRC校验
0x01—需要进行CRC校验
cardlength,卡数据长度
*carddata,发送时(卡数据)接收时(返回数据)
输出参数:
如果操作成功
carddata[0..N],接收返回数据
如果操作失败
carddata[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
14443Type-BCommands
5.1intRequestType_B(
unsignedchar*buffer)
函数功能:该命令执行ISO14443B中的REQB命令,获取卡片的PUPI代码
输入参数:
*buffer,卡片复位后的数据串(ATQB)
输出参数:
如果操作成功:
*buffer,卡片复位后的数据串(ATQB)
buffer[0]卡片复位数据的长度
buffer[1..N]操作后的数据串(ATQB)
如果操作失败:
buffer[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
5.2intAntiType_B(
unsignedchar*buffer);
函数功能:该命令执行ISO14443B中的AnticollB命令
输入参数:
*buffer,卡片返回的数据串(ATQB)
输出参数:
如果操作成功:
buffer[0..N],卡片返回的数据串(ATQB)
如果操作失败:
buffer[0]错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
5.3intSelectType_B(
unsignedchar*SerialNum);
函数功能:该命令执行ISO14443B中的ATTRIB命令,给已知PUPI的卡片分配一个识别号CID
输入参数:
*SerialNum,卡的序列号
返回值:
0x00,操作成功,
0x01,操作失败
5.4intRequest_AB(
unsignedchar*buffer);
函数功能:
该命令执行几集成了ISO14443B中的,REQUEST和ATTRIB命令,通过一个命令使卡复位。
输入参数:
*buffer,返回操作后的卡的序列号4个字节
输出参数:
如果操作成功:
buffer[0..3],返回操作后的卡的序列号4个字节
如果操作失败:
buffer[0],错误代码(具体参考2.2)
返回值:
0x00,操作成功,
0x01,操作失败
5.5intAPI_ISO14443TypeBTransCOSCmd(
unsignedchar*cmd,
intcmdSize,
unsignedchar*buffer);
函数功能:
ISO14443传送命令,可以通过此命令向卡发任意有效的命令,数据
输入参数:
*cmd,待发送的数据
cmdSize,数据长度
*buffer,回收的数据
输出参数:
*buffer,回收的数据
如果:操作成功,则buffer[0..N]为从卡返回的数据
操作失败,则buffer[0]为错误代码
返回值:
0x00,操作成功,
0x01,操作失败
6ISO15693COMMANDS
6.1ISO15693_Inventory(unsignedchar*Cardnumber,
unsignedchar*pBuffer);
函数功能:
此命令通过防冲突用于得到读卡区域内所有卡片的序列号(能得到的卡片数量与模块天线的输出
功率有关,一般能对2~6卡进行防冲突)
输入参数:
*Cardnumber,返回的卡的数量(一个字节)
*pBuffer返回的数据(包括FLAG和DSFID和8*n个字节的卡号)
输出参数:
如果:操作成功
*Cardnumber返回的卡的数量(一个字节)
*pBuffer返回的数据(包括FLAG和DSFID和8*n个字节的卡号)
如果:操作失败
*Cardnumber为错误代码
返回值:
0x00,操作成功,
0x01,操作失败
6.2intISO15693_Read(
unsignedcharflags,
unsignedcharblk_add,
unsignedcharnum_blk,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
用来读取1个或多个扇区的值,如果要读每个块的安全位,将FLAGS中Option_flag置为1,即
FLAG=0X42,每个扇区将返回5个字节,包括1个表示安全状态字节和4个字节的块内容,这时候
每次最多能读12个块。如果FLAG=02,将只返回4字节的块内容,这时候每次最多能读63个块。
输入参数:
flags0x02不带uid
0x22带uid
0x42不带uid但是要读安全位
blk_add,要读的起始块号
num_blk,块的数量
*uidUID信息
*buffer返回值
输出参数:
如果:返回操作成功
buffer[0]返回的flagbuffer[1..N]Data
操作失败,
buffer[0]为错误代码
返回值:
0x00,操作成功,
0x01,操作失败
6.3intISO15693_Write(
unsignedcharflags,
unsignedcharblk_add,
unsignedcharnum_blk,
unsignedchar*uid,
unsignedchar*data);
函数功能:对一个块进行写操作(每次只能写一个块)
输入参数:
flags0x02不带uid
0x22带uid
0x42不带uid但是要读安全位
blk_add,要写的起始块号
num_blk,写的块的数量
*uidUID信息
*data写入的数据
输出参数:
如果:操作失败,则data[0]为错误代码
返回值:
0x00,操作成功,
0x01,操作失败
6.4intISO15693_Lock(
unsignedcharflags,
unsignedcharnum_blk,
unsignedchar*uid
unsignedchar*buffer);
函数功能:用于锁定块内容。注意:此过程不可逆(不能解锁)块锁定后内容不能在修改。
输入参数:
flags0x02不带uid
0x42不带uid但是要读安全位
0x22带uid
num_blk,要锁的块号
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]值为0x80
如果:操作失败,则buffer[0]为错误代码
返回值:
0x00,操作成功,
0x01,操作失败
6.5intISO15693_StayQuiet(
unsignedcharflags,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
此命令用于将卡置于静止的状态,必须用地址模式,如果发送的数据与被操作的卡的序列号相同,
操作成功后,卡将进入静止状态,否则状态不变。
输入参数:
flags标识字节1个字节
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]返回的0x80,表示操作成功
如果:操作失败,则buffer[0]为错误代码(具体参考2.2)
返回值:
0x00,操作成功
0x01,操作失败
6.6intISO15693_Select(
unsignedcharflags,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
此命令必须用地址模式,如果发送的数据与被操作的卡的序列号相同,操作成功后,卡将进入被
选择状态,否则状态不变。
输入参数:
flags标识字节1个字节
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]为的0x80,表示操作成功
如果:操作失败,则buffer[0]为错误代码
返回值:
0x00,操作成功
0x01,操作失败
6.7intISO15693_RetToReady(
unsignedcharflags,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
操作成功后,卡回到Ready状态。
输入参数:
flags标识字节1个字节
0x02不带uid
0x42不带uid但是要读安全位
0x22带uid
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]的值为0x80,表示操作成功
如果:操作失败,则buffer[0]为错误代码(具体参考2.2)
返回值:
0x00,操作成功
0x01,操作失败
6.8intISO15693_WriteAFI(
unsignedcharflags,
unsignedcharafi,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
对卡进行写AFI操作。
输入参数:
flags标识字节1个字节
0x02不带uid
0x42不带uid但是要读安全位
0x22带uid
afi待写的AFI
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]值为0x80,表示操作成功
如果:操作失败,则buffer[0]为错误代码(具体参考2.2)
返回值:
0x00,操作成功
0x01,操作失败
6.9intISO15693_LockAFI(unsignedcharflags,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
用于锁定卡的AFI,锁定后AFI不可以更改
输入参数:
flags标识字节1个字节
0x02不带uid
0x42不带uid但是要读安全位
0x22带uid
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]返回的0x80,表示操作成功
如果:操作失败,则buffer[0]返回为错误代码
返回值:
0x00,操作成功
0x01,操作失败
6.10intISO15693_WriteDSFID(
unsignedcharflags,
unsignedcharDSFID,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
对卡的进行写DSFID操作
输入参数:
flags标识字节1个字节
0x02不带uid
0x42不带uid但是要读安全位
0x22带uid
DSFID要写的DSFID字节,长度为1个字节
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]值为0x80,表示操作成功
如果:操作失败,则buffer[0]值为错误代码(具体参考2.2)
返回值:
0x00,操作成功
0x01,操作失败
6.11intISO15693_LockDSFID(
unsignedcharflags,
unsignedchar*uid,
unsignedchar*buffer);
函数功能:
用于锁定卡的DSFID,锁定后DSFID不可以更改
输入参数:
flags标识字节1个字节
0x02不带uid
0x42不带uid但是要读安全位
0x22带uid
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,则buffer[0]返回的0x80,表示操作成功
如果:操作失败,则buffer[0]返回为错误代码
返回值:
0x00,操作成功
0x01,操作失败
6.12intISO15693_GetSysInfo(
unsignedcharflag,
unsignedchar*uid,
unsignedchar*Buffer);
函数功能:
用于得到卡的详细信息,具体内容请参考,ISO15693协议资料
输入参数:
flags标识字节1个字节
0x02不带uid
0x42不带uid但是要读安全位
0x22带uid
*uidUID信息
*buffer返回值
输出参数:
如果:操作成功,
则Buffer[0]:Flags
Buffer[1]:INFOFlags
Buffer[2..9]:UID
Buffer[10]:DSFID
Buffer[11]:AFI
Buffer[12..N]:Otherfields
如果:操作失败,则Buffer[0]返回为错误代码
返回值:
0x00,操作成功
0x01,操作失败
6.13intISO15693_GetMulSecurity(
unsignedcharflag,
unsignedcharblkAddr,
unsignedcharblkNum,
constunsignedchar*uid,
unsignedchar*pBuffer);
函数功能:用于获取卡的各个块的安全状态位的数据
输入参数:
flag0x02不带uid
0x22带uid
0x42不带uid但是要读安全位
blkAddr,要读的起始块号
blkNum,读的块的数量
*uidUID信息
*pBuffer返回值
输出参数:
如果:操作成功
*pBuffer返回的数据
pBuffer[0]返回的flagspBuffer[1..N]Blockcuritystatus(块的安全状态)
如果:操作失败,则pBuffer[0]为错误代码(具体参考2.2)
返回值:
0x00,操作成功
0x01,操作失败
6.14intISO15693_TransCOSCmd(
unsignedchar*cmd,
intcmdSize,
unsignedchar*buffer);
函数功能:一个通用命令,用户可以通过此命令,对卡进行各种操作。
输入参数:
*cmd,需要发送的数据
cmdSize,数据长度
*buffer返回值
输出参数:
如果:操作成功
*buffer返回的数据
buffer[0..N]从卡返回的数据
如果:操作失败,则buffer[0]为错误代码
返回值:
0x00,操作成功
0x01,操作失败
本文发布于:2022-11-14 16:06:37,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/18460.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |