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**** 2538930 points
Other Parts Discussed in Thread: TRF7960A, TRF7970A

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/568872/trf7960a-when-the-trf7960a-is-able-to-detect-tags

器件型号:TRF7960A
主题中讨论的其他器件: TRF7970A

您好!  

我´m Joseba Arguinzoniz。 我在这里提出了有关 TRF7960A 实施的更多问题、感谢您的帮助。 I μ A´m TRF7960A、MCU STM32F101。 我´m´m 代码、我使用建议代码 Sloc251的一部分。 问题是、我不知道 TRF 在初始化之后何时能够检测到标签。 我将执行以下步骤:

int main (空)

uint8_t writing[4];

uint8_t 命令[4]  

步骤1:打开射频

COMMAN[0]= CHIP_STATE_CONTROL;//0x00
COMMAN[1]= CHIP_STATE_CONTROL;//0x00
Trf796xReadSingle (&command[1]、1);
命令[1]&= 0x3F;
命令[1]|= 0x20;
Trf796xWriteSingle (命令、2);

步骤2:写入 ISO 控制  

//Escritura en registro 0x01
写入[0]= ISO_CONTROL;
WRITE[1]= ISO_CONTROL;//0x02
write[1]&= 0xDF;// BIT5 A 0参数建立的 RFID 模式
Trf796xWriteSingle (写入、2);

ISO_CONTROL &= 0x1F;

//Escritura en registro 0x0D
WRITE[0]= IRQ_MASK;
写入[1]= 0x3E;
Trf796xWriteSingle (写入、2);

//Escritura en registro 0x09
// nota:elegir 模量 OOK/ASK (0x21/0x20)
WRITE[0]=调制器控制;
WRITE[1]= 0x31;//// OOK 100% 6.78MHz
Trf796xWriteSingle (写入、2);

//Escritura en registro 0x06
WRITE[0]= TX_PULSE_LENGTH_CONTROL;
写入[1]= 0x80;// 9.44us
Trf796xWriteSingle (写入、2);

//Escritura en registro 0x07
WRITE[0]= RX_NO_RESPONSE_WAIT_TIME;
写入[1]= 0x14;// 755us
Trf796xWriteSingle (写入、2);

//Escritura en registro 0x08
WRITE[0]= RX_WAIT_TIME;
写入[1]= 0x1F;// 293us
Trf796xWriteSingle (写入、2);

//Escritura en registro 0x0A
写入[0]= RX_SPECIAL _SETTINGS;
写入[1]= RX_SPECIAL_SETTINGS;
Trf796xReadSingle (&write[1]、1);
write[1]&= 0x0F;
write[1]|= 0x40;//带通200kHz 至900kHz
Trf796xWriteSingle (写入、2);

//Escritura en registro 0x10
WRITE[0]=特殊函数;
write_1]=特殊函数;
Trf796xReadSingle (&write[1]、1);
write[1]|= 0xEF;//位4 A 0->已建立时间网格
Trf796xWriteSingle (写入、2);

******** 在这里、TRF 应该能够检测到 Tang 并读取标签信息、对吧?

while (1)

   if (IRQ_STATUS==1)

   {

    write[1]|= 0x0C;//带通200kHz 至900kHz  
   Trf796xReadSingle (WRITE、1);

   }

我没有编写更多代码、因为我首先要检测标签。 查看建议的代码 SLOC251、接下来的步骤有三个:

Iso15693Anticollision (&buf[20]、0);//发送库存请求

Trf796xTurnRfOff ();

Trf796xResetIrqStatus();

我不n´t 这些步骤是否必须检测标签、o 仅用于避免可能出现的错误、例如、同时检测两个卡。 这是正确的、还是我应该实现这些功能?

谢谢、我想问您的答案、

Joseba Arginzoniz。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您必须发送命令才能读取标签。 选择一个协议(看起来 ISO15693可能是您的首选协议)、然后发送库存命令。 (从单槽开始)
    请参阅第34页、位于=> www.ti.com/.../trf7960a.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jiseba 您好!

    正如 Josh 提到的、您现在需要发送一些命令来读取标签。 TRF7960A 示例代码在这个过程中有点笨拙和过时、所以也许您还可以查看我们为 TRF7970A 提供的一些代码、这些代码定义的过程更加清晰、而且还有更多的注释。 此较新的代码库可帮助指导您进行此实现: www.ti.com/.../sloc297

    请注意、由于这适用于较新的器件(TRF7970A)、因此有一些寄存器设置与您的设置略有不同、因此请勿介意寄存器设置。

    只需按照已发出命令的流程以及在何时配置器件和何时发送命令等方面如何处理响应
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    n´t 您的回答、很抱歉您之前没有回答、因为我一直在尝试您的建议、但我仍然无法找到答案。 查看第35页图6-20中的 TRF7960a 数据表、我使用在0x8F 0x91 0x3D 0x00 0x30 0x26 0x01 0x00中发出的资源清册命令。 法院是以下步骤:

    int main (空)

    uint8_t writing[4];

    uint8_t 命令[4]  

    步骤1:打开射频

    COMMAN[0]= CHIP_STATE_CONTROL;//0x00
    COMMAN[1]= CHIP_STATE_CONTROL;//0x00
    Trf796xReadSingle (&command[1]、1);
    命令[1]&= 0x3F;
    命令[1]|= 0x20;
    Trf796xWriteSingle (命令、2);

    步骤2:写入 ISO 控制

    步骤3:写入库存命令
              0x8F 0x91 0x3D 0x00 0x30 0x26 0x01 0x00

    步骤4:检测到 IRQ

    步骤5:发送 IRQ 状态(0x0C)以了解 IRQ 的产生原因

    步骤6:读取最后一步请求的解释并执行虚拟读取

           我接收到的第一个字节为0x80 ->这意味着 TX 完成

    步骤7:根据 IRQ 状态应答

    否则、如果(* pui8_IrqStatus = TRF796x_IRQ_STATUS_TX_COMPLETE)//BIT7 0x80
      {
          Trf796xReset();
       }

    步骤8:检测到 IRQ

    步骤9:按照 第36页的图6-22所示读取寄存器0x1C

           接收到的第一个字节为0x20 ->这意味着 FIFO 是高电平或低电平

    步骤10:根据0x1C 寄存器的应答、它指定了保存在 FIFO 中的字节的计数器。 因此、您建议的 TRF7970代码使用下一个代码:

    否则、如果(* pui8_IrqStatus = TRF796x_IRQ_STATUS_FIFO_HIGH_OR_LOW)//BIT5 0x20
       {
          //确定 FIFO 中有多少字节
          G_ui8FifoRxLength = 0x7F &* pu8_IrqStatus;    
          
          IF (FIFO_SIZE >(g_ui8FifoOffset+g_ui8FifoRxLength))
          {
             //从 FIFO 读取以将其清空
             G_ui8TrfBuffer[g_ui8FifoOffset]= FIFO;
             Trf796xReadCont (&g_ui8TrfBuffer[g_ui8FifoOffset]、g_ui8FifoRxLength);   //从 FIFO 读取所有接收到的字节
             G_ui8FifoOffset = g_ui8FifoOffset + g_ui8FifoRxLength;                //调整缓冲区索引
          }
          其他
          {
             G_sTrf797xStatus = PROTOCOL_ERROR;
             返回;
          }
          
          G_ui8FifoRxLength = TRF796x_FIFO_STATUS;
          Trf796xReadSingle (&g_ui8FifoRxLength);   //确定 FIFO 中剩余的字节数
          G_ui8FifoRxLength = 0x7F & g_ui8FifoRxLength;

          IF (g_ui8FifoRxLength > 0)
          {
             G_sTrf797xStatus = RX_WAIT_EXTENSION;
          }
          其他
          {
             G_ui8FifoRxLength = g_ui8FifoOffset;
             G_sTrf797xStatus = RX_COMPLETE;
             返回;
          }

    步骤11:接收另一个交叉存取、但当我读取寄存器0x0C 时、我接收到一个0x08

    在第n´t 步中、应产生 IRQ、应答0x40、表示 RX 已完成、但这种情况确实发生。 中断发生、但使用0x08再次响应、重复相同的过程。 我的n´t 不会生成这个环路、我想这是由于 TRF、他的缺点是错误的。   当我尝试过这种情况时、我尝试过将读卡器上方的卡传递到读卡器上方、但没有通过读卡器、获得相同的结果。

    我认为我做了一些错误、管理了中断或 TRF 提供的数据。 您是否发现了问题??

    感谢您的帮助、


    Joseba

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

    Jiseba 您好!

    此时、您需要开始使用逻辑分析仪分析 SPI 线路、并遵循整个事务链。 我建议您使用 Saleae 等工具来完成此操作、因为您可以将其配置为捕获足够长的数据、以便获取事务的完整历史记录以及自动字节解码和时序。

    您所说的重点超出了我所能说的代码的正确或错误、我需要查看整个链的逻辑捕获和时序来确定正在发生的情况。