📄 mifare.h
字号:
/**************************************Copyright (c)*************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息----------------------------------------------------------------
** 文 件 名: Mifare.h
** 文件描述: Mifare操作函数头文件
** 版 本: V1.0
** 创 建 人: 曾本森
** 创建日期: 2007.09.21
** 最后修改日期:
**=======================================================================================
**-----------------修改记录--------------------------------------------------------------
** 修改内容:
** 当前版本:
** 修 改 人:
** 修改日期:
** 注 意:
****************************************************************************************/
#ifndef __MIFARE_H__
#define __MIFARE_H__
//=======================================================================================
#ifdef MIFARE_GLOBALS
#define MIFARE_EXT
#else
#define MIFARE_EXT extern
#endif
//==== 函数剪裁 =========================================================================
// 需要的函数定义为1,不用的定义为0
#define PICC_ACTIVATE_EN 1 // 激活处于天线感应区的卡片
#define PCD_RFRESET_EN 1 // RF场复位(关闭载波)
//=======================================================================================
#include "ErrCode.h" // 错误码
// 在此处修改连接到RC531PD的管脚
#include "IoDefine.h"
// sbit RC522RST = P0^7;
#define OpenPCD() NRSTPD = 1
#define ClosePCD() NRSTPD = 0
//=======================================================================================
MIFARE_EXT volatile unsigned char TxConMask;
MIFARE_EXT volatile unsigned char MIFARE_tmoutcnt;
#define RC522_DELAY30MS 14
#define RC522_DELAY200MS 90 //timer with 2.222ms resolution
#define RC522_DELAY555MS 250
//==== Mifare 命令定义 ==================================================================
#define MIFARE_AUTHENT_A ((unsigned char)0x60) /* AUTHENT A command. */
#define MIFARE_AUTHENT_B ((unsigned char)0x61) /* AUTHENT B command. */
#define MIFARE_READ ((unsigned char)0x30) /* READ command. */
#define MIFARE_WRITE ((unsigned char)0xA0) /* WRITE 16 bytes command. */
#define MIFARE_WRITE4 ((unsigned char)0xA2) /* WRITE 4 bytes command. */
#define MIFARE_INCREMENT ((unsigned char)0xC1) /* INCREMENT command. */
#define MIFARE_DECREMENT ((unsigned char)0xC0) /* DECREMENT command. */
#define MIFARE_RESTORE ((unsigned char)0xC2) /* RESTORE command. */
#define MIFARE_TRANSFER ((unsigned char)0xB0) /* TRANSFER command. */
#define MIFARE_NOCOMMAND ((unsigned char)0x00) /* VOID command (no MIFARE command). */
#define PICC_ULWRITE 0xA2 // UltraLight write 4 bytes
/* \if use_html
* \name Control Behaviour
* \ingroup mfrd
* Control behaviour of the protocol upon reply:
* OR-ing of values allows the protocol to be prepared for multiple reply types to create a
* positive result (e.g. some cards return an ACK, some nothing upon certain commands).
* \endif
*/
/*@{*/
#define MIFARE_EXPECT_TIMEOUT ((unsigned char)0x01) /*!< Tells the library to expect a timeout. */
#define MIFARE_EXPECT_ACK ((unsigned char)0x02) /*!< Let the library expect an Acknowledge response. */
#define MIFARE_EXPECT_DATA ((unsigned char)0x04) /*!< The library shall expect data. */
/*!
* (Not-) Acknowledge:
* When a MF PICC returns ACK, a logical AND with the mask yields a value other than 0. Otherwise,
* in case of NACK, the mask zeroes the byte (or nibble respectively).
*/
#define MIFARE_ACK_MASK ((unsigned char)0x0A) /* */
#define REQUEST_BITS 0x07 // 请求命令的位数
#define ATQA_LENGTH 0x02 // ATQ长度
#define ISO14443_3_REQALL 0x52 // 唤醒命令
#define ISO14443_3_REQIDL 0x26 // 请求命令
//==== 防碰撞/选择命令参数定义 ===============================================================
#define BITS_PER_BYTE 0x08
#define UPPER_NIBBLE_SHIFT 0x04
#define COMPLETE_UID_BITS 0x28
#define NVB_MIN_PARAMETER 0x20
#define NVB_MAX_PARAMETER 0x70
#define SELECT_CASCADE_LEVEL_1 0x93 // 防碰撞/选择等级1
#define SELECT_CASCADE_LEVEL_2 0x95 // 防碰撞/选择等级2
#define SELECT_CASCADE_LEVEL_3 0x97 // 防碰撞/选择等级3
#define MAX_CASCADE_LEVELS 0x03 // 最大防碰撞等级
#define SINGLE_UID_LENGTH 0x20
#define CASCADE_BIT 0x04
//==== 选择命令回应的字节数 =============================================================
#define SAK_LENGTH 0x01
//==== 挂起命令参数定义 =================================================================
#define HALTA_CMD 0x50
#define HALTA_PARAM 0x00
#define HALTA_CMD_LENGTH 0x02
/****************************************************************************************
** 函数原型: void PcdClose(void);
** 函数功能: 读卡芯片硬件掉电/复位
** 入口参数: -
** 出口参数: -
** 返 回 值: -
** 描 述: 复位脚 NRESTPD = 0
****************************************************************************************/
MIFARE_EXT void PcdClose(void);
/****************************************************************************************
** 函数原型: char PcdConfig()
** 函数功能: 读写卡芯片配置/初始化
** 入口参数: -
** 出口参数: -
** 返 回 值: 操作结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PcdConfig();
/****************************************************************************************
** 函数原型: char PiccRequest(unsigned char req_code, unsigned char idata *atq);
** 函数功能: 请求天线感应区内的卡
** 入口参数: unsigned char req_code ; 请求类型 REQALL、REQIDLE
** 出口参数: unsigned char idata *atq ; 请求回应
** 返 回 值: -
** 描 述: 请求回应的代码
** MF0 IC U1 的类型号:0044H
** MF1 IC S50 的类型号:0004H
** MF1 IC S70 的类型号:0002H
** MF3 IC D40 的类型号:0344H
****************************************************************************************/
MIFARE_EXT char PiccRequest(unsigned char req_code, unsigned char idata *atq);
/****************************************************************************************
** 函数原型: char PiccCascAnticoll(unsigned char sel_code,unsigned char bitcount,
** unsigned char idata *snr);
** 函数功能: 防碰撞
** 入口参数: unsigned char sel_code ; 防碰撞的等级
** unsigned char bitcount ; 已知UID的位数
** unsigned char idata *snr ; 已知的UID
** 出口参数: unsigned char idata *snr ; UID
** 返 回 值: 执行结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PiccCascAnticoll( unsigned char sel_code,unsigned char bitcount,
unsigned char idata *snr);
/****************************************************************************************
** 函数原型: char PiccCascSelect(unsigned char sel_code,unsigned char idata *snr,
** unsigned char idata *sak);
** 函数功能: 防碰撞
** 入口参数: unsigned char sel_code ; 防碰撞的等级
** unsigned char idata *snr ; UID
** 出口参数: unsigned char idata *sak ; SAK
** 返 回 值: 执行结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PiccCascSelect( unsigned char sel_code, unsigned char idata *snr,
unsigned char idata *sak);
/****************************************************************************************
** 函数原型: char PiccHalt(void)
** 函数功能: 将选择的卡挂起(ISO/IEC14443A-3)
** 入口参数: -
** 出口参数: -
** 返 回 值: 执行结果
** 描 述: 该函数是ISO/IEC14443A-3层协议
****************************************************************************************/
MIFARE_EXT char PiccHalt(void);
/****************************************************************************************
** 函数原型: char PiccAuthKey(unsigned char auth_mode,unsigned char idata *snr,
** unsigned char idata *key,unsigned char addr)
** 函数功能: 验证Mifare卡选择的扇区
** 入口参数: unsigned char auth_mode ; 验证模式阿:A密钥/B密钥
** unsigned char idata *snr ; 4字节UID
** unsigned char idata *key ; 6字节密钥
** unsigned char addr ; 验证的扇区号
** 出口参数: -
** 返 回 值: 执行结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PiccAuthKey( unsigned char auth_mode,unsigned char idata *snr,
unsigned char idata *key, unsigned char block);
/****************************************************************************************
** 函数原型: char PiccRead(unsigned char addr, unsigned char idata *_data)
** 函数功能: 验证Mifare卡选择的扇区
** 入口参数: unsigned char addr ; 块号
** 出口参数: unsigned char idata *_data ; 读出的数据(16字节)
** 返 回 值: 执行结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PiccRead(unsigned char addr, unsigned char idata *_data);
/****************************************************************************************
** 函数原型: char PiccWrite(unsigned char addr, unsigned char idata *_data)
** 函数功能: 向指定的扇区写入16字节数据
** 入口参数: unsigned char addr ; 块号
** unsigned char idata *_data ; 写入的数据(16字节)
** 出口参数:
** 返 回 值: 执行结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PiccWrite( unsigned char addr, unsigned char idata *_data);
/****************************************************************************************
** 函数原型: char PiccULWrite( unsigned char addr,unsigned char idata *_data)
** 函数功能: 向指定的块写入4字节数据(MF IC U1)
** 入口参数: unsigned char addr ; 块号
** unsigned char idata *_data ; 写入的数据(4字节)
** 出口参数:
** 返 回 值: 执行结果
** 描 述: UltraLight
****************************************************************************************/
MIFARE_EXT char PiccULWrite( unsigned char addr,unsigned char idata *_data);
/****************************************************************************************
** 函数原型: char PiccValue(unsigned char OperMode,unsigned char addr,
** unsigned char idata *value,unsigned char trans_addr)
** 函数功能: 值块操作函数(增、减或者传输)
** 入口参数: unsigned char OperMode ; 操作模式(增、减)
** unsigned char addr ; 块号
** unsigned char idata *value ; 操作值块的值
** unsigned char trans_addr ; 保存操作结果的块号
** 出口参数: -
** 返 回 值: 执行结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PiccValue( unsigned char value_mode, unsigned char addr,
unsigned char idata *value, unsigned char trans_addr);
/****************************************************************************************
** 函数原型: char PiccActivate(unsigned char br,unsigned char req_code,
** unsigned char idata *atq, unsigned char idata *sak,
** unsigned char idata *uid, unsigned char idata *uid_len)
** 函数功能: 卡片激活
** 入口参数: unsigned char req_code ; 请求模式
** 出口参数: unsigned char idata *atq ; ATQ 2字节
unsigned char idata *sak ; SAK
unsigned char idata *uid ; UID
unsigned char idata *uid_len ; UID_Len
** 返 回 值: 执行结果
** 描 述: 组合函数
****************************************************************************************/
MIFARE_EXT char PiccActivate(unsigned char br,unsigned char req_code,
unsigned char idata *atq, unsigned char idata *sak,
unsigned char idata *uid, unsigned char idata *uid_len);
/****************************************************************************************
** 函数原型: char PcdRfReset(unsigned char ms)
** 函数功能: RF场复位
** 入口参数: unsigned char ms ; RF场关闭的时间
** 出口参数: -
** 返 回 值: 执行结果
** 描 述:
****************************************************************************************/
MIFARE_EXT char PcdRfReset(unsigned char ms);
//=======================================================================================
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -