Files
helios-evcs/hardware/firmware/lib/mfrc522_driver/mfrc522.h

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