1、void Trf797xTurnRfOn(void) 打开RFID模块
{
TrfSetRegister(REGULATOR_CONTROL, 0x87); //寄存器地址0x0b
TrfSetRegister(CHIP_STATE_CONTROL, 0x25); //寄存器地址0x0
TrfSetRegister(ISO_CONTROL, 0xC); //读取B卡的设置 ,寄存器地址0x01
TrfSetRegister(MODULATOR_CONTROL, 0x0); // ASK 10% , 寄存器地址0x09
//TrfSetRegister(ISO_CONTROL, 0x88); //读取A卡的设置
//TrfSetRegister(MODULATOR_CONTROL, 0x01); // ASK 10%
TrfSetRegister(RX_WAIT_TIME, 0x07); //寄存器地址0x08
TrfSetRegister(RX_SPECIAL_SETTINGS, 0x20); //寄存器址 0x0a
}
2、void Trf797xTurnRfOff(void) //关闭RFID模块
{
// RF output not active
// Reference Source에는 0x1F만 하여 RF output active 상태는 유지되도록 되어 있으나 출력 제어를 위해 수정
TrfSetRegister(CHIP_STATE_CONTROL, 0x01);
}
4、搜索卡片
Iso14443aFindTag()
{
RfidPowerOn(); //硬件使能;
Trf797xTurnRfOn(); //打开RFID模块
Delay(SYS_TIMER_2MS);
IrqClear(); //清除IRQ_Status状态;
{ //type B寻卡
TrfGetRegisterData(ISO_CONTROL,&status,1);
APP_TRACE_INFO("%s %d %x\n",__FUNCTION__, __LINE__,status);
TrfGetRegisterData(MODULATOR_CONTROL,&status,1);
APP_TRACE_INFO("%s %d %x\n",__FUNCTION__, __LINE__,status);
gTrfFifoDataBuf[ui8Offset++] = 0x8F; // Reset Command
gTrfFifoDataBuf[ui8Offset++] = 0x90; // Transmit No CRC Command
gTrfFifoDataBuf[ui8Offset++] = 0x3D; // Address of Register TX_LENGTH_BYTE_1
gTrfFifoDataBuf[ui8Offset++] = 0x00; // Data of TX_LENGTH_BYTE_1
gTrfFifoDataBuf[ui8Offset++] = 0x30; // Data of TX_LENGTH_BYTE_2
gTrfFifoDataBuf[ui8Offset++] = 0x05; // REQB/SENSB_REQ Flag
gTrfFifoDataBuf[ui8Offset++] = 0x00; // AFI, 0x00 for all families and sub-families
gTrfFifoDataBuf[ui8Offset++] = ISO14443B_REQA| 0x00; // PARASM = No Extended ATQB Support + 、Sending REQB/WUPB + Number of slots
Delay(SYS_TIMER_1MS);
TrfSendInventoryCommand(gTrfFifoDataBuf, ui8Offset); //发送命令
}
#if 0 //寻卡 typeA
{
gTrfFifoDataBuf[ui8Offset++] = 0x8F; // Reset Command
gTrfFifoDataBuf[ui8Offset++] = 0x90; // Transmit No CRC Command
gTrfFifoDataBuf[ui8Offset++] = 0x3D; // Address of Register TX_LENGTH_BYTE_1
gTrfFifoDataBuf[ui8Offset++] = 0x00; // Data of TX_LENGTH_BYTE_1
gTrfFifoDataBuf[ui8Offset++] = 0x0F; // Data of TX_LENGTH_BYTE_2
gTrfFifoDataBuf[ui8Offset++] = Command; // Data to be sent
TrfSendInventoryCommand(gTrfFifoDataBuf, 6);
}
#endif
while(--bNum)
{
if(IrqCheck() == IRQ_RX_COMPLETED)
{
APP_TRACE_INFO("%s %d \n",__FUNCTION__, __LINE__);
if(Iso14443aReqaRespond(UidSize) == STATUS_SUCCESS)
{
return 1;
}
break;
}
Delay(SYS_TIMER_10US);
}
TrfSetRegister(CHIP_STATE_CONTROL, 0x01);
//RfidPowerOff();
}
//设置为B卡时,不管是否放CPU卡,IRQ_Status状态寄存器都是0x80;
//设置为A卡时,IRQ_Status不放卡为0x80,放mf卡时为0xc0,即接收数据完成;