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

📄 mfrc500.h

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 H
字号:
#ifndef     MFRC500_H
#define     MFRC500_H

// #define     FORCE_RESET      // define to force to complete the reset sequence
                                // when call to the init/reset function.

#define     RSTPIN      P2_7

#ifndef     uchar
#define     uchar     unsigned char
#endif
#ifndef     uint
#define     uint      unsigned int
#endif

#ifndef     TRUE
#define     FALSE   0
#define     TRUE    1
#endif

typedef struct 
         {
            unsigned char  cmd;           //!< command code 
            char           status;        // communication status
            unsigned char  nBytesSent;    // how many bytes already sent
            unsigned char  nBytesToSend;  // how many bytes to send
            unsigned char  nBytesReceived;// how many bytes received
            unsigned short nBitsReceived; // how many bits received
            unsigned char  irqSource;     // which interrupts have occured
            unsigned char  collPos;       // at which position occured a
                                          // collision
            
       //   unsigned char  RxAlignWA;     //!< workaround for RxAlign = 7
      //    unsigned char  DisableDF;     //!< disable disturbance filter
                                          
         } MfCmdInfo;

/********mifare card*********************************************/
//reg  address   
#define     RegPage               0x00 
#define     RegCommand            0x01 
#define     RegFIFOData           0x02 
#define     RegPrimaryStatus      0x03 
#define     RegFIFOLength         0x04 
#define     RegSecondaryStatus    0x05
#define     RegInterruptEn        0x06 
#define     RegInterruptRq        0x07 

#define     RegControl            0x09 
#define     RegErrorFlag          0x0A
#define     RegCollpos            0x0B
#define     RegTimerValue         0x0C
#define     RegCRCResultLSB       0x0D
#define     RegCRCResultMSB       0x0E
#define     RegBitFraming         0x0F

#define     RegTxControl          0x11
#define     RegCwConductance      0x12
#define     RFU13                 0x13
#define     RegCoderControl       0x14
#define     RegModWidth           0x15
#define     RFU16                 0x16
#define     RFU17                 0x17

#define     RegRxControl1         0x19
#define     RegDecoderControl     0x1A
#define     RegBitPhase           0x1B
#define     RegRxThreshold        0x1C
#define     RFU1D                 0x1D
#define     RegRxControl2         0x1E
#define     RegClockQControl      0x1F

#define     RegRxWait             0x21
#define     RegChannelRedundancy  0x22
#define     RegCRCPresetLSB       0x23
#define     RegCRCPresetMSB       0x24
#define     RFU25                 0x25
#define     RegMfOutSelect        0x26
#define     RFU27                 0x27

#define     RegFIFOLevel          0x29
#define     RegTimerClock         0x2A
#define     RegTimerControl       0x2B
#define     RegTimerReload        0x2C
#define     RegIRqPinConfig       0x2D
#define     RFU2E                 0x2E
#define     RFU2F                 0x2F

#define     RFU31                 0x31
#define     RFU32                 0x32
#define     RFU33                 0x33
#define     RFU34                 0x34
#define     RFU35                 0x35
#define     RFU36                 0x36
#define     RFU37                 0x37

#define     RFU39                 0x39   
#define     RegTestAnaSelect      0x3A   
#define     RFU3B                 0x3B   
#define     RFU3C                 0x3C   
#define     RegTestDigiSelect     0x3D   
#define     RFU3E                 0x3E   
#define     RegTestDigiAccess     0x3F

//rc500  command
#define     PCD_IDLE              0x00 
#define     PCD_WRITEE2           0x01 
#define     PCD_READE2            0x03 
#define     PCD_LOADCONFIG        0x07 
#define     PCD_LOADKEYE2         0x0B 
#define     PCD_AUTHENT1          0x0C 
#define     PCD_CALCCRC           0x12	
#define     PCD_AUTHENT2          0x14	
#define     PCD_RECEIVE           0x16 
#define     PCD_LOADKEY           0x19 
#define     PCD_TRANSMIT          0x1A 
#define     PCD_TRANSCEIVE        0x1E	
#define     PCD_RESETPHASE        0x3F 


//mifare card  command
#define     PICC_REQSTD           0x26			
#define     PICC_REQALL           0x52			
#define     PICC_ANTICOLL1        0x93			
#define     PICC_ANTICOLL2        0x95			
#define     PICC_ANTICOLL3        0x97			
#define     PICC_AUTHENT1A        0x60			
#define     PICC_AUTHENT1B        0x61			
#define     PICC_READ             0x30			
#define     PICC_WRITE            0xA0			
#define     PICC_DECREMENT        0xC0         	
#define     PICC_INCREMENT        0xC1         	
#define     PICC_RESTORE          0xC2         	
#define     PICC_TRANSFER         0xB0         	
#define     PICC_HALT             0x50	
#define     PICC_REQIDL           0x26            //!< request idle
#define     PICC_ANTICOLL11       0x92            //!< anticollision level 1 212 kBaud
#define     PICC_ANTICOLL12       0x94            //!< anticollision level 1 424 kBaud
#define     PICC_ANTICOLL13       0x98            //!< anticollision level 1 848 kBaud
#define     PICC_RESET            0XE0            // PICC reset signal 

		


//Error codes                      

#ifndef     MI_ERRCODE
#define     MI_ERRCODE
#define     MI_OK                        0                      /*        正确                 */
#define     MI_NOTAGERR                  1                  /*        无卡                 */
#define     MI_CRCERR                    2                  /*        CRC校验错误          */
#define     MI_AUTHERR                   3                  /*        认证错               */
#define     MI_PARITYERR                 4                  /*        奇偶校验错           */
#define     MI_CODEERR                   5                  /*        给卡的命令代码错     */
#define     MI_SERNRERR                  6                  /*        卡序列号错           */
#define     MI_KEYERR                    7                  /*        密钥错               */
#define     MI_NOTAUTHERR                8                  /*        没有认证             */
#define     MI_BITCOUNTERR               9                  /*        位计数错             */
#define     MI_BYTECOUNTERR              10                 /*        字节计数错           */
#define     MI_WRITEERR                  11                 /*        写错误               */
#define     MI_VALERR                    12                 /*        值错误               */
#define     MI_OVFLERR                   13                 /*        FIFO溢出             */
#define     MI_FRAMINGERR                14                 /*        桢错误               */
#define     MI_UNKNOWN_COMMAND           15                 /*        不支持的命令         */
#define     MI_COLLERR                   16                 /*        卡冲突               */
#define     MI_RESETERR                  17                 /*        复位错               */
#define     MI_INTERFACEERR              18                 /*        接口错               */
#define     MI_ACCESSTIMEOUT             19                 /*        操作超时             */
#define     MI_NY_IMPLEMENTED            20                 /*        其他错误             */
#define     MI_EPBAKERR                  21                 /*        写钱包备份错误       */
#define     MI_WRONG_PARAMETER_VALUE     22                 //        错误参数                             
#define     MI_NOBITWISEANTICOLL         23                 //                                
#define     MI_BAUDRATE_NOT_SUPPORTED    24                 //        波特率不支持                       
#define     MI_CASCLEVEX                 25                 //                                         

   

#endif


#define     ICC_                    40                  /*                            */

/**************************************************************************************/


// Receive States
#define RECV_STX                0
#define RECV_DATA               1
#define RECV_DLE                2

#define COMMAND                 0
#define STATUS                  0
#define LENGTH                  1

/*========================      call internal    ============================*/

#define M500Reset()     {RSTPIN = 1; delay(100); RSTPIN = 0;}

void M500PcdSetTmo(uchar tmoLength);
uchar M500PcdSetDefaultAttrib(void);
uchar M500PiccAuthState(uchar AuthMode, uchar *snr, uchar Sector);
void SetBitMask(uchar reg, uchar mask);
void ClearBitMask(uchar reg, uchar mask);
void ResetInfo(MfCmdInfo *info);
void FlushFIFO(void);
void M500HostCodeKey(uchar *uncoded, uchar *coded);
uchar M500PcdCmd(uchar cmdcode, uchar* send, uchar* rcv, MfCmdInfo *info);
/********************************
 * 数据有效性检查               *
 ********************************/
bit ValueBlockValid(uchar *dts);


/*========================      call user     ===============================*/


/********************************
 * init mfrc500                 *
 * do it first                  *
 ********************************/
uchar M500PcdInit(void);

/********************************
 * set mfrc500 receive gain     *
 ********************************/
void M500SetRcvGain(uchar gain);

/********************************
 * mfrc500 uc reset             *
 ********************************/
uchar M500PcdReset(void);

void M500PcdMfOutSelect(unsigned char type);

/********************************
 * mfrc500 reset                *
 * ms: time between clr and set *
 * do it after m500pcdinit()    *
 ********************************/
void  M500PcdRfReset(uchar ms);

/********************************
 * 呼叫卡                       *
 * req_code: type of request    *
 * atq: answer to request       *
 ********************************/
uchar M500Request(uchar req_code, uchar *atq);

/********************************
 * 防重叠                       *
 ********************************/
uchar M500Anticoll(uchar *Snr);

uchar M500Select(uchar *Snr);
uchar M500Auth(uchar Mode, uchar *snr, uchar *Keys, uchar Sector);

uchar M500Read(uchar Address, uchar *DataBuff);

uchar M500Write(uchar Address, uchar *DataBuff);

// 卡休眠
char M500Halt(void);

/********************************
 * 获取RC500版本号              *
 * info: 输出, 版本号           *
 ********************************/
uchar M500GetHareVerNO(uchar* info);

uchar M500ReadValue(uchar addr, uchar* value, uchar bakaddr);

// return value: 0 means read fail or 2 block are both error
// bit0: value in addr is valid or not
// bit1: value in bakaddr is valid or not
// bit54: 01 for ture > bak And 10 for bak > true when bit10 are both '1'
//        in lsb 1st ep
// bit76: same as bit54 in msb 1st ep
uchar M500GetEpStatus(uchar addr, uchar bakaddr);

uchar M500WriteValue(uchar addr, uchar* value, uchar bakaddr);

///////////////////////////////////////////////////////////////////////
//                V A L U E   M A N I P U L A T I O N 
///////////////////////////////////////////////////////////////////////
char M500Value(unsigned char dd_mode, 
                   unsigned char addr, 
                   unsigned char *value,
                   unsigned char trans_addr);

///////////////////////////////////////////////////////////////////////
//   V A L U E   M A N I P U L A T I O N   W I T H   B A C K U P
///////////////////////////////////////////////////////////////////////
char M500ValueDebit(unsigned char dd_mode, 
                         unsigned char addr, 
                         unsigned char *value);

uchar M500Increment(uchar addr, uchar *value, uchar bakaddr);

uchar M500Decrement(uchar addr, uchar *value, uchar bakaddr);

uchar M500Restore(uchar Address);

uchar M500Transfer(uchar Adress);

uchar M500Copy(uchar srcaddr, uchar desaddr);

#endif


/***********************************
 sequence of operating a card:
 
             request
                |
                v
         anticoll, get snr
                |
                v
         select by snr
                |
                V
           authentication
                |
                V
          read and write
 ***********************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -