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.

[参考译文] TRF7964A:使用 TRF7970ABP_RFID_Reader_Demo 代码

Guru**** 2452010 points
Other Parts Discussed in Thread: MSP-EXP430G2ET

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1117648/trf7964a-using-trf7970abp_rfid_reader_demo-code

器件型号:TRF7964A
主题中讨论的其他器件:MSP-EXP430G2ET

您好,

我使用 TRF7970ABP_RFID_Reader_Demo\NFC 中的代码 来读取 ISO14443a 卡。 当我到达函数 ISO14443A_sendSelectCmd (如下所示)时、 g_sTrfStatus 从不等于 RX_COMPLETE。 到 目前为止、它看起来 还可以。 你可以提供任何帮助吗?

附加有 MISO、CLK 和 MOSI、用于 在该功能期间进行通信。  尽管只显示了一个标签、但似乎我正在受到碰撞。 无论如何、最后一幅图像中的 MISO 似乎未正确同步。

谢谢、  

Becky

uint8_t ISO14443A_sendSelectCmd (tISO14443A_uidStatus sCascade、uint8_t * pui8UID、bool bSendCT)

uint8_t ui8Offset = 0;
uint8_t ui8Status = STATUS_FAIL;
uint8_t ui8Select = SEL_CASCADE1;

IF (sCascade =CASCADE1)

ui8Select = SEL_CASCADE1;

否则、如果(sCascade =CASCADE2)

ui8Select = SEL_CASCADE2;

否则、如果(sCascade = CASCADE3)

ui8Select = SEL_CASCADE3;

其他

返回 ui8Status = STATUS_FAIL;

G_pui8TrfBuffer[ui8Offset++]= 0x8F;//复位 FIFO
G_pui8TrfBuffer[ui8Offset++]= 0x91;//使用 CRC 发送
G_pui8TrfBuffer[ui8Offset++]= 0x3D;//连续写入
G_pui8TrfBuffer[ui8Offset++]= 0x00;//数据包长度(以字节为单位)-发送字节长度的上半字节和中半字节
G_pui8TrfBuffer[ui8Offset++]= 0x70;//数据包长度(以字节为单位)-发送字节长度的较低半字节和不完整半字节
G_pui8TrfBuffer[ui8Offset++]= ui8Select;//选择命令;可以是0x93、0x95或0x97
G_pui8TrfBuffer[ui8Offset++]= NVB_FULL;//有效位数
if (bSendCT == true)

G_pui8TrfBuffer[ui8Offset++]= 0x88;// CT
G_pui8TrfBuffer[ui8Offset++]=* pui8UID;// UID 字节
G_pui8TrfBuffer[ui8Offset++]=*(pui8UID + 1);
G_pui8TrfBuffer[ui8Offset++]=*(pui8UID + 2);
G_pui8TrfBuffer[ui8Offset++]=(0x88 ^* pui8UID ^*(pui8UID + 1)^*(pui8UID + 2)));//计算 BCC 字节

其他

G_pui8TrfBuffer[ui8Offset++]=* pui8UID;// UID 字节
G_pui8TrfBuffer[ui8Offset++]=*(pui8UID + 1);
G_pui8TrfBuffer[ui8Offset++]=*(pui8UID + 2);
G_pui8TrfBuffer[ui8Offset++]=*(pui8UID + 3);
G_pui8TrfBuffer[ui8Offset++]=(* pui8UID ^*(pui8UID + 1)^*(pui8UID + 2)^*(pui8UID + 3));//计算 BCC 字节

TRF79xxA_writeRaw (&g_pui8TrfBuffer[0]、ui8Offset);//发出选择命令

G_sTrfStatus = TRF79xxA_waitRxData (5、15);// 5毫秒 TX 超时、15毫秒 RX 超时

if (g_sTrfStatus = RX_COMPLETE)

ui8Status = STATUS_SUCCESS;

G_ui8Iso14443aSAK = g_pui8TrfBuffer[0];

其他

//不执行任何操作

返回 ui8Status;

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

    Becky、您好!

    此函数在循环内调用、这会增加级联级别。 对于所有级联级别、是否在所有环路中都出现此问题?

    此致、

    Andreas。

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

    尊敬的 Andreas:  

    是的、我看到它位于 while 循环中、但由于此函数不返回 STATUS_SUCCESS、因此它会退出循环。 您是指递归调用吗?

    稍后在 ISO14443A_selectTag 中、该函数会调用自身。

    但  ISO14443A_sendSelectCmd 绝不会超过 CASCADE1。 它永远不会前进-只需重试级联1。

    unsigned char ISO14443A_selectTag (unsigned char ui8Command)

      。
      。
      。

      while (sUidProgress!= UID_COMPLETE)

      {
         sCollisionStatus = ISO14443A_sendAnticolisionCmd (sUidProgress、NVB_init、&g_pu8CompleteUid[0]);//调用防冲突循环函数

        //处理响应
        if (sCollisionStatus = no_collision)
        {
          //如果需要发送 CT 字节,则存储 UID 并保持跟踪
          bSendCT = ISO14443A_storeUID (sUidProgress、&g_pui8TrfBuffer[0]);

          //发出选择命令
          if (ISO14443A_sendSelectCmd (sUidProgress、&g_pui8CompleteUid[g_ui8UidPos]、bSendCT)//发出选择命令
          {
            。
            。
            。
          }
          其他
          {
            //中断以达到重试循环
            sUidProgress = UID_INCOMPLETE;
            中断;
          }
        }
         。
        。
        。
      }

      。
      。
      。

      if (sUidProgress == UID_INCOMPLETE)

      {//发生了一些错误,尝试再次查找标签

        IF (g_ui8RecurionCount < g_ui8MaxRecurviseCalls)
        {
          G_ui8RecurionCount++;
          ui8Status = ISO14443A_selectTag (ui8Command);
        }
        其他
        {
          G_ui8RecurionCount = 0;//重置防冲突循环的递归计数
          返回 ui8Status;
        }
      }

      。
      。
      。

    //结束 ISO14443A_selectTag


    .Best 此致、  

    Becky

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

    Becky、您好!

    我建议分析函数调用 ISO14443A_sendSelectCmd 内部的 UID、并找出为什么此函数调用在状态成功时永不结束。 是否完全接收到 UID? 是否发生 RX 中断? 等等...

    BTW、您使用的是哪种 MCU 硬件? MSP-EXP430G2ET LaunchPad?

    此致、

    Andreas。

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

    我在产品的硬件上使用 Microchip PIC18F67J11。

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

    我提出这一要求是因为在这种情况下、可能值得购买 MSP-EXP430G2ET LaunchPad 并运行原始代码以供参考并比较结果。

    我只是头脑风暴...

    此致、

    Andreas。

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

    这就是我要尝试分析的内容。  

    我发送的 SPI 图片来自  ISO14443A_sendSelectCmd 内部 、来自该函数调用  

    TRF79xxA_writeRaw (&g_pui8TrfBuffer[0]、ui8Offset);

    直到此行之后

    G_sTrfStatus = TRF79xxA_waitRxData (5、15);

    我在发送后接收 TRF79XXA_IRQ_STATUS_TX_COMPLETE、但最终 接收 TRF79XXA_IRQ_STATUS_NO_RESPONSE。 这就是我要尝试弄清楚的。 什么会导致 TRF 发送 NO_RESPONSE? Mifare 卡没有响应 TRF?

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

    Becky、您好!

    我建议将参考解决方案与 MSP-EXP430G2ET LaunchPad 进行比较。 这样、您就可以排除标签和参考软件等多种问题。 您可以比较固件参数和时序。 否则、调试将非常困难。

    此致、

    Andreas。

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

    尊敬的 Andreas:  

    我已申请 EVM 以便进行调试。 与此同时 ,我已经下载了 IDE 并尝试编译该项目,但显然没有正确的编译器,或者缺少一些内容。 我不知道我需要什么。

    您能帮助解决这个问题吗?

    谢谢、  

    Becky

     

     

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

    Becky、您好!

    你是对的。 我只是注意到 CCS 版本12似乎不支持这个旧代码项目。

    我不知道具体支持哪个版本中断、但我能够使用计算机上仍然存在的 CCS 版本10.2编译代码。 但还有一些额外的步骤是必要的,我稍后将对此进行解释。 但首先、我建议安装 CCS 10.2版。 您可以在 CCS 下载部分按"View all versions"找到较旧版本:

    然后向下滚动到版本10.2.0.00009并选择它。 然后、您可以下载相应的安装程序文件。

    确保在自定义安装设置期间选择"MSP430超低功耗 MCU"支持。

    CCS 10.2安装完成后、您必须将旧的 MSP430编译器版本4.3.3添加到 CCS 中。

    从菜单:Help - Install New Software...

    然后从下拉列表中选择"Code Generation Tools Update"页面:

    取消选中"Show only the latest version of available software"(仅显示可用软件的最新版本)框(1.)、然后展开"TI Compiler Updates"(TI 编译器更新)(2)前面的箭头:

    向下滚动直到找到"MSP430编译器工具"-版本4.3.3、选择它并按下下一步:

    安装后、您可以将"TRF7970ABP_RFID_Reader_Demo"项目导入到 CCS 工作区并进行编译。

    如果您需要进一步的帮助、请告诉我。

    此致、

    Andreas。

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

    尊敬的 Andreas:

    谢谢您、现在我能够成功构建项目。