测试:type A卡 读取代码没问题
This commit is contained in:
@ -94,6 +94,7 @@
|
||||
#define REG_VERSION 0x7F
|
||||
|
||||
#define CMD_MASK 0x1F
|
||||
// #define CMD_MASK 0x0F
|
||||
|
||||
#define CMD_IDLE 0x00
|
||||
#define CMD_LPCD 0x01
|
||||
|
||||
@ -21,7 +21,7 @@ struct CPU_CARD_STR CPU_CARD;
|
||||
static unsigned char FM176XX_TPDU(transmission_struct *tpdu);
|
||||
|
||||
/**
|
||||
* @brief CPU卡事件处理函数(示例)。
|
||||
* @brief CPU卡事件处理函数。
|
||||
* @details
|
||||
* 1. 发送RATS (Request for Answer to Select) 命令以激活卡片并获取ATS (Answer to Select)。
|
||||
* 2. 解析ATS,获取卡片能力信息(如FSC, FWI等)。
|
||||
|
||||
@ -67,9 +67,9 @@ void Mifare_Clear_Crypto(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Mifare卡事件处理函数(示例)。
|
||||
* @brief Mifare卡事件处理函数。
|
||||
* @details
|
||||
* 这是一个示例函数,演示了对Mifare Classic卡进行读写操作的完整流程:
|
||||
* Mifare Classic卡进行读写操作的完整流程:
|
||||
* 1. 清除加密状态。
|
||||
* 2. 对指定的扇区(例如扇区1)使用密钥A进行认证。
|
||||
* 3. 如果认证成功,则遍历该扇区的数据块(块0到块2)。
|
||||
|
||||
@ -19,9 +19,9 @@
|
||||
unsigned char PAGE_DATA[16];
|
||||
|
||||
/**
|
||||
* @brief NTAG卡事件处理函数(示例)。
|
||||
* @brief NTAG卡事件处理函数。
|
||||
* @details
|
||||
* 这是一个示例函数,演示了对NTAG系列卡片进行读写操作的流程:
|
||||
* 对NTAG系列卡片进行读写操作的流程:
|
||||
* 1. 准备要写入的数据(4字节)。
|
||||
* 2. 调用 `Write_Page()` 函数将数据写入第8页。
|
||||
* 3. 调用 `Read_Page()` 函数从第8页读回数据并打印,以进行验证。
|
||||
|
||||
@ -591,7 +591,7 @@ unsigned char ReaderB_Get_SN(struct picc_b_struct *picc_b)
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
extern void debug_command(u8 index);
|
||||
/**
|
||||
* @brief 向Type V (ISO15693) 卡片发送Inventory命令。
|
||||
* @param picc_v [out] 指向存储卡片信息的结构体。
|
||||
@ -600,8 +600,14 @@ unsigned char ReaderB_Get_SN(struct picc_b_struct *picc_b)
|
||||
unsigned char ReaderV_Inventory(struct picc_v_struct *picc_v)
|
||||
{
|
||||
unsigned char reg_data, i, result; // 新增 result 变量
|
||||
SetCommand(CMD_IDLE);
|
||||
unsigned char command = 0;
|
||||
|
||||
// debug_command(0);
|
||||
|
||||
SetCommand(CMD_IDLE);
|
||||
//对于command,可以在发送第二条指令之前读取一次command寄存器判断是否回到idle再发送第二条,这里直接采用长延迟
|
||||
rfid_delay_ms(100);
|
||||
// debug_command(1);
|
||||
|
||||
SetReg(REG_TXDATANUM, 0x08);
|
||||
ModifyReg(REG_FIFOCONTROL, BIT_FIFOFLUSH, FUN_ENABLE);
|
||||
@ -613,7 +619,8 @@ unsigned char ReaderV_Inventory(struct picc_v_struct *picc_v)
|
||||
ModifyReg(REG_RXCRCCON, BIT_CRCEN, FUN_ENABLE);
|
||||
|
||||
SetCommand(CMD_TRANSCEIVE);
|
||||
rfid_delay_ms(50);
|
||||
// debug_command(2);
|
||||
rfid_delay_ms(100);
|
||||
|
||||
GetReg(REG_ERROR, ®_data);
|
||||
if ((reg_data & 0x0F) != 0){
|
||||
@ -623,6 +630,7 @@ unsigned char ReaderV_Inventory(struct picc_v_struct *picc_v)
|
||||
|
||||
GetReg(REG_FIFOLENGTH, ®_data);
|
||||
if (reg_data != 10){
|
||||
// debug_command(3);
|
||||
xlog("FIFO Length is %d, expected 10.\n", reg_data);
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
@ -82,8 +82,9 @@ void TYPE_A_EVENT(char* uid)
|
||||
}
|
||||
xlog("-> SAK = %02X\r\n", PICC_A.SAK[0]);
|
||||
|
||||
// 根据SAK值判断卡片类型
|
||||
if (PICC_A.SAK[0] == 0x08)
|
||||
// 根据SAK值判断卡片类型,并进行写入要存储的数据,目前客户使用的是mifare的卡
|
||||
#if 0
|
||||
if (PICC_A.SAK[0] == 0x08) //
|
||||
{
|
||||
xlog("************* Mifare CARD ************* \r\n");
|
||||
result = MIFARE_CARD_EVENT();
|
||||
@ -98,6 +99,7 @@ void TYPE_A_EVENT(char* uid)
|
||||
xlog("************* NTAG CARD ************* \r\n");
|
||||
result = NTAG_EVENT();
|
||||
}
|
||||
#endif
|
||||
|
||||
SetCW(FUN_DISABLE); // 关闭RF场
|
||||
}
|
||||
|
||||
@ -130,6 +130,13 @@ unsigned char SetReg(unsigned char address, unsigned char reg_data){
|
||||
*/
|
||||
unsigned char FM176XX_SoftReset(void){
|
||||
return SetReg(REG_COMMAND, 0x1F);
|
||||
|
||||
//
|
||||
// gpio_set_direction(IO_PORTC_04, 0);
|
||||
// gpio_write(IO_PORTC_04, 1);
|
||||
// mdelay(5);
|
||||
// gpio_write(IO_PORTC_04, 0);
|
||||
|
||||
}
|
||||
|
||||
#elif INTERFACE_TYPE == 1 //spi
|
||||
@ -230,3 +237,12 @@ void rfid_delay_ms(unsigned int ms){
|
||||
// delay(ms);
|
||||
mdelay(ms);
|
||||
}
|
||||
|
||||
|
||||
void debug_command(u8 index){
|
||||
unsigned char reg_data;
|
||||
unsigned char command = 0;
|
||||
GetReg(REG_ERROR, ®_data);
|
||||
GetReg(REG_COMMAND, &command);
|
||||
xlog("debug %d -- REG_ERROR = 0x%02X. command = 0x%02X\n",index, reg_data, command);
|
||||
}
|
||||
Reference in New Issue
Block a user