RC522.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #ifndef __RC522_H
  2. #define __RC522_H
  3. #include "main.h"
  4. // RC522 use SPIx define
  5. #define RC522_SPI SPI1
  6. // SPI write read define
  7. #define SPISendByte(data) SPIClass.WriteRead(RC522_SPI, data, 1000)
  8. // SPI CS define
  9. #define cs_reset() SPIClass.WriteCSPin(RC522_SPI, Bit_RESET)
  10. #define cs_set() SPIClass.WriteCSPin(RC522_SPI, Bit_SET)
  11. // Status enumeration, Used with most functions
  12. #define MI_OK 0
  13. #define MI_NOTAGERR 1
  14. #define MI_ERR 2
  15. // MFRC522 Commands
  16. #define PCD_IDLE 0x00 // NO action; Cancel the current command
  17. #define PCD_AUTHENT 0x0E // Authentication Key
  18. #define PCD_RECEIVE 0x08 // Receive Data
  19. #define PCD_TRANSMIT 0x04 // Transmit data
  20. #define PCD_TRANSCEIVE 0x0C // Transmit and receive data,
  21. #define PCD_RESETPHASE 0x0F // Reset
  22. #define PCD_CALCCRC 0x03 // CRC Calculate
  23. // Mifare_One card command word
  24. #define PICC_REQIDL 0x26 // find the antenna area does not enter hibernation
  25. #define PICC_REQALL 0x52 // find all the cards antenna area
  26. #define PICC_ANTICOLL 0x93 // anti-collision
  27. #define PICC_SElECTTAG 0x93 // election card
  28. #define PICC_AUTHENT1A 0x60 // authentication key A
  29. #define PICC_AUTHENT1B 0x61 // authentication key B
  30. #define PICC_READ 0x30 // Read Block
  31. #define PICC_WRITE 0xA0 // write block
  32. #define PICC_DECREMENT 0xC0 // debit
  33. #define PICC_INCREMENT 0xC1 // recharge
  34. #define PICC_RESTORE 0xC2 // transfer block data to the buffer
  35. #define PICC_TRANSFER 0xB0 // save the data in the buffer
  36. #define PICC_HALT 0x50 // Sleep
  37. // MFRC522 Registers
  38. // Page 0: Command and Status
  39. #define MFRC522_REG_RESERVED00 0x00
  40. #define MFRC522_REG_COMMAND 0x01
  41. #define MFRC522_REG_COMM_IE_N 0x02
  42. #define MFRC522_REG_DIV1_EN 0x03
  43. #define MFRC522_REG_COMM_IRQ 0x04
  44. #define MFRC522_REG_DIV_IRQ 0x05
  45. #define MFRC522_REG_ERROR 0x06
  46. #define MFRC522_REG_STATUS1 0x07
  47. #define MFRC522_REG_STATUS2 0x08
  48. #define MFRC522_REG_FIFO_DATA 0x09
  49. #define MFRC522_REG_FIFO_LEVEL 0x0A
  50. #define MFRC522_REG_WATER_LEVEL 0x0B
  51. #define MFRC522_REG_CONTROL 0x0C
  52. #define MFRC522_REG_BIT_FRAMING 0x0D
  53. #define MFRC522_REG_COLL 0x0E
  54. #define MFRC522_REG_RESERVED01 0x0F
  55. // Page 1: Command
  56. #define MFRC522_REG_RESERVED10 0x10
  57. #define MFRC522_REG_MODE 0x11
  58. #define MFRC522_REG_TX_MODE 0x12
  59. #define MFRC522_REG_RX_MODE 0x13
  60. #define MFRC522_REG_TX_CONTROL 0x14
  61. #define MFRC522_REG_TX_AUTO 0x15
  62. #define MFRC522_REG_TX_SELL 0x16
  63. #define MFRC522_REG_RX_SELL 0x17
  64. #define MFRC522_REG_RX_THRESHOLD 0x18
  65. #define MFRC522_REG_DEMOD 0x19
  66. #define MFRC522_REG_RESERVED11 0x1A
  67. #define MFRC522_REG_RESERVED12 0x1B
  68. #define MFRC522_REG_MIFARE 0x1C
  69. #define MFRC522_REG_RESERVED13 0x1D
  70. #define MFRC522_REG_RESERVED14 0x1E
  71. #define MFRC522_REG_SERIALSPEED 0x1F
  72. // Page 2: CFG
  73. #define MFRC522_REG_RESERVED20 0x20
  74. #define MFRC522_REG_CRC_RESULT_M 0x21
  75. #define MFRC522_REG_CRC_RESULT_L 0x22
  76. #define MFRC522_REG_RESERVED21 0x23
  77. #define MFRC522_REG_MOD_WIDTH 0x24
  78. #define MFRC522_REG_RESERVED22 0x25
  79. #define MFRC522_REG_RF_CFG 0x26
  80. #define MFRC522_REG_GS_N 0x27
  81. #define MFRC522_REG_CWGS_PREG 0x28
  82. #define MFRC522_REG__MODGS_PREG 0x29
  83. #define MFRC522_REG_T_MODE 0x2A
  84. #define MFRC522_REG_T_PRESCALER 0x2B
  85. #define MFRC522_REG_T_RELOAD_H 0x2C
  86. #define MFRC522_REG_T_RELOAD_L 0x2D
  87. #define MFRC522_REG_T_COUNTER_VALUE_H 0x2E
  88. #define MFRC522_REG_T_COUNTER_VALUE_L 0x2F
  89. // Page 3:TestRegister
  90. #define MFRC522_REG_RESERVED30 0x30
  91. #define MFRC522_REG_TEST_SEL1 0x31
  92. #define MFRC522_REG_TEST_SEL2 0x32
  93. #define MFRC522_REG_TEST_PIN_EN 0x33
  94. #define MFRC522_REG_TEST_PIN_VALUE 0x34
  95. #define MFRC522_REG_TEST_BUS 0x35
  96. #define MFRC522_REG_AUTO_TEST 0x36
  97. #define MFRC522_REG_VERSION 0x37
  98. #define MFRC522_REG_ANALOG_TEST 0x38
  99. #define MFRC522_REG_TEST_ADC1 0x39
  100. #define MFRC522_REG_TEST_ADC2 0x3A
  101. #define MFRC522_REG_TEST_ADC0 0x3B
  102. #define MFRC522_REG_RESERVED31 0x3C
  103. #define MFRC522_REG_RESERVED32 0x3D
  104. #define MFRC522_REG_RESERVED33 0x3E
  105. #define MFRC522_REG_RESERVED34 0x3F
  106. #define MFRC522_DUMMY 0x00 // Dummy byte
  107. #define MFRC522_MAX_LEN 16 // Buf len byte
  108. // RC522
  109. uint8_t MFRC522_Check(uint8_t* id);
  110. uint8_t MFRC522_Compare(uint8_t* CardID, uint8_t* CompareID);
  111. void MFRC522_WriteRegister(uint8_t addr, uint8_t val);
  112. uint8_t MFRC522_ReadRegister(uint8_t addr);
  113. void MFRC522_SetBitMask(uint8_t reg, uint8_t mask);
  114. void MFRC522_ClearBitMask(uint8_t reg, uint8_t mask);
  115. uint8_t MFRC522_Request(uint8_t reqMode, uint8_t* TagType);
  116. uint8_t MFRC522_ToCard(uint8_t command, uint8_t* sendData, uint8_t sendLen, uint8_t* backData, uint16_t* backLen);
  117. uint8_t MFRC522_Anticoll(uint8_t* serNum);
  118. void MFRC522_CalulateCRC(uint8_t* pIndata, uint8_t len, uint8_t* pOutData);
  119. uint8_t MFRC522_SelectTag(uint8_t* serNum);
  120. uint8_t MFRC522_Auth(uint8_t authMode, uint8_t BlockAddr, uint8_t* Sectorkey, uint8_t* serNum);
  121. uint8_t MFRC522_Read(uint8_t blockAddr, uint8_t* recvData);
  122. uint8_t MFRC522_Write(uint8_t blockAddr, uint8_t* writeData);
  123. void MFRC522_Init(void);
  124. void MFRC522_Reset(void);
  125. void MFRC522_AntennaOn(void);
  126. void MFRC522_AntennaOff(void);
  127. void MFRC522_Halt(void);
  128. // user template
  129. uint8_t RC522_cardScan(uint8_t *cardID);
  130. #endif