⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mifare.h

📁 MFRC522 单片机读写程序
💻 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 + -