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.

[参考译文] TRF7960A:如何使用 TRF7960A

Guru**** 2595770 points
Other Parts Discussed in Thread: TRF7960A

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/572639/trf7960a-how-to-use-trf7960a

器件型号:TRF7960A

您好!

I μ A´m 带 STM 微控制器的 TRF7960A。 问题是我使用了推荐的代码 SLOC251来读取标签。 TE 通信是正确的、但我始终到达相同的点、TRF 会持续生成中断、当我读取寄存器0x0C 时、TRF 会以0x80进行应答。 这n´t 着 Tx 通信已完成、但不要读取标签。  

您知道吗?我如何在不使用建议的代码或无需实施代码的情况下初始化 TRF、在默认模式下使用 TRF、只使用协议 ISO15693来启用读取标签的直接命令?

我的 MCU 在3V3下工作、通信是通过2MHz 的 SPI 进行的。  

之后、当读取器读取一个标签时、就会生成一个中断。 在此之后、我应该读取标签的 UID、如何执行此操作?

 谢谢

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

    "您知道如何在不使用建议的代码或无需实施代码的情况下初始化 TRF、在默认模式下使用 TRF、只使用协议 ISO15693来启用读取标签的直接命令?"

    这是不可能的。 TRF7960A 是一款需要 MCU 驱动所有通信的收发器。 没有"指令标记"直接命令。 您必须配置器件、向其发送数据包、处理 TX 中断、处理 RX 中断(如果接收到)、然后从 FIFO 中读出标签数据。 无法规避这些步骤。 如果您需要一个只需说"Read ISO15693 tag"的器件、TI 将无法为您提供帮助、因为我们不会为此提供黑盒解决方案。 对于我们的器件、MCU 必须运行软件堆栈并处理与器件通信的负担、包括及时处理中断。 这就是我们提供固件示例供客户利用的原因。

    "之后、当读取器读取标签时、会生成一个中断。 之后、我应该读取标签的 UID、我该怎么做?"

    如果您及时处理 TX 完成中断(理想情况下在接收时立即处理)、那么当您收到第二个中断时、如果您从寄存器中读出、则该中断应为0x40或0x60。 0x40表示 RX 已完成、0x60表示 RX 正在进行、FIFO 几乎已满、必须立即读出。 此时、您将读取 FIFO 状态寄存器(0x1C)并查看 FIFO 中有多少字节(有关详细信息、请参阅 TRF7960A 数据表的第61页)、然后使用连续读取直接命令从 FIFO 中读出多少字节。

    另请参阅 TRF7960A 数据表的第34-37页、其中显示了读取 ISO15693 UID 的分步过程、包括 SPI 捕获、 如果您可以获得逻辑状态分析仪或示波器来捕获相同的信号、则可以将其用作参考以与您自己的系统进行比较。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    查看代码 SLOC251:

    _interrupt void
    Trf796xPortB (空)                      //中断处理程序

       u08_t IRQ_STATUS[4];
       
       IRQ_FLAG = 0x02;

       STOP_COUNTER;                      //停止计时器模式
       
       操作
       {
          IRQ_CLR;                      //端口2中断标志清除
          
          Trf796xReadIrqStatus (IRQ_STATUS);

          //必须读取 IRQ 状态寄存器

          if (* IRQ_STATUS = 0xA0)             // TX 有效、FIFO 中只剩下3个字节
          {
             中断;
          }

          Trf796xISR (&IRQ_STATUS[0]);
       } while ((IRQ_PORT & IRQ_PIN)=IRQ_PIN);
       //__LOW_POWER_MODE_OFF_ON_EXIT ();

    当检测到一个中断时、IRQ 状态被读取。 如果 IRQ_STATUS=0x80、函数 Trf796xISR (&IRQ_STATUS[0])应该管理这个信息。 查找此函数:

    无效
    Trf796xISR (u08_t * IRQ_STATUS)
    {    
    ifdef ENABLE14443A
       u08_t   len;    
    #endif

    #IF DBG
       UartPutByte (* IRQ_STATUS);
    #endif
       if (* IRQ_STATUS = 0xA0)         // BIT5和 BIT7
       {                         // TX 有效、FIFO 中只剩下3个字节
          I_reg = 0x00;
    #IF DBG
          UartPutChar ('.');         // FIFO 填充在发送函数中完成
    #endif
       }

       否则、如果(* IRQ_STATUS = BIT7)//0x80
       {                         // TX 完成
          I_reg = 0x00;
          Trf796xReset();             // TX 后复位 FIFO  
    #IF DBG
          UartPutChar ("T");
    #endif
       }

    指示 TX 完成、下一步是复位 FIFO。 我n´t FIFO 应该被删除、因为如果 FIFO 为空、那么读取器不能用0x40或0x60进行应答、不能?

     ´m、第34-37页中显示的示例有点复杂、我将解释我的理解。 在图6-20的资源清册命令之后、 在图6-21中检测到 IRQ、IRQ 状态寄存器指示0x80 (TX 完成)、然后 FIFO 被复位。 复位后、 如果一个标签在该字段中、则需要另外一个 IRQ。 此 IRQ 应以0x60或0x40进行应答。

    我看到的一个缺点是在读取 IRQ 状态后使用直接命令0x0F 复位会产生上述问题。 另一个问题是、从读取器开始工作正常、因为它在第一次中断后以0x80进行响应。 它应该能够检测响应。 是否可以通过直接命令(启用接收器0x17)禁用该字段并手动激活该字段? 在本例中、我应该何时运行此命令? 在器件初始化过程中或在我们在第一次中断之前进行的复位之后?  我在重置后使用了此命令、但仍使用了未读卡、我建议这样做吗?

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    约瑟巴-
    请参阅此处的第2页和第6页- www.ti.com/.../sloa140.pdf

    此处需要复位 FIFO、因为当使用 SPI 时、器件不会自行复位(这是正常情况、这就是您可能认为它很奇怪但不是这样的原因)、我们称之为勘误表、 在这些情况下,这种 FIFO 重置方法就是解决它的方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看到的一个缺点是在读取 IRQ 状态后使用直接命令0x0F 复位会产生上述问题。 另一个问题是、从读取器开始工作正常、因为它在第一次中断后以0x80进行响应。 它应该能够检测响应。 是否可以通过直接命令(启用接收器0x17)禁用该字段并手动激活该字段?

    • 否、RESET 命令仅是 FIFO 的复位、而不是整个器件的复位。 如果您执行软初始化命令(0x03)来清除寄存器设置、则 RF 字段将保持开启状态、除非您更改寄存器0x00的设置。

    在本例中、我应该何时运行此命令? 在器件初始化过程中或在我们在第一次中断之前进行的复位之后?

    • ENABLE 接收器命令仅用于需要发送 ISO15693槽位标记时的防冲突、或在极少数情况下用于高级 NFC 操作、以便遵循 NFC 论坛合规性测试(远远超出您的用例)

     我在重置后使用了此命令、但仍使用了未读卡、我建议这样做吗?

    • 这可能会对您的尝试结果产生负面影响。

    我无法告诉您发生了什么错误、直到我获得某种 SPI 捕获解码了哪些数据以及传输之间的时序。 如果没有这一点,就很难提供帮助。 如果您得到了 Saleae 并从中提供了逻辑捕获、我将能够快速找到您的问题并帮助您解决。 但我现在在这里盲了、因此无法准确地确定流程中出现的问题。 我可以说的是、我们的代码在正确执行时正常工作、您所引用的项目将加载到我们的所有 TRF7960AEVM 中并读取所有 ISO15693标签。 该过程的某些步骤或步骤在您的 MCU 上无法正常工作、但如果看不到 SPI 捕获、我还能说什么了。