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.

[参考译文] TRF7970A:使用 msp430f5529读取 MIFARE 卡

Guru**** 2507255 points
Other Parts Discussed in Thread: TRF7970A, MSP430F5259, MSP-EXP430F5529LP

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/659326/trf7970a-reading-mifare-card-with-msp430f5529

器件型号:TRF7970A
主题中讨论的其他器件: MSP430F5259MSP-EXP430F5529LP

您好!

我们使用 msp430f5259 + trf7970a 设计 PCB、用于读取/写入 MIFARE 卡。

我从 F5529LP_TRF7970A_All_NFC_modes 复制并粘贴项目代码、这些代码位于 nfclink 软件(sloc333a - TRF7970A\examples\boards\MSP-EXP430F5529LP 和所需的库)中

我们不需要 USB 连接。 因此、我删除了 USB 代码。 现在、我希望具有具有具有 NFC_B_getNfcBId 函数的 MIFARE 卡的4字节 UID。 就这些。

这是否足以读取 MIFARE 卡? 还有什么要做的、比如一些代码修改等?

我在 mcu.c 文件中看到了这行代码。 计时器矢量地址(TIMER0_A1_Vector)与计时器基址地址(TIMER_A0_BASE)不同、并导致 ISR_TRAP。 如何解决?

#pragma vector= TIMER0_A1_vector
_interrupt void TIMERA0_ISR (void)

   Timer_A_clearTimerInterruptFlag (timer_A0_BASE);
   *G_TIMEOUT_PTR = 0x01;
//   mcu_timerDisable ();
   _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);

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

    你好、不寻常的、

    我不知道有任何4B 类 Mifare 卡、您能不能澄清您尝试读取哪个标签? 所有 Mifare 标签均为类型2或4A。

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

    您好、Ralph、

    很抱歉、我写错了。 ISO14443-A (NFC 论坛将它们称为2类)。

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

    你好、不寻常的、

    查看源代码、虽然名称有点偏、但代码显示:

    #define TIMER0_A1_Vector (52 * 1U) /* 0xFFE8 Timer0_A5 CC1-4、TA */
    
    和
    
    #ifdef _MSP430_HAS_T0A5_
    #define TIMER_A0_BASE _MSP430_BASEADDRESS_T0A5__
    #endif
    
    

    因此、它们指向相同的计时器基址、这样就没有问题了。 我们对此没有任何问题。

    如果正确删除了 USB 功能、您应该能够从2类标签中读取 UID。

    我建议使用 Saleae 提供的逻辑状态分析器、并查看 SPI 线路以查看您是否收到发送的数据包。

    此外、您还应验证您是否还可以读取/写入 TRF7970A 的寄存器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、
    定时器设置没有问题。 感谢您的解释...
    我想问一个有关 NFC_A_getSAK 函数返回值的问题。 我有一张 MIFARE 经典卡,代码是:

    eTempNFCState = NFC_run ();

    if (eTempNFCState = NFC_DATA_EXCHANGE_Protocol)

    if (NFC_RW_getModeStatus (&sRWMode、&sRWBitrate))

    if (sRWMode.bits.bNfcA ==1)

    //此行我读取0x08作为 NFC_A_getSAK 函数的返回值。
    //因此代码不运行 T2T_stateMachine()或 T4T_stateMachine()……
    if (NFC_A_getSAK ()= 0x00)
    t2T_stateMachine();
    其他
    if (NFC_A_getSAK ()& 0x20)
    T4T_stateMachine();

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

    你好、不寻常的、

    如果您使用的是 Mifare Classic、它会使您的任务变得更加复杂。 MIFARE Classic、虽然它使用 ISO14443A 标准来获取标签 UID 等、但最终还是一种非 ISO 标准兼容技术、并被视为专有标签技术。 因此、您所使用的仅针对 ISO/NFC 标准标签设计的 NFCLink 解决方案默认无法支持 Mifare Classic。 但是、您可以根据需要将该支持集成到代码中。

    尽管如此、您唯一有意义的方法是、除了支持标准 ISO/NFC 标签之外、您还需要支持 Mifare Classic 标签。 在我支持的所有应用中、没有人需要同时支持这两者。 MIFARE Classic 往往是其自己的独立/闭环解决方案、而一般 NFC 标签读取/写入应用侧重于非专利标签。

    无论如何、我们也提供了读取 Mifare Classic 标签的完整示例、您可以参考这些示例。 如果您只需要执行 Mifare Classic、则应该能够足够轻松地将其移植到 F5529。

    包含软件示例的应用手册: http://www.ti.com/lit/pdf/sloa214

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Ralph:
    现在、正如您之前所说的、我们读取了 MIFARE 经典标签 UID。
    感谢您的建议、但是
    在 sloa214示例中、我们只读取 MIFARE 经典标签? 写入标签是否有效? 如果不是、我们如何解决这个问题...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、不寻常的、

    更正 SLOA214固件只读取 Mifare Classic 标签。 我们没有任何可供编写的资料。 如果您需要为应用程序执行此操作、则需要创建用于处理写入过程的 API。 我们提供的代码的重要部分是用于处理特殊直接模式的 TRF 驱动程序。 在这种情况下、应用写入 API 等其他命令将成为特定于应用的注意事项、需要在您的端部进行处理