版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简 本手册使用范 术语表和缩略 简 本手册使用范 术语表和缩略 概 读写器概 设备接 读写器装箱清 程序安 软 技术指 API函数指 软件开发包安装程序安装后主要目录和文 函数使用说 库函数简 1234通用函数简 设备操作函 复位RF(射频)模 卡片操 .9.通用函 设备操作函 MIFARE标准非接触卡操作函 1234MIFARE标准非接触卡操作流程 认证方式比 MIFARESTANDARD1K卡 MIFARE .——————————————————————————————————————————————Page2of 5 5 .复旦筹码卡操作函 1复旦非接触 .华虹SHC1102卡操作函 状态 SHC1102操作流 函数说 SAM/CPU卡操作函 SAM SAM指令传 CPU CPU指令传 11MIFAREPRO卡操作函 附卡片操作流 MIFAREPRO操作函 非接触卡片的特 复旦 华虹 ——————————————————————————————————————————————Page3of1简本手册使用范本手册描述了非接触式IC1简本手册使用范本手册描述了非接触式IC卡读写器的使用及应用程序接口函数(API,所有API函术语表和缩略近距离集成电路唯一识别DSFID: 保概设备操作函MifareStandard1K卡片操作函数MifareStandard1K卡片操作函数MifareUltraLight卡片操作函数MifareStandard4K卡片操作函数复旦FM11RF005卡片操作函数华虹SHC1102卡片操作函数SAM/CPU卡片操作函数MifarePro/Prox卡片操作函数附录(非接触卡特性——————————————————————————————————————————————Page4of2读写器概HRF-35LT是明华设备公司推出的又一款射频读写器。它采用了USB接口2读写器概HRF-35LT是明华设备公司推出的又一款射频读写器。它采用了USB接口通讯和取电,支ISO14443-3TypeA协议的卡片,例MifareOne、UltraLight、Mifare4K、MifarePro等。随机提供的接口函数库可满足用户二次开发的需要;其完善、可靠的接口函数,支持访问射频卡的功能设备接USB接口用于与上位PC联机读写器装箱清包装盒内配有:读写器,驱程序安HRF_35LT.exe按步骤安装我们的HRF-35LT软件开发包,安装结束后,在c:下创建一MWHRF- 的子目录,所有软件均在此目录下注:安装结束后,在c:下创建一个MWHRF-35LT的子目录,所有软件均在此目录下软通用无驱系列读写器软件包括:演示程序、函数库和应用范演示程提供Windows版演示程序:DemoHRF1.0.exe函数WINDOWS32位动态应用范MWHRF- 目录下提供各种开发平台的应用范例,包括VB、DELPHI、等——————————————————————————————————————————————Page5of卡HRF-内置天技术指技术指操作距离:HRF-35LT为 标准卡读写距离(()工作电源:USB取电%200——————————————————————————————————————————————Page6of3API函数指软件开发包安装程序安装后主要目录和3API函数指软件开发包安装程序安装后主要目录和文软件开发包安装程序安装mwhrf-下的目录和文Mwhrf-35lt\hrf- WINDOWS下演示软\mwrf32.dllMwhrf-35lt\hrf-WINDOWS32动态VC,VB,DELPHI等各种平台 函数使用说函数调用应遵循如下规则程序开始,首先要调用rf_init( rf_load_key()将卡中某一扇区密码输入到读写器中。如果使用直接密码认证,这步可以省调用rf_card()函数或者连续调用rf_request()anticoll()select()三个函数,成返回卡的序列号,并且卡片进入激活状态可(4)如果使用装载密码认证并且已装载密码,对于需要密码验证的卡片调函数验证卡片的密码,一次只能验证一个扇区如果使用直接密码认证rf_authentication_key()函数验证卡片的密码,用于验证的密)由于高级函数集成了若干低级函数,所以调用前可不必运行(3(4)过程(7)对某张卡操作完成后,应rf_halt()函数结束对该卡的操作程序正常退出或因错误退出之前,要用rf_exit()函数关闭读写器,断开读写器与PC之间的有关调用各种函数库的具体方法,请参 mwhrf-35lt\hrf-35lt\Examples\目录下的使用范例——————————————————————————————————————————————Page7of 库函数简本手册主要描述了35TI系列读写器操 库函数简本手册主要描述了35TI系列读写器操 通用函数简通用函数用来实现打开/关闭串口、加密/解密以及16进制字ASCII字符串间的相互转 rf_init(int16port,longrf_exit(HANDLErf_decrypt(char*key,unsignedchar*ptrSource,unsignedintmsglen,char*ptrDest);rf_encrypt(char*key,unsignedchar*ptrSource,unsignedintmsgLen,unsignedcharhex_a(unsignedchar*hex,char*a,unsignedcharlength);a_hex(char*a,unsignedchar*hex,unsignedcharlen);设备操作函设备操作函数可以复位读写器、控制蜂鸣器、 存储器、获取软件版本号、获硬件版本号及产品系列号等复位RF(射频)模块 rf_reset(HANDLEicdev,unsignedint16——————————————————————————————————————————————Page8of关闭通讯操作卡操作设初始化通讯上电,复控制蜂鸣器 获取硬件版本号 控制蜂鸣器 获取硬件版本号 获取产品系列号 rf_srd_snr(HANDLEicdev,int16lenth,unsignedchar获取软件版本号 lib_ver(unsignedchar 复位RF(射频)模 rf_reset(HANDLEicdev,unsignedint16功能参数icdev:rf_init()返回的设备描述符_Msec:0~返回成出例 卡片操卡片的应用程序接口(API)函数是根据卡片的标准来4.4.1Mifare标准非接触卡操作函装载密码 rf_load_key(inticdev,unsignedchar_Mode,unsignedchar_SecNr,unsignedchar rf_load_key_hex(inticdev,unsignedchar_Mode,unsignedchar_SecNr,chariae。这样用户使用起来会更方便。但是,如果对卡片进行多扇区或多块操作,速度将会变慢,因为在低级函数rf_request(HANDLEicdev,unsignedchar_Mode,unsigned rf_anticoll(HANDLEicdev,unsignedchar_Bcnt,unsignedlong*_Snr);rf_select(HANDLEicdev,unsignedlong_Snr,unsignedchar*_Size);rf_authentication_2(HANDLEicdev,unsignedchar——————————————————————————————————————————————Page9ofrf_authentication_key(HANDLEicdev,unsignedchar_Mode,unsignedchar_BlockNr,unsignedchar*_Key);rf_read(HANDLEicdev,unsignedchar_Adr,unsignedchar*_Data);rf_read_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);rf_write(HANDLEicdev,unsignedchar_Adr,unsignedchar*_Data);rf_write_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);rf_increment(HANDLEicdev,unsignedchar_Adr,unsignedlong_Value);rf_restore(HANDLEicdev,unsignedchar_Adr);rf_authentication_key(HANDLEicdev,unsignedchar_Mode,unsignedchar_BlockNr,unsignedchar*_Key);rf_read(HANDLEicdev,unsignedchar_Adr,unsignedchar*_Data);rf_read_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);rf_write(HANDLEicdev,unsignedchar_Adr,unsignedchar*_Data);rf_write_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);rf_increment(HANDLEicdev,unsignedchar_Adr,unsignedlong_Value);rf_restore(HANDLEicdev,unsignedchar_Adr);rf_transfer(HANDLEicdev,unsignedchar_Adr);rf_readval(HANDLEicdev,unsignedchar_Adr,unsignedlong*_Value);高级函数rf_changeb3(HANDLEicdev,unsignedchar_SecNr,unsignedchar*_KeyA,unsignedchar_B1,unsignedchar_B2,unsignedchar_B3,unsigned_Bk,unsignedcharrf_check_write(HANDLEicdev,unsignedlongSnr,unsignedcharauthmode,unsignedcharAdr,unsignedchar*_data);rf_check_writehex(HANDLEicdev,unsignedlongSnr,unsignedcharauthmode,unsignedcharAdr,char*_data);rf_HL_authentication(HANDLEicdev,unsignedcharreqmode,unsignedlongcharauthmode,unsignedcharintrf_HL_decrement(HANDLEicdev,unsignedchar_Mode,unsignedchar_SecNr,unsignedintrf_HL_increment(HANDLEicdev,unsignedchar_Mode,unsignedchar_SecNr,unsignedrf_HL_write(HANDLEicdev,unsignedchar_Mode,unsignedcharrf_HL_writehex(HANDLEicdev,unsignedchar_Mode,unsignedchar*_Snr,charrf_HL_read(HANDLEicdev,unsignedchar_Mode,unsignedcharintrf_HL_readhex(HANDLEicdev,unsignedchar_Mode,unsignedchar_Adr,unsignedlong_Snr,char*_Data,unsignedlong*_NSnr);intrf_HL_initval(HANDLEicdev,unsignedchar_Mode,unsignedchar_SecNr,unsignedMifareUltraLight专用函数 rf_get_snr(HANDLEicdev,unsignedchar——————————————————————————————————————————————Page10of4.4.2FM11RF005非接触射频卡操作函装载密码函数 rf_load_key(inticdev,unsigned4.4.2FM11RF005非接触射频卡操作函装载密码函数 rf_load_key(inticdev,unsignedchar_Mode,unsignedchar_SecNr,unsignedchar*_NKey); rf_load_key_hex(inticdev,unsignedchar_Mode,unsignedchar_SecNr,char*_NKey);低级函数rf_request(HANDLEicdev,unsignedchar_Mode,unsigned int16*TagType);rf_anticoll(HANDLEicdev,unsignedchar_Bcnt,unsignedlong*_Snr);rf_select(HANDLEicdev,unsignedlong_Snr,unsignedchar*_Size);rf_authentication(HANDLEicdev,unsignedchar_Mode,unsignedchar_SecNr);rf_authentication_key(HANDLEicdev,unsignedchar_Mode,unsignedcharunsignedchar*_Key);rf_read(HANDLEicdev,unsignedchar_Adr,unsignedchar*_Data);rf_read_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);rf_write_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);高级函数 华虹SHC1102卡片操作函装载密码函数 rf_load_key(inticdev,unsignedchar_Mode,unsignedchar_SecNr,unsignedchar*_NKey); rf_load_key_hex(inticdev,unsignedchar_Mode,unsignedchar_SecNr,char*_NKey);低级函数rf_request(HANDLEicdev,unsignedchar_Mode,unsigned int16*TagType);rf_anticoll(HANDLEicdev,unsignedchar_Bcnt,unsignedlong*_Snr);rf_select(HANDLEicdev,unsignedlong_Snr,unsignedchar*_Size);rf_authentication(HANDLEicdev,unsignedchar_Mode,unsignedchar_SecNr);rf_authentication_key(HANDLEicdev,unsignedchar_Mode,unsignedchar_BlockNr,unsignedchar*_Key);rf_read(HANDLEicdev,unsignedchar_Adr,unsignedchar*_Data);rf_read_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);rf_write_hex(HANDLEicdev,unsignedchar_Adr,char*_Data);高级函数 ——————————————————————————————————————————————Page11of4.4.4SAM/CPU卡操作函intrf_sam_rst(HANDLEicdev,unsignedcharbaud,unsignedchar*samack);intrf_sam_trn(HANDLEicdev,unsignedchar*samblock,unsignedchar*recv);intrf_cpu_rst(HANDLEicdev,unsignedcharbaud,unsignedchar*cpuack);4.4.5MIFAREPRO4.4.4SAM/CPU卡操作函intrf_sam_rst(HANDLEicdev,unsignedcharbaud,unsignedchar*samack);intrf_sam_trn(HANDLEicdev,unsignedchar*samblock,unsignedchar*recv);intrf_cpu_rst(HANDLEicdev,unsignedcharbaud,unsignedchar*cpuack);4.4.5MIFAREPRO卡操作函intrf_request(HANDLEicdev,unsignedchar_Mode,unsigned intrf_anticoll(HANDLEicdev,unsignedchar_Bcnt,unsignedlong*_Snr);intrf_select(HANDLEicdev,unsignedlong_Snr,unsignedchar*_Size);intrf_pro_rst(HANDLEicdev,unsignedchar*_Data);5通用函下面将详细描述通用函数功HANDLErf_init(int16port,long能该函数用于建立读写器PC机之间的连接,首先搜索无驱接口读写器,如果找到设备,则建立连接并返回。如果没有发现无驱接口读写器,则PC机通的设备描述符供以后使用参数通讯口号,对于无驱设备该baudrate通讯波特率(9600~115200),对于无驱设备该参数无效失返回例int波特率:115200,端口 能数断开机与读写器之间的连接,并释放相关设备描述符icdev:rf_init()= 成<>0:intst;返回例——————————————————————————————————————————————Page12of能DES算法加密。功参8密返回 = 能DES算法加密。功参8密返回 = 成 失//用“12345678”加密“abcdefghabcdefgh”例rf_decrypt(char*key,unsignedchar能DES功参回 成失返例//用“12345678”来解密“abcdefghabcdefgh” hex_a(unsignedchar*hex,char*a,unsignedchar能16ASCII字符。 16输出ASCII字返回 成失 a_hex(char*a,unsignedchar*hex,unsignedchar能ASCII16进制数。a:回:16进制数失返——————————————————————————————————————————————Page13of6设备操作函 rf_reset(HANDLEicdev,unsignedint16能:射频头复位(射频头掉电几毫秒)。 rf_init()返回的设备描述_Msec:复位时间,0~6设备操作函 rf_reset(HANDLEicdev,unsignedint16能:射频头复位(射频头掉电几毫秒)。 rf_init()返回的设备描述_Msec:复位时间,0~500回 返成失例 能数蜂鸣几毫秒 rf_init()返回的设备描述_Msec:返回=成失例st=rf_beep(icdev,10);//鸣叫10毫能数rf_get_status(HANDLEicdev,unsignedchar获取读写器的版本号 rf_init()返回的设备描述返回读写器版本信息,长度为18字返回 成 失intunsignedcharstatus[19];例能数rf_srdsnr(HANDLEicdev,int16lenth,unsignedchar*rec获取读写器的产品序列号icdev:rf_init()返回的设备描述符length:产品序列号的长度为16字节receive_buffer:返回成失unsignedchar例 lib_ver(unsignedchar——————————————————————————————————————————————Page14of功参能:APIAPI函数库版本号,长度为18个字节失返unsignedchar例能功参能:APIAPI函数库版本号,长度为18个字节失返unsignedchar例能数读取读写器的日期、星期和时间rf_init()返回的设备描述接收数据,长度大于7失秒intst;返回例char//datetime//1999,Thursday,May20,数rf_init()返回的设备描述日期、星期和秒返回例//17/06/99,时间为:12:34:56,unsignedchar——————————————————————————————————————————————Page15of能数rf_gettimehex(HANDLEicdev,char读取读写器时钟的日期、星期和时 (16进制数)icdev:rf_init()返回的设备描述符receive_data:返回的数据,长度大于14个字节 成 失chardata[15];能数rf_gettimehex(HANDLEicdev,char读取读写器时钟的日期、星期和时 (16进制数)icdev:rf_init()返回的设备描述符receive_data:返回的数据,长度大于14个字节 成 失chardata[15];返回例rf_settimehex(HANDLEicdev,char能:以16进制数设置读写器时钟的日期、星期和时间数成失返回例//设置日期:17/06/99,时间:12:34:56,charrf_srdeeprom(HANDLEicdev,int16offset,length,能数eeprom功参位移地址(0-249)数据长度(1- 接收数据的缓冲返回=成失例unsignedcharrf_swreeprom(HANDLEicdev,int16offset,int16能eeprom中写入数据。icdev:rf_init()返回的设备描述符offset:位移地址(0-249)length:数据长度(1- 将写eeprom中的数功参——————————————————————————————————————————————Page16of=成失例unsignedchar7标准=成失例unsignedchar7标准非接触卡操作流程改变操作地——————————————————————————————————————————————Page17of中(完成所有操作减值操增值操作,选冲IDLE/ALL模式寻复上电复 认证方式比 认证方式比安全性装载密码认证是指将密码下载到读写器存储单元,C机发送卡片认证指令后读写器从存储单元取出相应的密码进行卡片认证。由于密码下载到读写器存储单元后是不可读的,并且下载到读写器的密码在读写器断电后不会丢失,所以可以在安全的地方将密码下载到读写器密码存储单元有使用寿命,一般为十万次,如果装载过于频繁超过使用寿命,将会坏掉不能再装载密码b)直接密码认证的优点和缺点PC缺点:安全性不己保证,通过其他方式来保证密码的安全性——————————————————————————————————————————————Page18of MifareStandard1K卡这里详细介绍了MifareStandard1K MifareStandard1K卡这里详细介绍了MifareStandard1K卡片的操作函数,有关卡片的资料详见Standard1K”部分MifareStandard卡片状态POWERPowerOnIDLERequestREADYACTIVERequestHALT——————————————————————————————————————————————Page19ofMifareStandard1K卡API函数流程IDLE多卡操验证该扇区的密。rf_authenticat数据值操MifareStandard1K卡API函数流程IDLE多卡操验证该扇区的密。rf_authenticat数据值操NY张卡片吗N调用std1K卡片API——————————————————————————————————————————————Page20of退出Y用IDLE模式或ALL模式寻选用IDLE上电7.3.3操作函数说iae。这样用户使用起来会更方便。但是,如果对卡片进行多扇区或多块操作,速度将会变慢,因为在 rf_load_key(HANDLEicdev,unsigned7.3.3操作函数说iae。这样用户使用起来会更方便。但是,如果对卡片进行多扇区或多块操作,速度将会变慢,因为在 rf_load_key(HANDLEicdev,unsignedchar_Mode,unsigned功向读写器装载指定扇区的新密码(不与卡片进行通讯),读写器中有16个扇区(0~15参 rf_init()返回的设备描述_Mode:0—KEY4—KEY=失返装载扇区1的0keyrf_load_key_hex(HANDLEicdev,unsignedchar_Mode,unsignedchar:rf_load_key函数相似。参数: rf_init()返回的设备描述_Mode:0—KEY4—KEY返回 失例charkey[]=“a0a1a2a3a4a5”;——————————————————————————————————————————————Page21of(1)rf_request(HANDLEicdev,unsignedchar_Mode,unsigned:该函数向卡片发出寻卡命令,开始选择一张新卡片时需要执行该函数。参数: rf_init()返回的设备描述寻卡模式(1)rf_request(HANDLEicdev,unsignedchar_Mode,unsigned:该函数向卡片发出寻卡命令,开始选择一张新卡片时需要执行该函数。参数: rf_init()返回的设备描述寻卡模式0IDLEmode,IDLE状态的卡片才响应读写器ALLmode,IDLEHALT响应读写器的命令1(Mifarestd.1k0x0004,UltraLight0x0044,FM005:0x0005Mifarestd.4k:0x0002,SHC1122:成失例unsignedinttagtype;(2)MIFARE卡片在感应区内,将会选择一张卡片,并返回卡片的序列号供将来调用rf_select函数时=intrf_init()返回的设备描述,失例unsignedlong(3)用指定的序列号选择卡片,将卡片的容量返回给PC机icdev:rf_init()返回的设备描_Snr:卡片容量的地址指针,目前该值——————————————————————————————————————————————Page22of=int成失例unsignedlongunsignedcharsize;(4)rf_authentication(HANDLE=int成失例unsignedlongunsignedcharsize;(4)rf_authentication(HANDLEicdev,unsignedchar_Mode,unsigned功能: 0—KEYA4—KEYB失=例 int//authenticationthe5thsectorwhitthe0thkeyA(5)int rf_authentication_2(HANDLEicdev,unsignedchar_Mode,unsignedcharKeyNr,unsignedcharAdr);功能: rf_init()返回的设备描述_Mode:0—KEYA4—KEYBKeyNr:读写器中该扇区(0~15)=失例 用读写器中0扇区的KEYA验证块2int(6)intrf_authentication_key(HANDLEicdev,unsignedchar_Mode,char_BlockNr,unsignedchar功能利用函数参数中提供的密码对卡片指定数据块进行认证。如果参数中提供——————————————————————————————————————————————Page23of密码与卡片的密码匹配,则认证成功,反之则认证失败参数icdev:rf_init()_Mode:密码与卡片的密码匹配,则认证成功,反之则认证失败参数icdev:rf_init()_Mode:0—KEYA4—KEYBBlockNr:卡片数据块地址=错返回unsignedcharkey[]={0xff,0xff,0xff,0xff,0xff,st=rf_authentication_key(icdev,0,0,例(7)从一张选定并通过密码验证的卡片读取一块共16个字节的数据icdev:rf_init()返回的设备描 读取数据的块号_Data:读取的数据,PC机上RAM的地址空间由调用该函数来分配 成 失int例(8)读取16进制数的16int块地址,0~63失返回例unsignedchar//readdatafromblock1(9)将一块共16字节写入选定并验证通过的卡片中icdev:rf_init()返回的设备描_Adr:_Data:写入数据,长度为16——————————————————————————————————————————————Page24ofint成失例st=rf_write(icdev,1,data);写入块(10)rf_write_hex(HANDLEicdev,unsignedchar_Adr,charint成失例st=rf_write(icdev,1,data);写入块(10)rf_write_hex(HANDLEicdev,unsignedchar_Adr,char以十六进制写数据,icdev:rf_init()返回的设备描_Adr:_Data:写入数据,长度为32 成 失intst=rf_write_hex(icdev,1,data);//writeblock1例初始化某一块的值icdev:rf_init()返回的设备描_Adr:_Value: 成 失intunsignedlongvalue=1000;例注:对某一块进行值操作时使用的是特殊的数据结构,所以需要进行初始化,后才可以进行其它的增值和减值操作(12)rf_increment(HANDLEicdev,unsignedchar_Adr,unsigned对值操作的块进行增值操作icdev:rf_init()返回的设备描_Adr:_Value:返回=int失例unsignedlong——————————————————————————————————————————————Page25of:对值操作的块进行减值操作。参数: rf_init()返回的设备描述 值:对值操作的块进行减值操作。参数: rf_init()返回的设备描述 值操作的块地int失例unsignedlong(14) 读出指定值操作块的当前值 rf_init()返回的设备描述 值操作的块地:返回=int成失例unsignedlong//readthecontentandputinvalue(15)将某块的数据传入卡的内部寄存器中int失例注:用此函数将某一块内的数值传入卡的内部寄存器,然后rf_transfer()数将寄存器的数据再传送到另一块中去,即实现了块与块之间的数值传送(16)rf_transfer(HANDLEicdev,unsignedchar:increment,decrement或restore操作后可直接调用。——————————————————————————————————————————————Page26of=0intrf_init()返回的设备描失例(17)=0intrf_init()返回的设备描失例(17)unsignedlong_Value);通过传送来减少块的值能功 rf_init()返回的设备描述 块地_Value:回int成失例unsignedlong(18)rf_halt(HANDLE功能:将一张选中的卡片设为“Halt”模式,只有当该卡再次复位或用调用request函数时,读写器才能够再次操作它。ALL失例 注:使rf_card()函数时,如果模式选择为0则在对卡进行读写操作完毕后,必须执rf_halt(),且只能当该卡离开并再次进入操作区域时,读写器才能够再次操作它 高级函(19) 功能 rf_select的功能icdev:rf_init()返回的设备描_Mode:0:IDLE1:ALL返回卡片的系列——————————————————————————————————————————————Page27of=0 成<>0int失例unsignedcharMode=0;//IDLE=0 成<>0int失例unsignedcharMode=0;//IDLEmodeunsignedlongsnr;)和注意IDLE模式寻卡时,完成对卡片的操作后rf_halt函数来停止操作,选用ALL模式寻卡时,完成对卡片的操作后调用rf_halt函数来停止此后读写器仍能找到该卡片,无须离开操作区域并再次重新进入(20)int rf_changeb3(HANDLEicdev,unsignedchar_SecNr,unsignedchar*_KeyA,unsignedchar_B0,unsignedchar_B1,unsignedchar_B2,unsignedchar_B3,unsignedchar_Bk,unsignedchar*_KeyB);功能 修改KeyA,访问条件和0块的控制位,低三位(D2D1D0)对应为1块的控制位,(D2D1D0)对应为2块的(D2D1D0)对应3块的(D2D1D0)对应为保留参数,设为 key 成 失intunsignedcharkeya[6]={0xa0,0xa1,0xa2,0xa3,0xa4,0xa5};例(21)int charauthmode,unsignedcharAdr,unsignedchar*_data);:rf_write()函数后调用该函数。参数: Authmode:01块地——————————————————————————————————————————————Page28of失unsignedchardatabuff[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,unsignedcharst=rf_write(icdev,4,databuff)写入第4例st=rf_check_write(icdev,authmode,4,databuff);失unsignedchardatabuff[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,unsignedcharst=rf_write(icdev,4,databuff)写入第4例st=rf_check_write(icdev,authmode,4,databuff);检查第4块的内容正确与(22)int charauthmode,unsignedcharAdr,char*_data);:rf_check_write()函数类似,但使用的是16进制数。参数: Authmode:返回 =块地失 unsignedcharauthmode=0;(23)rf_HL_initval(HANDLEicdev,unsignedchar:高级初始化值(只用于扇区不用于块0——IDLE1——ALL,初始化的卡片系列号(只在模式2,选择模式中使用返回 =成失函数操作流程:request(ALL(DATA)——————————————————————————————————————————————Page29ofread(DATA)read(BACKUP)unsignedlongsnr;例(24)rf_HL_decrement(HANDLEicdev,unsignedchar_Mode,unsignedread(DATA)read(BACKUP)unsignedlongsnr;例(24)rf_HL_decrement(HANDLEicdev,unsignedchar_Mode,unsigned:高级减值操作(用于扇区)参数:icdev:rf_init()返回的设备描_NValue:将要减去的rf_hl_initval函数 成 失函数操作流程:request(ALLauthenticationread(DATA)例unsignedlong(25)rf_HL_increment(HANDLEicdev,unsignedchar_SecNr,unsignedlong_Value,unsignedlong:高级增值操作(用于扇区)参数:_Nvalue:rf_init()返回的设备描述rf_hl_initval()函数成失函数操作流程:request(ALL——————————————————————————————————————————————Page30of(DATA)(DATA)unsignedchar例(26)intrf_HL_write(HANDLEicdev,unsignedchar:高级写函数,向选定的并通过密码验证的卡片写入1块16个字节。参数:rf_init()返回的设备描rf_HL_initval函数相似卡片系列号(仅用于模式(长度为16字节)失函数操作流程:request(ALL例unsignedlong(27)rf_HL_writehex(HANDLEicdev,unsigned16=成失unsignedlongSnr;例 :高级读函数,从选定的并通过密码验证的卡片读出1块16——————————————————————————————————————————————Page31of=rf_init()返回的设备描卡片系列号(仅用=rf_init()返回的设备描卡片系列号(仅用于模式(长度为失字节函数操作流程:request(ALLIDLE)(_Adr)read例unsignedchardata[16];(29) rf_HL_readhex(HANDLEicdev,unsignedchar高级16=成失例unsignedchardata[32];(30)rf_HL_authentication(HANDLEicdev,unsignedcharunsignedlongsnr,unsignedcharauthmode,unsignedchar:高级验证函数(rf_card()rf_authentication()函数rf_init()返回的设备描述密码验证模0A成失unsignedlongsnr;——————————————————————————————————————————————例Page32of Mifare这里只说明了操作流程Selectcard Mifare这里只说明了操作流程SelectcardwithSN:serial——————————————————————————————————————————————Page33of(GetserialRequestRequestPowerOnMifareUltraLight状态ofCascadelevelMifareUltraLight状态ofCascadelevelfromaddressofCascadelevelof4of16Note:Notshowninthisdiagram:IneachstatethecommandinterpreterreturnstotheIdlestateifanunexpectedcommandisreceived.IftheIChasalreadybeenintheHaltstateveforeitreturnstotheHaltstateinsuchacase.——————————————————————————————————————————————Page34of函数说IDLE单张卡片吗N调用MifareUltraLight卡片API函数流程——————————————————————————————————————————————函数说IDLE单张卡片吗N调用MifareUltraLight卡片API函数流程——————————————————————————————————————————————Page35of退出程选用IDLE卡操L模 选用IDLE模式寻卡Y上电复 rf_request(HANDLEicdev,unsignedcharMode,unsignedint16能:寻卡请数:icdev:rf_init()返回的设备描 rf_request(HANDLEicdev,unsignedcharMode,unsignedint16能:寻卡请数:icdev:rf_init()返回的设备描述_Mode:U寻卡模01IDLEmode,IDLEALLmode,IDLEHALTTagtype(Mifarestd.1k:0x0004,UltraLight:0x0044,FM005:0x0005,Mifarestd.4k:0x0002,SHC1122:0x3300)返回值:=成失例intst;unsignedint功 rf_anticoll(HANDLEicdev,unsignedchar_Bcnt,unsignedlongMIFARE卡片在感应区内,将会选择一张卡片,并返回卡片的序列号供将来调用rf_select函数时使用。数:icdev:rf_init()返回的设备描述回:成功则返回0参返例intunsignedlongsnr;注:request指令之后应立即调用anticoll,除非卡的序列号已知 _Snr:卡序列回:成功则返回返例intunsignedlongsnr=239474;unsignedcharsize; 参数:icdev:rf_init()返回的设备描述符 卡片序列号0字——————————————————————————————————————————————Page36of..失..返回值 intunsignedcharst=rf_get_snr(icdev,例..失..返回值 intunsignedcharst=rf_get_snr(icdev,例 能:读取卡中数据,icdev:rf_init()返回的设备描=int成失返回值例rf_read()相同,读出的数据以十六进制形式表icdev:rf_init()返回的设备描 页地址_Data:返回值int成失例unsignedchar功能:向卡中写入一个长度为16字节的数据,但是只有低4位的字节写入到指定的地icdev:rf_init()返回的设备描_Adr参返回值int成失例——————————————————————————————————————————————Page37ofmemet(data,0,17);memcpy(data,//写第二 rf_write_hex(HANDLEmemet(data,0,17);memcpy(data,//写第二 rf_write_hex(HANDLEicdev,unsignedchar_Adr,char能用十六进制的形式写icdev:rf_init()返回的设备描_Adr_Data:写入的数据,32字节.24返回值int成失例unsignedchardata[33];memset(data,0,33);功 rf_halt(HANDLE能:中止对该卡操作,执行这个指令后,在重新复位之前,不能再对卡进行通讯icdev:rf_init()返回的设备描参返回值 成 失例——————————————————————————————————————————————Page38of MifareStandard这里只说明了MifareStandard4K卡的操作函 MifareStandard这里只说明了MifareStandard4K卡的操作函数,有MifareStandard卡的资料请参状态图和指令流POWERPowerOnIDLERequestREADYACTIVERequestHALT——————————————————————————————————————————————Page39of操作流程PowerOnIs FlowDiagramofCardHalt——————————————————————————————————————————————Page40of操作流程PowerOnIs FlowDiagramofCardHalt——————————————————————————————————————————————Page40of函数说明IDLE数据操值操N YNYN调用std4K卡片API——————————————————————————————————————————————函数说明IDLE数据操值操N YNYN调用std4K卡片API——————————————————————————————————————————————Page41of选用IDLE用IDLE扇区号<=15:>15:r次装载16个密码。在mifare系列卡的操作函数中,针对同一个操作有高级函数和低级函数之分 低级函 rf_request(HANDLEicdev,unsignedcharMode,unsignedint16在mifare系列卡的操作函数中,针对同一个操作有高级函数和低级函数之分 低级函 rf_request(HANDLEicdev,unsignedcharMode,unsignedint16参数:icdev:rf_init()返回的设备描述_Mode:U寻卡模01IDLEmode,IDLEALLmode,IDLEHALTTagtype:卡类型值,(Mifarestd.1k:0x0004,UltraLight:0x0044,FM005:5,Mifarestd.4k:0x0002,SHC1122:返回值=成失例 #defineIDLEintunsignedint*tagtype;卡如果选择ALL模式寻卡对卡进行操作,执行Urf_halt()U命令中止卡操作后,卡可以不离开操作区.读写器下次也能寻到那张相同的卡功 rf_anticoll(HANDLEicdev,unsignedchar_Bcnt,unsignedlongMIFARE卡片在感应区内,将会选择一张卡片,并返回卡片的序列号供将来调用rf_select函数时使用。数icdev:rf_init()返回的设备描回:成功则返回0参返例intunsignedlongsnr;注:request指令之后应立即调用anticoll,除非卡的序列号已知 icdev:rf_init()返回的设备描——————————————————————————————————————————————Page42of_Snr:卡序列返回:成功则返回0例intunsignedlongsnr=239474;unsignedcharsize; 能:验证某_Snr:卡序列返回:成功则返回0例intunsignedlongsnr=239474;unsignedcharsize; 能:验证某一数:icdev:rf_init()返回的设备描述0A4B_例SecNr:要验证密码的扇区号intst=rf_authentication(icdev,0,5);//认证第5扇区HRF-35LT系列的读写器只能装载16个扇区的密码。16-39扇区必须调用rf_authentication_2() rf_authentication_2(HANDLEicdev,unsignedchar_Mode,unsignedKeyNr,unsignedchar能:0—15功icdev:rf_init()返回的设备描_Mode:rf_authenticationKeyNr:返回值=成<>0:例 intst;//用第0单元的密码认证第0扇区的密码intrf_authentication_key(HANDLEicdev,unsignedchar_Mode,unsigned参数icdev:rf_init()返回的设备描_Mode:0KEYA4KEYBBlockNr:卡片数据块地址用于卡片认证的密——————————————————————————————————————————————Page43of返回 正错例unsignedcharkey[]={0xff,0xff,0xff,0xff,0xff,返回 正错例unsignedcharkey[]={0xff,0xff,0xff,0xff,0xff, icdev:rf_init()返回的设备描_Adr:块地址(0~255;回:成功则返回0返例intunsignedchardata[17]; :以十六进制形式读取数据;参数:icdev:rf_init()返回的设备描_Adr(0~255;_Data:读出返回值成失例 intunsignedchardata[33]; rf_write(HANDLEicdev,unsignedcharAdr,unsignedcharicdev:rf_init()返回的设备描_Adr:M1卡——块地址(1~255;_Data:要写入的数据,长16字返回值 成失例 intunsignedchar//10) rf_write_hex(HANDLEicdev,unsignedchar_Adr,char:用十六形式进写参数:icdev:rf_init()返回的设备描_Adr:块地址——————————————————————————————————————————————Page44of_Data:,返回值 成int失例unsignedchar//11)_Data:,返回值 成int失例unsignedchar//11)参数:icdev:rf_init()返回的设备描_Adr:块地返回:成功则返回0例intunsignedlongvalue=1000;注:在进行值操作时,必须先执行初始化值函数,然后才可以读、减、加的操作12)intrf_increment(HANDLEicdev,unsignedchar_Adr,unsignedlong功参能:块加数:icdev:rf_init()返回的设备描述_Adr:块地回:成功则返回0;返例intunsignedlongst=rf_increment(icdev,1,13)intrf_decrement(HANDLEicdev,unsignedchar_Adr,unsignedlongicdev:rf_init()返回的设备描_Adr:块地回:成功则返回0返例intunsignedlongvalue=10;14) 参数:icdev:rf_init()返回的设备描_Adr:块地——————————————————————————————————————————————Page45of返回:成功则返回0例intunsignedlongvalue;/*读出1的值,放入15)返回:成功则返回0例intunsignedlongvalue;/*读出1的值,放入15) icdev:rf_init()返回的设备描回:成功返回0功参返例:int注:用此函数将某一块中的数值传入内部寄存器,然后rf_transfer()函数将寄存器中数再传送到另一块中去,实现块与块之间数值传送。该函数只用于值块16) 功参能:传送,将寄存器的内容传送到EEPROM中,在rf_restore()后执行数icdev:rf_init()返回的设备描回:成功返回0返例:rf_restore(icdev,1);上两行实现将块1的内容传送到块217) rf_halt(HANDLE0返例模式则必须把卡移开感应区再进来才能寻得这张卡——————————————————————————————————————————————Page46of 高级函18) 功 高级函18) 功rf_request,rf_anticoll和的功能数:icdev:rf_init()返回的设备描述_Mode:U寻卡模0:IDLE1:ALL回:成功则返回0参返例intunsignedlongsnr;st=rf_card(icdev,0,&snr);IDLE模式寻卡注意:rf_card():rf_request(),rf_selectandrf_anticoll()卡如果选择L执行r_ha)U19) *_KeyA,unsignedchar_B0,unsignedchar_B1,unsigned_B3,unsignedchar_Bk,unsignedchar3参数:icdev:rf_init()返回的设备描述_SecNr:扇区_KeyA:密码_B00控制字,低3位(D2D1D0)对C10、C20、_B11控制字,低3位(D2D1D0)对C11、C21、_B22控制字,低3位(D2D1D0)对C12、C22、_B33控制字,低3位(D2D1D0)对C13、C23、_Bk:保留参数,取值为_B2,unsignedintunsignedcharkeya[6]={0xa0,0xa1,0xa2,0xa3,0xa4,0xa5};st=rf——————————————————————————————————————————————Page47of8复旦筹码卡操作函 复旦非接触卡这里只说明了复卡的操作函数,有关卡的资料请参考录FM11RF005操作流Do8复旦筹码卡操作函 复旦非接触卡这里只说明了复卡的操作函数,有关卡的资料请参考录FM11RF005操作流DoAUTH Card——————————————————————————————————————————————Page48ofWaitcommandPowerOn函数说明IDLE0-15块数据或写入2-15块数据。NY函数说明IDLE0-15块数据或写入2-15块数据。NYN调用FUDAN卡API函数流程——————————————————————————————————————————————Page49of退出程只须验证一次密码Y上电复1) rf_request(HANDLEicdev,unsignedchar_Mode,unsignedint16参数:icdev:rf_init()返回的设备描述1) rf_request(HANDLEicdev,unsignedchar_Mode,unsignedint16参数:icdev:rf_init()返回的设备描述01ALL一次对一张卡操一次可对多张卡操作std.4k:0x0002,SHC1122:0x3300)返回值=失例:#defineIDLE0x00intst;unsignedint 能:卡防冲突,返回卡的序数:icdev:rf_init()返回的设备描述回:成功则返回0返例intunsignedlongsnr;注:request指令之后应立即调用anticoll,除非卡的序列号已知 _Snr:卡序列回:成功则返回0返例intst,type;unsignedlong _Mode:0:IDLE——————————————————————————————————————————————Page50of1:ALL失=0<>0int例unsignedcharMode=0;//IDLEmodeunsignedlongsnr;1:ALL失=0<>0int例unsignedcharMode=0;//IDLEmodeunsignedlongsnr;注意:rf_card()由三个低级函数构成:rf_requestrf_selectandrf_anticoll()2)对于需要认证的卡片,这里有两种认证方式:装载密码认证和直接密安全性装载密码认证是指将密码下载到读写器存储单机发送卡片认证指令后读写从存储单元取出相应的密码进行卡片认证。由于密码下载到读写器存储单元后是装载密码可以和卡片交易分开,可以在不同的时间和地点进行。rf_load_key(HANDLEicdev,unsignedchar_Mode,unsignedcharchar将密码装入读写模块RAM中,没有数据交换16FM005只有一个密码,用于密码验证的块icdev:rf_init()返回的设备描_Mode:_SecNr:装载密码的扇区号(0-_Nkey:6字节密码,因为FM0054个字节的密码,2位可以设为0。返回=成失例:st=rf_load_key(icdev,0,1,key);//在扇区1中装载0A密rf_load_key_hex(HANDLEicdev,unsignedchar_Mode,unsignedchar:rf_load_key相似,用十六进制表示参数:icdev:rf_init()返回的设备描述符Mode:_SecNr:装载密码的扇区号(0-_Nkey:12字节密码,FM0054个字节的密码,——————————————————————————————————————————————Page51of位可以设0成失 /loadthe0PthPkey位可以设0成失 /loadthe0PthPkeyA“a0a1a2a3a4a5”intosector1charkey[]=“a0a1a2a3a4a5”; rf_authentication(HANDLEicdev,unsignedchar_Mode,unsignedchar功能: .参数 icdev:rf_init()返回的设备描述_Mode:返回 =例 int失//authenticationthe5thsectorwhitthe0PthPkeyA注意因为FM005只有一个密码,所以用于密码验证的块号要与装载密码的扇直接密码认优点:方便,没有使用寿命限制C缺点:安全性不intrf_authentication_key(HANDLEicdev,unsignedchar_Mode,unsignedcharunsignedchar功能利用函数参数中提供的密码对卡片指定数据块进行认证。如果参数中提供的密码片的密码匹配,则认证成功,反之则认证失败参数icdev:rf_init()返回的设备描_Mode:0KEYA4KEYBBlockNr:卡片数据块地址=错返回例unsignedcharkey[]={0xff,0xff,0xff,0xff,0xff,——————————————————————————————————————————————Page52of3) 3) icdev:rf_init()返回的设备描 要读取的数据块(0-_Data:读出的数据返回 成 intst;unsignedchar例 :读一个数据块,十六进制表示数据参数:icdev:rf_init()返回的设备描_Adr:要读取的数据块(0~15)Data:rf_read()相同.返回 int例unsignedchardata[32];4) 参数:icdev:rf_init()返回的设备描_Adr:要写数据的块地址(2-15返回:成功则返回0例intunsignedcharst=rf_write(icdev,4,data);//写第四 rf_write_hex(HANDLEicdev,unsignedchar_Adr,char参数:icdev:rf_init()返回的设备描_Adr:要写数据的块地址(2-15_Data:要写入的数——————————————————————————————————————————————Page53of返回 成 失int返回 成 失int例5)中止对卡操作,如果想继续对卡操作,需要重新寻卡 rf_halt(HANDLE:中止对卡操作,如果想继续对卡操作,需要重新寻卡。icdev:rf_init()返回的设备描 成 失例——————————————————————————————————————————————Page54of9华虹SHC1102卡操作函状态9华虹SHC1102卡操作函状态ReadGet——————————————————————
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中老师德育工作计划
- 202X年全市脱贫攻坚工作推进情况和下步工作计划
- 学校半日工作计划范文
- 定制服务联盟商业计划书
- 2024年稽查工作计划
- 2021秘书工作计划例文参考
- 六年级班务计划六年级班务工作计划简表
- 县妇联上半年总结及下半年计划
- 八年级上学期体育教学工作计划
- 关于五年级上册数学教学计划模板集锦
- 人工智能技术咨询行业可行性分析报告
- 2024年建筑施工起重机械设备安全管理制度(3篇)
- 2024年采购工作规划
- 人教版英语八年级上册《Unit 10 If you go to the party,you'll have a great time!》大单元整体教学设计2022课标
- 胸痛的诊断及护理
- 列管式(正丁醇)换热器设计
- 工厂配电系统培训
- 职场礼仪概述与常见的礼仪
- 客户减肥合同范例
- 【初中生物】脊椎动物-鱼课件-2024-2025学年人教版生物七年级上册
- 公司章程模板五篇
评论
0/150
提交评论