Thread 中讨论的其他器件: TRF7970A
工具与软件:
您好!
我目前正在使用 NFC 功能,我正面临一个问题的NFC_run()
功能。 示例代码用于 MSP430f5529LP 套件、我正在使用 MSp430F6779a 微控制器并尝试集成 TRF7970a RFID。
当我运行以下代码时:
//所有 NFC 协议状态机的状态
typedef 枚举{
NFC_STATE_IDLE = 0、
NFC_TARGET_WAIT_FOR_ACTIVATION、
NFC_PROTOCOL_ACTIVATION、
NFC_PARAMETER_SELECTION、
NFC_DATA_EXCHANGE_PROTOCOL、
NFC_MIFARE_DATA_EXCHANGE_PROTOCOL、
NFC_DEACTIVATION、
NFC_禁用
} tNfcState;
////////// 第一步//////////////////////////////////////////////////// **** 在主功能内***** ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
eTempNFCState = NFC_run ();
如果(eTempNFCState = NFC_DATA_EXCHANGE_PROTOCOL)
{
if (NFC_RW_getModeStatus (&sRWMode、&sRWBitrate))
{
//此处的一些操作
}
}
//////////////////////////////////////////// 第二步**** NFC_RUN()内的内部****** //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
否则 if (g_sNfcStatus.sNfcModeCurrent.bits.bNfcModePoll == 1)
{
sReturnNfcState = NFC_pollStateMachine ();
}
////////////////////////////////////////////////////////// ******* 第三步**** 内部 pollstatemcahine ()
tNfcState NFC_pollStateMachine (空)
{
#if (nfc_peer_2_peer_initiator_enabled || nfc_reader_writer_enabled)
tTRF79x0_IRQFlag eTrfIrqStatus = IRQ_STATUS_IDLE;
tTRF79x0_Status sTRF79x0Status;
tNfcInitiatorState eInitiatorState;
uint16_t ui16PICCTimeOut = 0;
t_sTRF79x0_InitiatorMode sTRFInitMode;
t_sTRF79x0_Bitrate sTRFBitrate;
#if (NFC_P2P_PASSIVE_INIT_ENABLED || NFC_READER_writer_enabled)
bool bPassiveRfField = false;
uint8_t ui8Status;
#endif
bool bISODEp = false;
bool bNFCADEp = false;
bool bNFCFDEp = false;
开关(g_sNfcStatus.eNfcState)
{
案例 NFC_PROTOCOL_ACTIVATION:
案例 NFC_PROTOCOL_ACTIVATION:
//初始化所有当前模式变量
G_sNfcStatus.sRWModeCurrent.ui8byte = 0x00;
G_sNfcStatus.sRWCommCurrent.ui16byte = 0x0000;
G_sNfcStatus.sP2PModeCurrent.ui8byte = 0x00;
G_sNfcStatus.sP2PCommCurrent.ui8byte = 0x00;
//将所有 NFC 层初始化为默认值
NFC_NFC() Initiator_Init;
//设置 ISO DEP 和 NFC DEP 的 DEP 支持
#if (nfc_reader_writer_enabled)
如果(g_sNfcStatus.sRWModeSupport.bits.bNfcA =1
|| g_sNfcStatus.sRWModeSupport.bits.bNfcB = 1)
{
bISODEp = true;
}
#endif
#if (NFC_RW_T5T_ENABLED)
//检查 NFC-V 技术激活
if ((g_sNfcStatus.eNfcState = NFC_PROTOCOL_ACTIVATION)&&
(g_sNfcStatus.sRWModeSupport.bISO15693 =1)&&
(g_sNfcStatus.sRWCommSupport.bits.bISO15693_26_48kbps = 1)
{
// Reset Modes (重置模式)
sTRFInitMode.ui8byte = 0x00;
sTRFBitrate.ui16word = 0x0000;
sTRFInitMode.bits.bPassive15693 = 1;
TRF79x0_setNfcMode (false);
if (g_sNfcStatus.sRWCommSupport.bits.bISO15693_26_48kbps = 1)
{
sTRFBitrate.bits.b26_48_kbps_1_out_4 = 1;
}
设计
{
//针对其他可能的15693比特率
}
//检查射频域是否已启用
if (bPassiveRfField == false)
{
ui8Status = TRF79x0_initialatorModeSetup (sTRFInitMode、sTRFBitrate);
bPassiveRfField = true;
}
设计
{
ui8Status = TRF79x0_switchInitiatorBaudRate (sTRFInitMode、sTRFBitrate、true);
}
if (ui8Status == STATUS_SUCCESS)
{
if (g_bSupportCertification == true)
{
//延迟防护时间- 5毫秒(规格要求5毫秒)
MCU_delayMillisecond (5);
}
设计
{
//延迟保护时间-为 RF430FRL 射频供电的参考设计提供10ms 的时间
mcu_delayMillisecond (10);
}
NFC_4.12.4(sTRFInitMode); Initiator_State
ui16PICCTimeOut = NFC_C381TimeOut Initiator_Get ();
eTrfIrqStatus = NFC_waitForCommand (ui16PICCTimeOut);
if (eTrfIrqStatus == IRQ_STATUS_RX_COMPLETE)
{
sTRF79x0Status = TRF79x0_getStatus ();
eInitiatorState = NFC_LaunchPad Initiator_Proccess (g_pui8RxData、sTRF79x0Status.ui8FifoBytesReceived、sTRF79x0Status.sInitiatorMode);
if (eInitiatorState = NFC_INITIATOR_TYPE_V_DEP)
{
g_sNfcStatus.eNfcState = NFC_DATA_EXCHANGE_PROTOCOL;
G_sNfcStatus.sRWModeCurrent.bits.bISO15693 = 1;
G_sNfcStatus.sRWCommCurrent.bits.bISO15693_26_48kbps = 1;
}
}
}
}
#endif
返回 g_sNfcStatus.eNfcState;
}
我希望eTempNFCState
是NFC_DATA_EXCHANGE_PROTOCOL
,但相反,它是返回NFC_PROTOCOL_ACTIVATION
.
它将返回,
if (eTempNFCState = NFC_DATA_EXCHANGE_PROTOCOL)
{
if (NFC_RW_getModeStatus (&S RWMode、&sRWBitrate))
{
#if NFC_reader_writer_enabled
NFC_RW_LED_POUT |= NFC_RW_LED_BIT;
if (sRWMode.bits.bNfcA = 1)
{
if (NFC_A_getSAK ()=0x00)
{
// T2T 标签状态机
T2T_stateMachine ();
}
可能是 eTempNFCState = NFC_DATA_EXCHANGE_PROTOCOL = 4;
但它正在返回 eTempNFCState == NFC_Protocol_activation、== 2;
您可以帮助解决此问题吗?