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:读取多个块- RFID 读取器演示 sloc297

Guru**** 2455560 points
Other Parts Discussed in Thread: TRF7970A, MSP-EXP430G2ET

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1050102/trf7970a-read-multiple-blocks---rfid-reader-demo-sloc297

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

您好!

我想知道使用 TRF7970A 和 ISO15693标准读取 NFC 标签的多个块的最佳方式是什么。 我使用 RFID 读取器演示(sloc297)作为参考、并注意到提供了各种功能:NFC_appIso15693ReadTagNFC_appIso15693ReadExtendedTag ISO15693_sendReadMultipleBlocks

//RFID_Reader_Demo sloc297, File: nfc_app.c
//Lines 419-421
		{
			NFC_appIso15693ReadTag(0x02 | ui8AddressedFlag);					// Read an ISO15693 tag
//			NFC_appIso15693ReadExtendedTag(0x0A | ui8AddressedFlag);			// Read an ISO15693 tag which has extended protocol implemented
//			ISO15693_sendReadMultipleBlocks(0x22,0x00,25);						// Example to read 25 blocks starting @ Block 0 from a tag which supports Read Multiple Block command
		}

我想知道在以下情况下、最佳程序是什么:

  1. 读取少量块(例如5个块)。
    调用 ISO15693_sendReadSingleBlock 五次与使用 ISO15693_sendReadMultipleBlocks (0x22、0x00、0x05)之间是否有任何区别
  2. 读取大量块。
    我使用 的是 hid vigo 6B0201 NFC 标签、它有52个块(1个块- 4个字节)。 我尝试使用函数 ISO15693_sendReadMultipleBlocks (0x22、0x00、51)读取整个标签、但实际上只能读取总共47个块(例如0至46、1至47、2至48)。 一旦尝试使用该函数读取更高数量的块、该函数将返回 STATUS_FAIL。为什么会发生这种情况? 一次可以读取的数据是否最大?
    在这种情况下、我想我可以使用 NFC_appIso15693ReadExtendedTag 函数、该函数会读取块直到没有收到响应。 但是、也会出现相同的问题、并且似乎无法读取数据。

非常感谢。

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

    您好、JBF:

    在代码中可以看到、RX 数据的缓冲区被定义为100字节。 我想知道为什么您能够读取47个具有4个字节的块。 命令 NFC_appIso15693ReadExtendedTag 被执行为一个 ReadSingleBlock 命令循环、这对您没有任何好处。 我将使用多 个 ISO15693_sendReadMultipleBlock 命令、例如20个块、以获得完整的存储器、这似乎是最快的方法。

    此致、

    Helfried

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

    您好、Helfried、

    感谢您的回答。

    RX 数据缓冲区的大小在 trf79xxa.h 中定义为 NFC_FIFO_SIZE、对吧?

    对于我的项目、我使用的是 nRF5340控制器、但我还有 MSP-EXP430G2ET Launchpad。 我将为这两个平台测试 ISO15693_sendReadMultipleBlock 函数。

    以下是我的结果和评论:

    MSP-EXP430G2ET (512字节 RAM、NFC_FIFO_SIZE = 100)+ RFID 读取器演示 sloc297

    1. 我最多可以读取40个块。 如果1个块有4个字节、RX 数据有100个字节、这是怎么可能的? n´t 我可以读取的块的最大数量应该是25 (25Blocks*4bytes=100字节)吗?

    2. 我已经尝试将 NFC_FIFO_SIZE 增加到一个更高的值(例如200)、但是构建过程失败、这是因为程序将不能放入可用的存储器中。 我认为这是有道理 的、因为根据数据表、launchpad 具有512字节的 RAM。 在这种情况下、我可以按照您的建议使用多个 ISO15693_sendReadMultipleBlock 命令。

    nRF5340 (512KB RAM)+基于读取器演示的自有应用

    考虑到我在这里还有多少 RAM、我继续将 NFC_FIFO_SIZE 设置为256。 在这种情况 下、我假设值得增大 RX 数据缓冲区大小、只需调用一次 ISO15693_sendReadMultipleBlock 即可。 还是我错了?

    5.我认为所需的缓冲区大小等于要读取每个块*字节的块数。 在本例中、52个块、每个4个字节->  但是、FIFO 大小为208时、多块读取失败。 我假设需要一些额外的字节、因此它可以在大小为256的情况下工作?

    此致。

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

    您好、JBF:

    感谢您提供更多信息。 是的、定义为 NFC_FIFO_SIZE。 为什么这是用40个区块来工作的,听起来就像奇迹一样。 将更多内容定义为127字节 FIFO 大小将不起作用、因为我看不到在 FIFO 已满时处理事件并保存当前 RX 数据的任何代码。

    如果您可以接受、我认为最好使用解决方案通过 ReadMultibleBlocks 3遍读取数据。

    此致、

    Helfried