This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F6779A:TRF7970A

Guru**** 2393725 points
Other Parts Discussed in Thread: MSP430F6779A, TRF7970A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1455347/msp430f6779a-trf7970a

器件型号:MSP430F6779A
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;
}

               

我希望eTempNFCStateNFC_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;  


您可以帮助解决此问题吗?
 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    根据上面提供的代码、重现问题可能需要很多时间。 为了节省您的时间、我强烈建议您尝试通过单步执行程序来调试代码、并观察相关寄存器以查看是否存在与您的预期不相符的异常状态、这将有助于您更快地找到代码问题。

    此致、

    Peter