154 lines
6.5 KiB
C
154 lines
6.5 KiB
C
|
|
/********************************************************************************************************
|
||
|
|
* @file READER.h
|
||
|
|
* @brief RFID 读卡器底层驱动及协议头文件
|
||
|
|
* @details
|
||
|
|
* 本文件定义了与RFID芯片交互所需的常量、数据结构和函数原型。
|
||
|
|
*
|
||
|
|
* @author Kilo Code
|
||
|
|
* @date 2025-11-24
|
||
|
|
* @version 1.0
|
||
|
|
********************************************************************************************************/
|
||
|
|
|
||
|
|
#ifndef _READER_H
|
||
|
|
#define _READER_H
|
||
|
|
|
||
|
|
/********************************************************************************************************
|
||
|
|
* 常量定义
|
||
|
|
********************************************************************************************************/
|
||
|
|
|
||
|
|
// ISO14443A 命令码
|
||
|
|
static const unsigned char RF_CMD_REQA = 0x26; /**< 请求命令 */
|
||
|
|
static const unsigned char RF_CMD_WUPA = 0x52; /**< 唤醒命令 */
|
||
|
|
static const unsigned char RF_CMD_ANTICOLL[3] = {0x93, 0x95, 0x97}; /**< 防冲突命令,根据级联级别选择 */
|
||
|
|
static const unsigned char RF_CMD_SELECT[3] = {0x93, 0x95, 0x97}; /**< 选择命令,根据级联级别选择 */
|
||
|
|
|
||
|
|
// MIFARE Classic 命令码
|
||
|
|
static const unsigned char RF_CMD_KEYA = 0x60; /**< 密钥A认证 */
|
||
|
|
static const unsigned char RF_CMD_KEYB = 0x61; /**< 密钥B认证 */
|
||
|
|
|
||
|
|
|
||
|
|
/********************************************************************************************************
|
||
|
|
* 卡片信息结构体
|
||
|
|
********************************************************************************************************/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief 存储ISO/IEC 14443 Type B卡片信息的结构体
|
||
|
|
*/
|
||
|
|
struct picc_b_struct
|
||
|
|
{
|
||
|
|
unsigned char ATQB[12]; /**< REQB/WUPB的响应 (Answer to Request B) */
|
||
|
|
unsigned char PUPI[4]; /**< Pseudo-Unique PICC Identifier */
|
||
|
|
unsigned char APPLICATION_DATA[4]; /**< 应用数据 */
|
||
|
|
unsigned char PROTOCOL_INF[3]; /**< 协议信息 */
|
||
|
|
unsigned char CID; /**< 卡片ID (Card Identifier) */
|
||
|
|
unsigned char Answer_to_HALT[1]; /**< HALT命令的响应 */
|
||
|
|
unsigned char SN[8]; /**< 序列号 (自定义命令获取) */
|
||
|
|
};
|
||
|
|
extern struct picc_b_struct PICC_B;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief 存储ISO/IEC 14443 Type A卡片信息的结构体
|
||
|
|
*/
|
||
|
|
struct picc_a_struct
|
||
|
|
{
|
||
|
|
unsigned char ATQA[2]; /**< REQA/WUPA的响应 (Answer to Request A) */
|
||
|
|
unsigned char CASCADE_LEVEL; /**< 当前级联级别 (用于处理多级UID) */
|
||
|
|
unsigned char UID_Length; /**< UID的长度 (4, 7, or 10 bytes) */
|
||
|
|
unsigned char UID[15]; /**< 卡片唯一ID (Unique Identifier) */
|
||
|
|
unsigned char BCC[3]; /**< 块校验字符 (Block Check Character) */
|
||
|
|
unsigned char SAK[3]; /**< 选择确认 (Select Acknowledge) */
|
||
|
|
};
|
||
|
|
extern struct picc_a_struct PICC_A;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief 存储ISO/IEC 15693 (Type V) 卡片信息的结构体
|
||
|
|
*/
|
||
|
|
struct picc_v_struct
|
||
|
|
{
|
||
|
|
unsigned char UID[8]; /**< 卡片唯一ID (Unique Identifier) */
|
||
|
|
unsigned char RESPONSE; /**< 命令响应标志 */
|
||
|
|
unsigned char BLOCK_DATA[4]; /**< 读取或写入的块数据 */
|
||
|
|
};
|
||
|
|
extern struct picc_v_struct PICC_V;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief 存储FeliCa (Type F) 卡片信息的结构体
|
||
|
|
*/
|
||
|
|
struct picc_f_struct
|
||
|
|
{
|
||
|
|
unsigned char UID[8]; /**< 卡片唯一ID (Unique Identifier) */
|
||
|
|
};
|
||
|
|
extern struct picc_f_struct PICC_F;
|
||
|
|
|
||
|
|
|
||
|
|
/********************************************************************************************************
|
||
|
|
* 芯片参数配置
|
||
|
|
********************************************************************************************************/
|
||
|
|
|
||
|
|
// --- Type A 参数 ---
|
||
|
|
#define GAIN_A 7 // 接收增益 (范围 0~7)
|
||
|
|
#define HPCF_A 3 // 高通滤波器截止频率 (范围 0~7)
|
||
|
|
#define AMPLITUDE_A 255 // RF场幅度 (范围 0~255)
|
||
|
|
|
||
|
|
// --- Type B 参数 ---
|
||
|
|
#define GAIN_B 7 // 接收增益
|
||
|
|
#define HPCF_B 3 // 高通滤波器截止频率
|
||
|
|
#define AMPLITUDE_B 255 // RF场幅度
|
||
|
|
#define MODULATION_B 100 // 调制深度 (范围 0~255, 值越小调制越深)
|
||
|
|
|
||
|
|
// --- Type V (ISO15693) 参数 ---
|
||
|
|
#define GAIN_V 7 // 接收增益
|
||
|
|
#define HPCF_V 4 // 高通滤波器截止频率
|
||
|
|
#define AMPLITUDE_V 255 // RF场幅度
|
||
|
|
#define MODULATION_V 10 // 调制深度
|
||
|
|
|
||
|
|
// --- Type F (FeliCa) 参数 ---
|
||
|
|
#define GAIN_F 7 // 接收增益
|
||
|
|
#define HPCF_F 4 // 高通滤波器截止频率
|
||
|
|
#define AMPLITUDE_F 255 // RF场幅度
|
||
|
|
#define MODULATION_F 100 // 调制深度
|
||
|
|
|
||
|
|
|
||
|
|
/********************************************************************************************************
|
||
|
|
* 函数原型声明
|
||
|
|
********************************************************************************************************/
|
||
|
|
|
||
|
|
// --- 通用函数 ---
|
||
|
|
extern void ModifyReg(unsigned char reg_address, unsigned char mask, unsigned char set);
|
||
|
|
extern void Clear_FIFO(void);
|
||
|
|
extern unsigned char SetCommand(unsigned char command);
|
||
|
|
extern void SetParity(unsigned char state);
|
||
|
|
extern void SetTimer(unsigned int timeout);
|
||
|
|
extern unsigned char SetCW(unsigned char mode);
|
||
|
|
|
||
|
|
// --- 协议初始化函数 ---
|
||
|
|
extern unsigned char ReaderA_Initial(void);
|
||
|
|
extern unsigned char ReaderB_Initial(void);
|
||
|
|
extern unsigned char ReaderV_Initial(void);
|
||
|
|
extern unsigned char ReaderF_Initial(void);
|
||
|
|
|
||
|
|
// --- Type A 命令 ---
|
||
|
|
extern unsigned char ReaderA_Wakeeup(struct picc_a_struct *picc_a);
|
||
|
|
extern unsigned char ReaderA_Request(struct picc_a_struct *picc_a);
|
||
|
|
extern unsigned char ReaderA_Anticoll(struct picc_a_struct *picc_a);
|
||
|
|
extern unsigned char ReaderA_Select(struct picc_a_struct *picc_a);
|
||
|
|
extern unsigned char ReaderA_CardActivate(struct picc_a_struct *picc_a);
|
||
|
|
|
||
|
|
// --- Type B 命令 ---
|
||
|
|
extern unsigned char ReaderB_Wakeup(struct picc_b_struct *picc_b);
|
||
|
|
extern unsigned char ReaderB_Request(struct picc_b_struct *picc_b);
|
||
|
|
extern unsigned char ReaderB_Attrib(struct picc_b_struct *picc_b);
|
||
|
|
extern unsigned char ReaderB_Halt(struct picc_b_struct *picc_b);
|
||
|
|
extern unsigned char ReaderB_Get_SN(struct picc_b_struct *picc_b);
|
||
|
|
|
||
|
|
// --- Type V (ISO15693) 命令 ---
|
||
|
|
extern unsigned char ReaderV_Inventory(struct picc_v_struct *picc_v);
|
||
|
|
extern unsigned char ReaderV_Select(struct picc_v_struct *picc_v);
|
||
|
|
extern unsigned char ReaderV_ReadSingleBlock(unsigned char block_num, struct picc_v_struct *picc_v);
|
||
|
|
extern unsigned char ReaderV_WriteSingleBlock(unsigned char block_num, struct picc_v_struct *picc_v);
|
||
|
|
|
||
|
|
// --- Type F (FeliCa) 命令 ---
|
||
|
|
extern unsigned char ReaderF_Inventory(struct picc_f_struct *picc_f);
|
||
|
|
|
||
|
|
#endif // _READER_H
|