121 lines
3.3 KiB
C
121 lines
3.3 KiB
C
#ifndef MFRC522_H
|
|
#define MFRC522_H
|
|
|
|
#include <stdint.h>
|
|
#include <driver/spi_master.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// MFRC522 SPI 命令
|
|
#define MFRC522_CMD_IDLE 0x00
|
|
#define MFRC522_CMD_AUTHENT 0x0E
|
|
#define MFRC522_CMD_RECEIVE 0x08
|
|
#define MFRC522_CMD_TRANSMIT 0x04
|
|
#define MFRC522_CMD_TRANSCEIVE 0x0C
|
|
#define MFRC522_CMD_RESETPHASE 0x0F
|
|
#define MFRC522_CMD_CALCCRC 0x03
|
|
|
|
// MFRC522 寄存器
|
|
#define MFRC522_REG_COMMAND 0x01
|
|
#define MFRC522_REG_COMM_IE_N 0x04
|
|
#define MFRC522_REG_DIV_IE_N 0x05
|
|
#define MFRC522_REG_COMM_IRQ 0x04
|
|
#define MFRC522_REG_DIV_IRQ 0x05
|
|
#define MFRC522_REG_ERROR 0x06
|
|
#define MFRC522_REG_STATUS1 0x07
|
|
#define MFRC522_REG_STATUS2 0x08
|
|
#define MFRC522_REG_FIFO_DATA 0x09
|
|
#define MFRC522_REG_FIFO_LEVEL 0x0A
|
|
#define MFRC522_REG_WATER_LEVEL 0x0B
|
|
#define MFRC522_REG_CONTROL 0x0C
|
|
#define MFRC522_REG_BITFRAMING 0x0D
|
|
#define MFRC522_REG_COLL 0x0E
|
|
#define MFRC522_REG_MODE 0x11
|
|
#define MFRC522_REG_TX_CONTROL 0x14
|
|
#define MFRC522_REG_TX_AUTO 0x15
|
|
#define MFRC522_REG_TX_SELREQ 0x16
|
|
#define MFRC522_REG_RX_SELREQ 0x17
|
|
#define MFRC522_REG_RX_THRESHOLD 0x18
|
|
#define MFRC522_REG_DEMOD 0x19
|
|
#define MFRC522_REG_MIFARE_TX 0x1C
|
|
#define MFRC522_REG_MIFARE_RX 0x1D
|
|
#define MFRC522_REG_SERIAL_SPEED 0x1F
|
|
#define MFRC522_REG_TIMER_MODE 0x2A
|
|
#define MFRC522_REG_TIMER_PRESCALER 0x2B
|
|
#define MFRC522_REG_TIMER_RELOAD_HI 0x2C
|
|
#define MFRC522_REG_TIMER_RELOAD_LO 0x2D
|
|
#define MFRC522_REG_TIMER_COUNTER_HI 0x2E
|
|
#define MFRC522_REG_TIMER_COUNTER_LO 0x2F
|
|
#define MFRC522_REG_TEST_SEN_SEL 0x38
|
|
#define MFRC522_REG_TEST_BUS 0x39
|
|
#define MFRC522_REG_AUTO_TEST 0x3A
|
|
#define MFRC522_REG_VERSION 0x37
|
|
|
|
// MFRC522 Mifare 命令
|
|
#define MFRC522_MIFARE_CMD_AUTH_KEY_A 0x60
|
|
#define MFRC522_MIFARE_CMD_AUTH_KEY_B 0x61
|
|
#define MFRC522_MIFARE_CMD_READ 0x30
|
|
#define MFRC522_MIFARE_CMD_WRITE 0xA0
|
|
#define MFRC522_PICC_CMD_SELECT_CL 0x93
|
|
#define MFRC522_PICC_CMD_HALT_A 0x50
|
|
|
|
typedef struct {
|
|
spi_device_handle_t spi;
|
|
uint8_t uid[10];
|
|
uint8_t uid_len;
|
|
} mfrc522_handle_t;
|
|
|
|
/**
|
|
* 初始化 MFRC522
|
|
* @param sck_pin SCK 引脚
|
|
* @param mosi_pin MOSI 引脚
|
|
* @param miso_pin MISO 引脚
|
|
* @param cs_pin CS 引脚
|
|
* @param rst_pin RST 引脚
|
|
* @return mfrc522_handle_t 指针
|
|
*/
|
|
mfrc522_handle_t* mfrc522_init(int sck_pin, int mosi_pin, int miso_pin, int cs_pin, int rst_pin);
|
|
|
|
/**
|
|
* 复位 MFRC522
|
|
*/
|
|
void mfrc522_reset(mfrc522_handle_t *handle);
|
|
|
|
/**
|
|
* 写寄存器
|
|
*/
|
|
void mfrc522_write_reg(mfrc522_handle_t *handle, uint8_t reg, uint8_t val);
|
|
|
|
/**
|
|
* 读寄存器
|
|
*/
|
|
uint8_t mfrc522_read_reg(mfrc522_handle_t *handle, uint8_t reg);
|
|
|
|
/**
|
|
* 检测卡片
|
|
*/
|
|
uint8_t mfrc522_picc_is_new(mfrc522_handle_t *handle);
|
|
|
|
/**
|
|
* 读卡 UID
|
|
*/
|
|
uint8_t mfrc522_picc_read_serial(mfrc522_handle_t *handle);
|
|
|
|
/**
|
|
* 停止与卡通信
|
|
*/
|
|
void mfrc522_picc_halt_a(mfrc522_handle_t *handle);
|
|
|
|
/**
|
|
* 关闭 MFRC522
|
|
*/
|
|
void mfrc522_deinit(mfrc522_handle_t *handle);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // MFRC522_H
|