首页 DesFire 非接触式多应用IC卡开发 用户手册

DesFire 非接触式多应用IC卡开发 用户手册

举报
开通vip

DesFire 非接触式多应用IC卡开发 用户手册 Mifare DESFire 非接触式多应用 IC 卡开发 用户手册 V1.01 深圳市明华澳汉电子设备有限公司 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 版本信息 版本号 作者 时间 说明 DESFire_Manual V1.0 余菊萍 2004-06-03 新版本...

DesFire 非接触式多应用IC卡开发 用户手册
Mifare DESFire 非接触式多应用 IC 卡开发 用户手册 V1.01 深圳市明华澳汉电子设备有限公司 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 版本信息 版本号 作者 时间 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 DESFire_Manual V1.0 余菊萍 2004-06-03 新版本 DESFire_Manual V1.01 余菊萍 2005-01-26 修改了卡片基本操作流程 2 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 目录 1 Mifare DESFire MF3 IC D40 简介 .........................................................................................4 1.1 RF 接口: ISO 14443 Type A..............................................................................................4 1.2 不易丢失的内存 (NV-Memory).......................................................................................4 1.3 安全性................................................................................................................................4 2 DESFire 卡应用........................................................................................................................6 2.1 DESFire 卡应用基本结构................................................................................................6 2.2 应用实例............................................................................................................................6 3 API 函数库介绍 .......................................................................................................................9 3.1 卡片基本操作流程............................................................................................................9 3.2 错误码列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf ......................................................................................................................10 3.3 mwrf32.dll 中设备操作函数说明 ....................................................................................11 3.4 通用函数..........................................................................................................................16 3.5 mwrf32.dll 中 DESFire 卡操作相关函数说明 ................................................................17 3.6 Desfile_API.dll 中函数说明.............................................................................................21 3.6.1 打开 DESFire 卡接口函数库 .........................................................................21 3.6.2 安全相关指令.................................................................................................21 3.6.3 卡片级指令.....................................................................................................25 3.6.4 应用级指令.....................................................................................................28 3.6.5 数据操作指令.................................................................................................32 3 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 1 Mifare DESFire MF3 IC D40 简介 1.1 RF 接口: ISO 14443 Type A z 非接触数据传输, 并且无需电源供电. z 操作距离: ≤100 mm z 操作频率: 13.56 MHZ z 快速数据传输: 106 kbit/s, 212 kbit/s, 424 kbit/s z 真正的防冲突 z 7 byte 卡片唯一序列号 z 使用 ISO 14443-4 传输协议 1.2 不易丢失的内存 (NV-Memory) z 容量为 4k 字节 z 写时间: 2 ms ( 1ms 擦除, 1ms 写 ) z 数据可保存 10 年 z 可以循环写 100 000 次 z 灵活的文件系统 z 在一张卡上可以同时有 28 个应用 z 每个应用下可以建立 16 个文件 1.3 安全性 z 每张卡都有唯一的卡片序列号 z 3 PASS 相互认证 z RF 通道实现 DES/3DES 数据加密, 做到重放攻击保护。 z 4 字节 MAC 数据认证 z 应用级密码认证 补充说明: 卡片和读写器之间有三个安全级别的数据传输方式: 1) 明文传输 2) 明文传输+DES/3DES 加密校验(MAC) 3) DES/3DES 加密数据传输 注意:如果密钥的前 8 个字节与后 8 个字节相同,则为 DES 加密。反之,则为 3DES 加密。 每一张卡都有一个主密钥, 用于保证卡片级的安全性. 每张卡可以建28个应用, 每个应用可以有多达14个不同的用户自定义的密钥, 这些 4 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 密钥可以被分配给应用下面的文件来控制数据的访问. 一个密钥可以被多个文件共同使 用。 每个应用下面可以建立多达 16 个不同大小和类型的文件, 每个文件可以定义为不同 级别的访问权限. 文件的类型有下面 5 种: z 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 数据文件 z 备份数据文件 z 带备份值操作文件 z 带备份线性记录文件 z 带备份循环记录文件 每个文件都有一个 16 字节的访问权限控制码,包括 4 种访问权限: — 读权限 (ReadData,GetValue,Debit) — 写权限 (WriteData Debit,LimitedCredit) — 可读可写权限 (ReadData,WriteData,GetValue,Debit,LimitedCredit, Credit) — 修改访问权限 每种访问权限由 4 个 bit 组成,即半个字节, 有 16 个不同的。 z 0 到 13 表示必须认证存储在对应的密钥文件中的密钥。 z 0xE 表示自由访问,不需要认证任何密钥,可以直接访问该文件。 如果读权限和可读可写权限(或者写权限和可读可写权限)只有一个指定了密 钥,另外一个为 0xE,如果通讯设置为 MAC 校验或者加密通讯,而且认证了指定密 钥,那么通讯就为 MAC 校验或者加密通讯;没有认证,则为明文通讯。 z 0xF 表示永远不可以访问。 15 12 11 8 7 4 3 0 读权限 写权限 可读/可写权限 修改读写权限 5 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 2 DESFire 卡应用 2.1 DESFire 卡应用基本结构 DESFire卡 每张卡片都有一个主控密钥,根据主控密钥设置决定是否需要认证主控密钥。 应用文件1 应用文件2 … ... 每张卡可以建28个应用文件,应用标识符不能为0.应用标识0代表卡片级,在卡片级下可以新建或删除应用文件。 文件1(标准数据文件) 文件3(值文件) 文件2(备份数据文件) 文件4(线性记录文件) 文件5(循环记录文件) … ... 每个应用下最多可以建立16个不同大小和类型的文件,每个文件可以 链接当前应用下的密钥设置不同级别的访问权限。 每个应用文件可以链接一套多达14种不同用户自定义的访问密钥。 2.2 应用实例 这里我们提供一个简单的 DESFire 卡的应用实例。 1. 卡片级控制 主控密钥设置为默认值 0xff: z 主控密钥设置信息可以修改,但需要认证卡片主控密钥。 z 允许不认证卡片主控密钥就可以新建应用。 删除应用需要认证当前应用的主密钥或卡片主控密钥。 z 读取卡片所有应用的标识符和读取卡片主控密钥设置信息不需要认证卡片主控 密钥。 z 卡片主控密钥可以修改。 6 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 卡片不管是主控密钥还是应用主密钥编号都为 0。 实现过程: (1) 认证卡片主控密钥,主控密钥的默认值为 16 个 0x00。 (2) 建应用 1,应用标识符为 0x000001,密钥数为 5,密钥设置为 0xEF。 z 修改密码需要认证原密码。 z 应用密钥设置信息可以修改,但需要认证应用主密钥。 z 建文件/删除文件不需要认证应用主密钥。 z 读取应用所有文件的标识符和读取应用密钥设置信息不需要认证应用主密 钥。 z 应用主密钥可以修改,但需要认证原应用主密钥。 修改密码:由于建应用时 5 个密码都被初始化为 16 个 0x00,所有需要修改密码。 我们使用 8 字节密码,所以前 8 字节和后 8 字节相同。 密码 1:编号为 0x01,新密码为 0x22222222222222222222222222222222。 密码 2:编号为 0x02,新密码为 0x44444444444444444444444444444444。 密码 3:编号为 0x03,新密码为 0x66666666666666666666666666666666。 密码 4:编号为 0x04,新密码为 0x88888888888888888888888888888888。 密码 5:编号为 0x05,新密码为 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。 修改所有密码都必须先认证原密码。 (3) 建应用 2,应用标识符为 0x000002,密钥数为 8,密钥设置为 0x0F。 z 修改密码需要认证应用主密钥。 z 应用密钥设置信息可以修改,但需要认证应用主密钥。 z 建文件/删除文件不需要认证应用主密钥。 z 读取应用所有文件的标识符和读取应用密钥设置信息不需要认证应用主密 钥。 z 应用主密钥可以修改,但需要认证原应用主密钥。 修改密码:由于建应用时 5 个密码都被初始化为 16 个 0x00,所有需要修改密码。 我们使用 8 字节密码,所以前 8 字节和后 8 字节相同。 密码 1:编号为 0x01,新密码为 0x12121212121212121212121212121212。 密码 2:编号为 0x02,新密码为 0x14141414141414141414141414141414。 密码 3:编号为 0x03,新密码为 0x16161616161616161616161616161616。 密码 4:编号为 0x04,新密码为 0x18181818181818181818181818181818。 密码 5:编号为 0x05,新密码为 0x32323232323232323232323232323232。 密码 6:编号为 0x06,新密码为 0x20202020202020202020202020202020。 密码 7:编号为 0x07,新密码为 0x30303030303030303030303030303030。 密码 8:编号为 0x08,新密码为 0x40404040404040404040404040404040。 修改所有密码都必须先认证应用主密码。 2. 应用级控制 ① 选择应用 1 ② 建文件 文件 1:文件类型为标准数据文件,文件标识符为 0x00,文件大小 300,访问权 限为 0x1230。 文件 2:文件类型为值文件,文件标识符为 0x01,最大值 1000,最小值 0,当 7 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 前值为 0,访问权限为 0x4550。 ③ 选择应用 2 ④ 建文件 文件 1:文件类型为备份数据文件,文件标识符为 0x00,文件大小 300,访问权 限为 0x1230。 文件 2:文件类型为循环记录文件,文件标识符为 0x01,记录大小为 30,最大 记录数为 30,访问权限为 0x4560。 3. 文件操作 ① 选择应用 1 认证密码 2 写数据到文件 1 认证密码 1 读文件 1 认证密码 5 文件 2 加值 300 认证密码 4 文件 2 读当前值 文件 2 减值 30 文件 2 读当前值 ② 选择应用 2 认证密码 2 写数据到文件 1 认证密码 1 读文件 1 认证密码 5 文件 2 写记录 认证密码 4 文件 2 读记录 认证密码 6 清空文件 2 8 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 3 API 函数库介绍 3.1 卡片基本操作流程 Request IDLE Wake-UP Anticollision 1 Selection 1 Anticollision 2 Selection 2 PPS DESFire指令系列 Halt Power On Reset ATS 补充说明: Request IDLE: 读写器发出 Request 指令,只有处于 IDLE 状态的卡片响应。 Wake-Up: 读写器发出 Request 指令,处于 IDLE 状态和 HALT 状态的卡片都响应。 可以调用 rf_request () 和 rf_request_std ()函数。 Anticollision 1: 第一级防冲突,只能返回某张卡的部分卡片序列号。由于 DESFire 卡有 7 个字节的卡片序列号,所以必须经过两级的防冲突和选卡才能完全确定这张卡片,并选中 这张卡片。可以调用 rf_anticoll () 或者 rf_anticoll_level ()函数。 Selection 1: 第一级选卡。可以调用 rf_select ()函数。 Anticollision 2: 第二级防冲突。可以调用 rf_anticoll_level ()函数。 9 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 Selection 2: 第二级选卡。可以调用 rf_select_2 ()函数。 ATS: Answer To Select, 可以调用 rf_desfile_ats ()函数。 PPS: 协议选择,可以调用 rf_desfile_pps ()函数。 3.2 错误码列表 错误码 描述 0x00 成功 0x01 在操作区域内无卡 0x02 CRC 校验错误 0x03 数值溢出 0x05 奇偶校验错误 0x06 通讯错误 0x08 防冲突过程中读系列号错误 0x0B 从卡片接收到的位数错误 0x0C Backup 文件没有改变,不需要 CommitTransaction 或者 AbortTransaction 0x0E 内存不足以完成该指令 0x1C 该命令码不支持 0x1E CRC 或 MAC 码不匹配 填补的字节无效 0x40 指定的密钥号无效 0x7E 命令字符串的长度无效 0x9D 当前配置或状态不允许该请求 0x9E 参数的值无效 0xA0 请求的应用标识不存在 0xA1 在应用内不可恢复的错误,该应用将无效 0xAE 当前认证状态不允许该请求指令 0xAF 期望再发数据帧 0xBE 尝试超出文件范围读/写数据 0xC1 卡片内不可恢复的错误,卡片将无效 0xCD 卡片由于不可恢复的错误而无效 0xCE 应用的总数最大为 28,不可以再创建应用 0xDE 不可以创建该文件或应用,该文件号或应用号已存在 0xEE 因为掉电,内部备份,反转机制不能完成写操作 0xF0 指定的文件号不存在 0xF1 文件内不可恢复的错误,该文件无效 10 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 错误码 描述 -0x10 通讯错误 -0x11 通讯超时 -0x20 打开断口错误 -0x21 获得端口参数错误 -0x22 设置端口参数错误 -0x23 关闭断口出错 -0x24 端口被占用 -0x30 格式错误 -0x32 数据长度错误 -0x55 认证错误 -0x56 已冻结, 操作失败 -0x57 CRC 出错 -0x58 接收的数据的长度不对 -0x59 MAC 出错 -0x5a 永远不可访问错误 3.3 mwrf32.dll 中设备操作函数说明 在操作卡片和设备之前,必需先出始化串口。退出应用程序之前必需关闭当前正在使用 的串口。 HANDLE rf_init(int port,long baud); 功 能:初始化串口 参 数:port:串口号,取值为 0~3 baud:为通讯波特率 9600~115200 返 回:成功则返回通讯设备标识符 例:HANDLE icdev; icdev=rf_init(0,9600); void rf_exit(HANDLE icdev); 功 能:恢复串口 参 数:icdev:通讯设备标识符 返 回:无 例:rf_exit(icdev); int rf_get_status(HANDLE icdev,unsigned char *_Status); 功 能:取得读写器硬件版本号,如“RFMF-3.00C” 参 数:icdev:通讯设备标识符 _Status:返回读写器硬件版本信息 返 回:成功则返回 0 例:int st; 11 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 unsigned char version[11]; st=rf_get_status(icdev,version); int rf_srd_snr(HANDLE icdev,__int16 lenth,unsigned char *rec_buffer); 功 能:取得读写器产品序列号 参 数:icdev:通讯设备标识符 length:字符串长度,其值为 16 rec_buffer:存放要读出的序列号字符串 返 回:成功则返回 0 例:st=rf_srd_snr(icdev,16,buffer); int lib_ver(unsigned char *str_ver); 功 能:读取软件版本号,与读写器无通讯 参 数:str_ver:存放版本号的缓冲区 返 回:成功则返回 0 例:unsigned char buffer[12]; st=lib_ver(buff); int rf_setbright(HANDLE icdev,unsigned char bright); 功 能:设置数码管显示亮度 参 数:icdev:通讯设备标识符 bright:亮度值,0~15 有效,0 表示最暗,15 表示最亮 返 回:成功则返回 0 例:st=rf_setbright(icdev,10); int rf_ctl_mode(HANDLE icdev,unsigned char mode); 功 能:设置读写器数码管受控方式,关机后可保存设置值 参 数:icdev:通讯设备标识符 mode:受控方式 0——数码管显示受计算机控制 1——数码管显示受读写器控制(出厂设置) 显示模式由 rf_disp_mode 设置 返 回:成功则返回 0 例:st=rf_ctl_mode(icdev,0x01); int rf_disp_mode(HANDLE icdev,unsigned char mode); 功 能:设置读写器数码管显示模式,关机后可保存设置值 参 数:icdev:通讯设备标识符 mode:显示模式 0——日期,格式为“年-月-日(yy-mm-dd)” 1——时间,格式为“时-分-秒(hh-nn-ss)” 返 回:成功则返回 0 例:st=rf_disp_mode(icdev,0x01); 12 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 int rf_disp8(HANDLE icdev,__int16 disp_len,unsigned char disp_str); 功 能:在读写器数码管上显示数字 参 数:icdev:通讯设备标识符 disp_len:显示字符串的长度,长度为 8 disp_str:要显示的数据 受读写器控制时,显示的日期/时间请参照 rf_disp_mode()中定义的格式; 受计算机控制时,显示方式由显示数据决定;每个字节的最高位为 1 表示本位 数后的小数点亮,为 0 表示小数点灭。 返 回:成功则返回 0 例:int st; unsigned char datebuff[8]=?9-05-20? unsigned char numbuff1[8]={0x01,0x02,0x03,0x04,0x85,0x06,0x07,0x08}; unsigned char numbuff2[8]={0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81}; st=rf_ctl_mode(icdev,1); //显示受读写器控制 st=rf_disp_mode(icdev,0); //显示日期 st=rf_disp8(icdev,8,datebuff); //显示结果为“99-05-20” st=rf_ctl_mode(icdev,0); //显示受计算机控制 st=rf_disp8(icdev,8,numbuff1); //显示结果为“12345.678” st=rf_disp8(icdev,8,numbuff2); //显示结果为“8.7.6.5.4.3.2.1.” int rf_disp(HANDLE icdev,unsigned char pt_mode,unsigned short digit); 功 能:在读写器的数码管上显示数字(为低版本兼容函数,V3.0 及以上版本不能使用) 参 数:icdev:通讯设备标识符 pt_mode:小数点显示模式 0——小数点熄灭 1——个位后的小数点位亮 2——十位后的小数点位亮 3——百位后的小数点位亮 4——千位后的小数点位亮 digit:要显示的数 返 回:成功则返回 0 例:int st; st=rf_disp(icdev,0,1234); /*显示整数 1234*/ int rf_gettime(HANDLE icdev,unsigned char *time); 功 能:读取读写器日期、星期、时间 参 数:icdev:通讯设备标识符 time:返回数据,长度为 7 个字节,格式为“年、星期、月、日、时、分、秒” 返 回:成功则返回 0 13 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 例:int st; unsigned char datetime[7]; st=rf_gettime(icdev,datetime); //datetime 为“0x99,0x04,0x05,0x20,0x13,0x30,0x10”, //表示 99 年星期四 5 月 20 日 13 时 30 分 10 秒 int rf_gettimehex(HANDLE icdev,char *time); 功 能:同 rf_gettime(),用十六进制表示 参 数:icdev:通讯设备标识符 time:长度为 14 个字节,均为数字 返 回:成功则返回 0 例:int st; unsigned char datetime[14]; st=rf_gettime(icdev,datetime); //datetime 为“99040520133010”, //表示 99 年星期四 5 月 20 日 13 时 30 分 10 秒 int rf_settime(HANDLE icdev,unsigned char *time); 功 能:设置读写器日期、星期、时间 参 数:icdev:通讯设备标识符 time:长度为 7 个字节,格式为“年、星期、月、日、时、分、秒” 返 回:成功则返回 0 例:int st; unsigned char datetime[7]={0x99,0x04,0x05,0x20,0x13,0x30,0x10}; st=rf_settime(icdev,datetime); int rf_settimehex(HANDLE icdev,char *time); 功 能:同 rf_settime(),用十六进制表示 参 数:icdev:通讯设备标识符 time:长度为 14 个字节,均为数字 返 回:成功则返回 0 例:int st; unsigned char datetime[14]=?9040520133010? st=rf_settime(icdev,datetime); int rf_beep(HANDLE icdev,unsigned short _Msec); 功 能:蜂鸣 参 数:icdev:通讯设备标识符 _Msec:蜂鸣时限,单位是 10 毫秒 返 回:成功则返回 0 例:int st; st=rf_beep(icdev,10); /*鸣叫 100 毫秒*/ 14 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 int rf_srd_eeprom(HANDLE icdev,__int16 offset,__int16 length, unsigned char *rec_buffer); 功 能:读取读写器备注信息 参 数:icdev:通讯设备标识符 offset:偏移地址(0~383) length:读取信息长度(1~384) rec_buffer:读取到的信息 返 回:成功则返回 0 例:int st; unsigned char buffer[100]; st=rf_srd_eeprom(icdev,0,100,buffer); int rf_swr_eeprom(HANDLE icdev,__int16 offset,__int16 length,unsigned char *send_buffer); 功 能:向读写器备注区中写入信息 参 数:icdev:通讯设备标识符 offset:偏移地址(0~383) length:读取信息长度(1~384) send_buffer:要写入的信息 返 回:成功则返回 0 例:st=rf_swr_eeprom(icdev,0,8,(unsigned char *)“mwrf v3.0”); int rf_reset(HANDLE icdev,unsigned __int16 _Msec); 功 能:射频读写模块复位 参 数:icdev:通讯设备标识符 _Msec:复位时间,0~500 毫秒有效 返 回:成功则返回 0 例:int st; st=rf_reset(icdev,60); 15 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 3.4 通用函数 int hex_a(unsigned char *hex,char *a,unsigned char length); 功能: 将十六进制数转换为 ASCII 字符串, 例如 0x11 转换为”11”。 参数: hex: 输入的十六进制数 a: 输出的 ASCII 字符串 length: 十六进制数的长度 返回: 成功则返回 0。 例: unsigned char source[] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88}; char dest[17]; int st=0; memset(dest, 0, 17); hex_a(source, dest, 8); // the dest value is “1122334455667788”. int a_hex(char *a,unsigned char *hex,unsigned char len); 功能: 将 ASCII 字符串转换为十六进制数,例如“12”转换为 0x12。 参数: a : 输入的 ASCII 字符串 hex: 输出的十六进制数 length: ASCII 字符串的长度 返回: 成功则返回 0。 例: char source[] = {a,0,a,1,a,2,a,3,a,4,a,5}; unsigned char dest[7]; int st = 0; memset(dest, 0, 7); // the dest value is {0xa0,0xa1,0xa2,0xa3,0xa4,0xa5}. a_hex(source, dest, 12); 16 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 3.5 mwrf32.dll 中 DESFire 卡操作相关函数说明 int rf_request(HANDLE icdev,unsigned char _Mode,unsigned __int16 *TagType); 功 能:寻卡请求 参 数:icdev:通讯设备标识符 _Mode:寻卡模式 0---只有处在 IDLE 状态的卡片响应该请求 1—处在 IDLE 状态和 HALT 状态的卡片都可以响应该请求 Tagtype:卡类型值,0x0344 为 DESFire 卡 返 回:成功则返回 0 例: #define IDLE 0 int st; unsigned int tagtype[2]; st=rf_request(icdev,IDLE,tagtype) int rf_request_std(HANDLE icdev,unsigned char _Mode,unsigned __int16 *TagType); 功 能:寻卡请求, 与 rf_request()函数的功能相同。 参 数:icdev:通讯设备标识符 _Mode:寻卡模式 0---只有处在 IDLE 状态的卡片响应该请求 1—处在 IDLE 状态和 HALT 状态的卡片都可以响应该请求 Tagtype:卡类型值,0x0344 为 DESFire 卡 返 回:成功则返回 0 例: #define IDLE 0 int st; unsigned int tagtype[2]; st=rf_request_std(icdev,IDLE,tagtype) 下面两个状态图分别描述了调用函数 rf_request() 和 rf_request_std() 时 REQUEST 指令 的执行情况。 从图中可以看出区别在于调用 rf_request() 函数时 Request IDLE 在除 HALT 状态的任何 状态下都可以执行成功,Request ALL 在任何状态下都可以成功。调用 rf_request_std()时 Request IDLE 只有在 IDLE 状态下可以成功,Request ALL 可以在 IDLE 和 HALT 状态下成 功。 图 1 描述的是调用 rf_request()的情况。 图 2 描述的是调用 rf_request_std ()的情况。 17 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 图 1 图 2 int rf_anticoll(HANDLE icdev,unsigned char _Bcnt,unsigned long *_Snr); 功 能:防止卡冲突,返回卡的序列号 参 数:icdev:通讯设备标识符 _Bcnt:预选卡所用的位数,取默认值 0。 _Snr:返回的卡序列号,对于 DESFire 卡只有前 3 个字节为序列号,第四个字 节为级联标志 0x88,表示还有序列号未返回。 返 回:成功则返回 0 例:int st; unsigned long snr; st=rf_anticoll(icdev,0,&snr); int rf_select(HANDLE icdev,unsigned long _Snr,unsigned char *_Size); 功 能:从多个卡中选取一个给定序列号的卡。由于 DESFire 卡的序列号是 7 个字节, 所以不能完全选中这张卡。必需执行二级防冲突,即 rf_anticoll_level(2)。 参 数:icdev:通讯设备标识符 Snr:卡序列号,可以直接使用 rf_anticoll()返回的卡片序列号的值,包括 0x88。 _Size:指向返回的卡容量的数据,该参数保留。 返 回:成功则返回 0 例:int st; unsigned long snr; unsigned char size[4]; st = rf_anticoll(icdev, 0, &snr); st=rf_select(icdev,snr,size); 18 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 int rf_anticoll_level(HANDLE icdev,unsigned char level, unsigned char *_Snr); 功 能:防止卡冲突,返回卡的序列号 参 数:icdev:通讯设备标识符 level: 防冲突级别 _Snr:返回的卡序列号 对于 DESFire 卡, 防冲突 1 级只有前 3 个字节为序列号的低 3 个字节,第四个字 节为级联标志 0x88,表示还有序列号未返回。防冲突 2 级返回卡片序列号的高 4 个字节。 返 回:成功则返回 0 例:int st; unsigned long snr; st=rf_anticoll_level(icdev,2, &snr); int rf_select_2(HANDLE icdev,unsigned char *_Snr, unsigned char *_Size); 功 能:完全地确定给定序列号的卡。 参 数:icdev:通讯设备标识符 Snr:卡序列号,可以直接使用 rf_anticoll_level(2)返回的卡片序列号的值。 _Size:指向返回的卡容量的数据,该参数保留。 返 回:成功则返回 0 例:int st; unsigned long snr; unsigned char size[4]; st = rf_anticoll_level(icdev, 2, &snr); st=rf_select_2(icdev,snr,size); int rf_desfile_ats(HANDLE icdev, unsigned char cid, unsigned char *desack); 功能: 取卡片选择应答信息。 参数: icdev:通讯设备标识符 cid:通道号 desack: 返回的应答信息 返回: 成功则返回 0 例: int st; unsigned char desack[125]; st = rf_desfile_ats(icdev, 0, desack); int rf_desfile_pps(HANDLE icdev, unsigned char DIV=0); 功能:协议和参数选择 参数:icdev:通讯设备标识符 DIV:卡片通讯波特率,受读写器的限制,默认为 0。 0----106 k/bit 1----212 k/bit 2----424 k/bit 返回: 成功则返回 0 19 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 例: int st; st = rf_desfile_pps(icdev); int rf_desfile_trn(HANDLE icdev, unsigned char cid, unsigned char *_Cmd,unsigned char _sLen, unsigned char *_Recv, unsigned char *_rLen); 功能:传送 DESFire 卡指令。 参数:icdev:通讯设备标识符 cid:通道号 _Cmd:发送的 DESFire 卡指令 _sLen:发送的 DESFire 卡指令长度 _Recv:接收的 DESFire 卡指令应答数据 _rLen:接收的 DESFire 卡指令应答数据长度 返回: 成功则返回 0 例: int st; unsigned char Cmd[65], Recv[65]; unsigned char rlen=0; //发送认证指令 Cmd[0] = 0x0A; Cmd[1] = 0x00; st = rf_desfile_trn(icdev, 0, Cmd, 2, Recv, rlen) int rf_halt(HANDLE icdev); 功 能:中止卡操作,卡片将进入 HALT 状态。 参 数:icdev:通讯设备标识符 返 回:成功则返回 0 例:int st=0; st=rf_halt(icdev); 如果不使用 Desfile_API.dll 函数库,用户必须调用 rf_desfile_trn 来传送 DESFire 卡片指 令实现对卡片的操作;反之则不需要,只要调用 Desfile_API.dll 中的函数就可以操作。 20 Mifare DESFire 非接触式多应用 IC 卡用户开发使用手册 DESFire_Manual V1.0 3.6 DESfire_API.dll 中函数说明 在调用 DESFire 卡指令相关函数之前先调用 DESFireEnabled()函数打开 DESFire 接口函 数库。 DESFire 卡指令系列包括安全相关指令,卡片级指令,应用级指令和数据操作指令。 3.6.1 打开 DESFire 卡接口函数库 int DESFireEnabled(HANDLE icdev); 功能:打开 DESFire 卡接口函数库 参数:icdev:通讯设备标识符 返 回:成功则返回 0 例:int st=0; st = DESFireEnabled(icdev); 3.6.2 安全相关指令 以下介绍安全相关指令。 int Authenticate(HANDLE icdev, unsigned char cid, unsigned char _KeyNo, unsigned char *_Key) 功能:卡片与读写器三重相互认证,在认证过程中读写器和卡片都采用加密方式传递数 据。该指令执行成功后将产生 16 字节的过程密钥供将来数据加密使用。 参数:icdev:通讯设备标识符 cid:通道号 _KeyN
本文档为【DesFire 非接触式多应用IC卡开发 用户手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_560194
暂无简介~
格式:pdf
大小:794KB
软件:PDF阅读器
页数:37
分类:互联网
上传时间:2013-03-15
浏览量:121