150 lines
5.3 KiB
C
150 lines
5.3 KiB
C
|
#pragma once
|
||
|
|
||
|
#include <avr/io.h>
|
||
|
|
||
|
|
||
|
//MF522command wordu
|
||
|
#define PCD_IDLE 0x00 //NO action; cancel current command
|
||
|
#define PCD_AUTHENT 0x0E //verify key
|
||
|
#define PCD_RECEIVE 0x08 //receive data
|
||
|
|
||
|
#define PCD_TRANSMIT 0x04 //send data
|
||
|
#define PCD_TRANSCEIVE 0x0C //receive and send data
|
||
|
#define PCD_RESETPHASE 0x0F //reset
|
||
|
#define PCD_CALCCRC 0x03 //CRC calculation
|
||
|
|
||
|
//Mifare_One Card command word
|
||
|
#define PICC_REQIDL 0x26 // line-tracking area is dormant #define PICC_REQALL 0x52 //line-tracking area is interfered
|
||
|
#define PICC_ANTICOLL 0x93 //Anti collision
|
||
|
#define PICC_SElECTTAG 0x93 //choose cards
|
||
|
#define PICC_AUTHENT1A 0x60 //Verify A key
|
||
|
#define PICC_AUTHENT1B 0x61 //Verify B key
|
||
|
#define PICC_READ 0x30 // Reader Module
|
||
|
#define PICC_WRITE 0xA0 // letter block
|
||
|
|
||
|
#define PICC_DECREMENT 0xC0
|
||
|
#define PICC_INCREMENT 0xC1
|
||
|
#define PICC_RESTORE 0xC2 //Transfer data to buffer
|
||
|
#define PICC_TRANSFER 0xB0 //Save buffer data
|
||
|
#define PICC_HALT 0x50 //Dormancy
|
||
|
|
||
|
|
||
|
//MF522 Error code returned when communication
|
||
|
#define MI_OK 0
|
||
|
#define MI_NOTAGERR 1
|
||
|
#define MI_ERR 2
|
||
|
|
||
|
|
||
|
//------------------MFRC522 Register---------------
|
||
|
//Page 0:Command and Status
|
||
|
#define Reserved00 0x00
|
||
|
#define CommandReg 0x01
|
||
|
#define CommIEnReg 0x02
|
||
|
#define DivlEnReg 0x03
|
||
|
#define CommIrqReg 0x04
|
||
|
#define DivIrqReg 0x05
|
||
|
#define ErrorReg 0x06
|
||
|
#define Status1Reg 0x07
|
||
|
#define Status2Reg 0x08
|
||
|
#define FIFODataReg 0x09
|
||
|
#define FIFOLevelReg 0x0A
|
||
|
|
||
|
#define WaterLevelReg 0x0B
|
||
|
#define ControlReg 0x0C
|
||
|
#define BitFramingReg 0x0D
|
||
|
#define CollReg 0x0E
|
||
|
#define Reserved01 0x0F
|
||
|
//Page 1:Command
|
||
|
#define Reserved10 0x10
|
||
|
#define ModeReg 0x11
|
||
|
#define TxModeReg 0x12
|
||
|
#define RxModeReg 0x13
|
||
|
#define TxControlReg 0x14
|
||
|
#define TxAutoReg 0x15
|
||
|
#define TxSelReg 0x16
|
||
|
#define RxSelReg 0x17
|
||
|
#define RxThresholdReg 0x18
|
||
|
#define DemodReg 0x19
|
||
|
|
||
|
#define Reserved11 0x1A
|
||
|
#define Reserved12 0x1B
|
||
|
#define MifareReg 0x1C
|
||
|
#define Reserved13 0x1D
|
||
|
#define Reserved14 0x1E
|
||
|
#define SerialSpeedReg 0x1F
|
||
|
//Page 2:CFG
|
||
|
#define Reserved20 0x20
|
||
|
#define CRCResultRegM 0x21
|
||
|
#define CRCResultRegL 0x22
|
||
|
#define Reserved21 0x23
|
||
|
#define ModWidthReg 0x24
|
||
|
#define Reserved22 0x25
|
||
|
#define RFCfgReg 0x26
|
||
|
#define GsNReg 0x27
|
||
|
#define CWGsPReg 0x28
|
||
|
#define ModGsPReg 0x29
|
||
|
#define TModeReg 0x2A
|
||
|
#define TPrescalerReg 0x2B
|
||
|
#define TReloadRegH 0x2C
|
||
|
#define TReloadRegL 0x2D
|
||
|
#define TCounterValueRegH 0x2E
|
||
|
#define TCounterValueRegL 0x2F
|
||
|
//Page 3:TestRegister
|
||
|
#define Reserved30 0x30
|
||
|
|
||
|
#define TestSel1Reg 0x31
|
||
|
#define TestSel2Reg 0x32
|
||
|
#define TestPinEnReg 0x33
|
||
|
#define TestPinValueReg 0x34
|
||
|
#define TestBusReg 0x35
|
||
|
#define AutoTestReg 0x36
|
||
|
#define VersionReg 0x37
|
||
|
#define AnalogTestReg 0x38
|
||
|
#define TestDAC1Reg 0x39
|
||
|
#define TestDAC2Reg 0x3A
|
||
|
#define TestADCReg 0x3B
|
||
|
#define Reserved31 0x3C
|
||
|
#define Reserved32 0x3D
|
||
|
#define Reserved33 0x3E
|
||
|
#define Reserved34 0x3F
|
||
|
|
||
|
#define uchar unsigned char
|
||
|
#define uint unsigned int
|
||
|
|
||
|
#ifndef NRSTPD_PORT
|
||
|
#define NRSTPD_PORT PORTB
|
||
|
#define NRSTPD_DDR DDRB
|
||
|
#define NRSTPD_PIN PB2
|
||
|
#endif
|
||
|
|
||
|
#define MAX_LEN 16
|
||
|
|
||
|
class MFRC522
|
||
|
{
|
||
|
private:
|
||
|
/* data */
|
||
|
volatile uchar *reset_port, *cs_port;
|
||
|
volatile uchar reset_pin, cs_pin;
|
||
|
void SetBitMask(uchar reg, uchar mask);
|
||
|
void ClearBitMask(uchar reg, uchar mask);
|
||
|
void AntennaOn(void);
|
||
|
void AntennaOff(void);
|
||
|
void Reset(void);
|
||
|
void CalulateCRC(uchar *pIndata, uchar len, uchar *pOutData);
|
||
|
public:
|
||
|
MFRC522(volatile uchar cs_pin, volatile uchar *cs_port, volatile uchar reset_pin, volatile uchar *reset_port);
|
||
|
~MFRC522();
|
||
|
void Init(void);
|
||
|
char Halt(void);
|
||
|
uchar ToCard(uchar command, uchar *sendData, uchar sendLen, uchar *backData, uint *backLen);
|
||
|
void put(uchar addr, uchar val);
|
||
|
uchar get(uchar addr);
|
||
|
uchar Auth(uchar authMode, uchar BlockAddr, uchar *Sectorkey, uchar *serNum);
|
||
|
uchar Write(uchar blockAddr, uchar *writeData);
|
||
|
uchar Read(uchar blockAddr, uchar *recvData);
|
||
|
uchar Request(uchar reqMode, uchar *TagType);
|
||
|
uchar Anticoll(uchar *serNum);
|
||
|
uchar SelectTag(uchar *serNum);
|
||
|
};
|
||
|
|