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.

[参考译文] DLP-7970ABP:TRF7970A 中的单个库存命令后无 IRQ

Guru**** 2455560 points
Other Parts Discussed in Thread: TRF7970A

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1043648/dlp-7970abp-no-irq-after-single-inventory-command-in-trf7970a

器件型号:DLP-7970ABP
主题中讨论的其他器件:TRF7970A

您好!

我正在使用 TRF7970A、在尝试读取 NFC 标签时遇到一些问题。

我的目标是能够使用 TRF7970A 和我的定制开发板读取 ISO 15693标签。 为此、我使用阅读器应用 DLP-7970ABP 示例代码(修订版 C) 作为参考。

TRF7907A 按如下方式连接到我的开发板:

TRF7970A 引脚 Nordic nRF5340 DK
VCC 3V
DATA_CLK SCLK
MISO MISO
MOSI MOSI
英文

GPIO 引脚

EN2.

接地

SS GPIO 引脚
IRQ GPIO 引脚(配置为中断)
很好 接地

工作情况

我为 MCU-TRF7970A 通信选择了具有 SS (模式1、4MHz)的 SPI。 按照初始化步骤(数据表的第6.11章)进行操作后、通信似乎正常、因为我可以读取/写入寄存器并检查它们的值。 例如、我可以写入一个寄存器、然后立即读取其值以确认读取的值与写入的值对应。 我还可以在软件初始化直接命令之后读取寄存器值、并检查这些值是否与数据表的表6-21中显示的值相匹配。

问题

下一步是将读取器应用移植到我的定制开发板。 为此、我将 MCU-TRF7970A SPI 通信的实现方案集成到了读取器应用中、以便保持相同的结构并尽可能少地进行修改。 我现在面临的问题是、发送单个插槽资源清册命令后不会出现 IRQ、如下图所示。 我甚至尝试自己读取寄存器、但值仍然为0x00。

我通过 MCU 和 TRF7970A 之间的通信连接系统输出、这对应于单次执行函数 NFC_findTag (NFC_app.c)和.csv 文件中的逻辑分析仪数据(更新.Sal 文件失败)。

非常感谢。

此致。

e2e.ti.com/.../McuTrf7970aCommunication.txt

e2e.ti.com/.../NFCfindTag.csv

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

    大家好、我发现我的代码有问题。

    我在 SPI_Rawwrite 函数中遇到错误、并且发送了以下资源清册命令:0x3F、0x8F、0x91、0x3D、0x0、 0x30、0x6、0x1、0x0、这是错误的、 因为不应发送值0x3F。 删除此值后、在发出库存命令后、SS 线路变为高电平~1.6ms 后、中断发生。

    我有几个后续问题:

    1. TRF7970A 数据表规定:

      IRQ 状态寄存器读取(0x6C)产生0x80、这表示 TX 确实完成。 之后是虚拟时钟。

      然而、在读取器应用中、TRF7970A (版本70)只读取 IRQ 状态寄存器(0x4C)

      //Function in trf79xxa.c file from Reader Application Example
      
      uint8_t TRF79xxA_readIrqStatus(void)
      {
      	uint8_t pui8Value[2];
      
      	pui8Value[0] = TRF79XXA_IRQ_STATUS;
      #if (TRF79xxA_VERSION == 70)
      	SPI_readSingle(pui8Value);
      #elif (TRF79xxA_VERSION == 60)
      	SPI_readCont(pui8Value,2);		// Dummy read to properly clear IRQ Status for TRF796xA devices (except 64A)
      #endif
      
      	return pui8Value[0];
      }

      我使用 MSP430 Launchpad 测试了读取器应用、单字节读取似乎可以正常工作。 但是、TRF7970A 的正确过程是什么?

    2. TRF79xxa_irqHandler 包含一个 DO、条件(IRQ_PORT & IRQ_PIN)=IRQ_PIN。 这是否意味着只要 IRQ 引脚处于激活状态、环路就会被执行? 这有什么意义? n´t 执行是否应取决于 IRQ 状态?


      //Function in trf797xxa.c file from Reader Application example
      
      #pragma vector = PORT2_VECTOR
      __interrupt void
      TRF79xxA_irqHandler(void)							// interrupt handler
      {
      	uint8_t ui8IrqStatus;
      	STOP_COUNTER;							// stop timer mode
      	g_ui8IrqFlag = 0x01;
      
      	do
      	{
      		IRQ_CLR;							// PORT2 interrupt flag clear
      		// IRQ status register has to be read
      		ui8IrqStatus = TRF79xxA_readIrqStatus();
      		if(ui8IrqStatus == 0xA0)				// TX active and only 3 bytes left in FIFO
      		{
      			g_sTrfStatus = TX_WAIT;
      			break;
      		}
      		else
      		{
      			TRF79xxA_processIRQ(&ui8IrqStatus);
      		}
      	} while((IRQ_PORT & IRQ_PIN) == IRQ_PIN);
      	__bic_SR_register_on_exit(LPM0_bits);
      }


    3. 我在当前实施中测试了读取 NFC 标签的情况、并观察到以下情况:
      1. 无 NFC 标签:在实施 NFC_appIso15693 (NFC_app.c)之后、会发生两个 IRQ。
        发出资源清册命令后、第一个 IRQ 发生、IRQ 状态为0x80 (单字节读取- 0x4C)。 由于没有 NFC 标签、目录失败并且应用程序用完全防冲突例程进行搜索、此例程也发出一个目录命令。 对于第二个 IRQ、IRQ 状态也是0x80 (同样、单字节读取- 0x4C)。 到目前为止、非常好。



      2. 使用 NFC 标签:第三个 IRQ 发生、我认为这是正常的、因为 NFC 标签"被检测到"。 但是、所发生的情况似乎不正确:
        1. IRQ1发生且 IRQ 状态寄存器被读取(0xC0)。 查看数据表后、我了解到 Tx (Bit7 Set)和 Rx (Bit6 Set)都在进行中。
          在处理中断(TRF79xxa_processIRQ、tf79xxa.c)时、一切似乎都出错、因为执行处于"其他"条件(中断寄存器未正确设置)、FIFO 在 TX 之后复位。
          IRQ 状态应为0x80和0x40、对吧?
        2. IRQ2在第一个 IRQ2 ~1.3ms 后出现。 这发生在上述点所述的 FIFO 复位之后。
        3. 由于无法找到 NFC 标签、IRQ3由于防冲突例程而发生。 IRQ 状态为0x80。

    有什么想法我的实施可能会有什么问题?

    此致。

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

    您好、JBF:

    在分析日志文件和 csv 文件后、我发现您已在连续模式(0x3F)下寻址 FIFO、但随后您发送直接命令0x8F 和0x91。 这必须在对 FIFO 寻址之前完成。  

    请参阅 sloc297的 SPI 捕获屏幕截图(ISO15693):

    此致、

    Helfried

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

    您好、JBF:

    我看到您已经发现缺少 IRQ 的问题。 我在发送回复时没有看到您的答案。

    要回答您的新问题:

    1、仅旧芯片版本需要虚拟读取。 TR7970A 不需要该电流。

    2.寄存器和 IRQ 引脚中 IRQ 标志的行为不同。 请参阅数据表中 IRQ 状态寄存器的说明。 标志在周期开始时被置位、但 IRQ 信号在周期结束时被置位。

    3.老实说,我没有明白这一点。 如果 我从电路板的逻辑分析仪发送 SPI 日志、是否会对您有所帮助?

    此致、

    Helfried

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

    您好、Helfried、

    感谢您的留言。

    关于第3点、我的问题是 IRQ 状态寄存器是0xC0。 我后来在 这里发现 、0xC0的状态意味着 Tx 事件的处理速度不够快。

    我认为我设法解决了这个问题、因为 IRQ 状态寄存器现在是0x80表示第一个中断、而0x40表示第二个中断。 但是、如果您可以共享 SPI 日志以将其与我的日志进行比较、我仍不胜感激。

    谢谢!

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

    您好、JBF:

    您可以修复 IRQ 问题。 即使 IRQ 的描述是一样的、但是 TRF7970A 的正确 FAQ 文档将是:

    https://www.ti.com/lit/sloa246

    为了便于参考、我在现场附上了两个使用 ISO15693标签录制的文件。 固件在编译时仅启用 ISO15693、并从固件开始记录:

    e2e.ti.com/.../ISO15693_5F00_read_5F00_Tag_5F00_sloc297_5F00_UART_5F00_out.xlsx

    e2e.ti.com/.../ISO15693_5F00_read_5F00_Tag_5F00_sloc297_5F00_UART_5F00_out_5F00_Logicanalyzer_5F00_Export.csv

    此致、

    Helfried