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:TRF7960–无法使用 ISO15693 获取随机数命令来检索随机数 (ICODE SLIX2)

Guru**** 2862450 points

Other Parts Discussed in Thread: TRF7960, TRF7960A

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1634181/trf7960a-trf7960-unable-to-retrieve-random-number-using-iso15693-get-random-number-command-icode-slix2

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

尊敬的 Texas Instruments 支持团队:
我们目前正在使用 TRF7960 进行 RFID 通信、并尝试使用 ISO15693“获取随机数“命令从 NXP ICODE SLIX2 标签中检索一个随机数。
然而、尽管命令似乎已传输且收到响应、但返回的随机数始终为 0x0000。
详情如下。

TRF7960 寄存器配置
TRF7960 寄存器的配置如下:
寄存器[0] = 0x31
寄存器[1] = 0x02
寄存器[2] = 0x00
寄存器[3] = 0x00
寄存器[4] = 0xC1
寄存器[5] = 0xBB
寄存器[6] = 0x00
寄存器[7] = 0x0E
寄存器[8] = 0x1F
寄存器[9] = 0x01
寄存器[10]= 0x40
寄存器[11]= 0x80
寄存器[12]= 0x00
寄存器[13]= 0x3E
寄存器[14]= 0x00
寄存器[15]= 0x40


2.传输的命令(获取随机数–ICODE SLIX2)
发送以下命令序列:
0x8F //复位 FIFO
0x91 //与 CRC 一起发送
0x3D //连续写入
0x00 //数据包长度(高/中半字节)
0x30 //数据包长度(低半字节)
0x02 // ISO15693 标志
0xB2 //获取随机数命令 (ICODE SLIX2)
0x04 // IC 制造商代码 (NXP = 0x04)


3.中断和 FIFO 行为


发送命令后、会发生中断。
读取 IRQ 状态寄存器 (0x0C/0x6C) 返回:
0x80// 由于 TX 结束而设置 IRQ

 

接下来、写入复位 FIFO (0x0F/0x8F)。


发生另一个中断。
读取 IRQ 状态寄存器 (0x0C/0x6C) 返回:
0x40 //由于 RX 启动而设置 IRQ

 

读取 FIFO 状态寄存器 (0x1C/0x5C) 返回:
0x22 //在 FIFO 中加载 3 个字节

 

读取 FIFO I/O 寄存器 (0x1F/0x7F)(3 字节)返回:
0x00、0x00、0x00

 


4、问题描述

第一个字节 0x00 指示成功响应、似乎是正确的。
但是、随后的两个字节(随机数)都是 0x00。
根据 ICODE SLIX2 规范、随机数不应为 0x0000。


5.问题

对于 ISO15693 Get Random Number 命令、上面显示的命令格式或寄存器配置是否正确?
正确接收随机数是否需要任何其他 TRF7960 设置或时序要求?
是否存在任何已知行为、TRF7960 由于 FIFO 处理、CRC 设置或 IRQ 流程而针对随机数返回 0x0000?
该问题是否与 FIFO 复位时序或 RX 中断的处理有关?


其它系统信息

MCU:STM32G0B0VET6
MCU 和 TRF7960A 之间的接口:SPI 通信

MCU (STM32G0B0VET6) 通过 SPI 与 TRF7960A 成功通信、  
所有寄存器读取/写入操作都按预期运行。  
其他 ISO15693 命令(例如库存)正常运行。

如果您能提供任何指导或建议、我们将不胜感激。
非常感谢您的支持。

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

    嗨、Ochi、

    我希望一切都好。 请注意、该系列器件支持有限、但我会尽力回答您的问题:

    根据您描述的中断流程和 FIFO 处理、可能有 2 个问题导致这种情况。

    ——潜在问题 1: 在字节到达之前从 RX 开始读取 FIFO(主要问题)

    IRQ = 0x40 是 RX 启动(检测到 SOF)、而不是 RX 结束。 在触发此中断时、TRF7960A 只检测到标签的帧起始。 仍然是通过无线方式接收实际有效载荷字节。

    在 ISO 15693 高数据速率 (26.48kbps) 下、每个字节大约需要 302µs 才能发送。 GET 随机数的完整 TAG 响应为 5 个字节(1 个标志+ 2 个随机+ 2 个 CRC =~1.5ms 空气时间)、加上 EOF 之后的最小 312.5µs 等待时间。 到 ISR 读取 FIFO 时、基本上尚未到达任何数据字节、FIFO 返回 0x00 以进行空读取。

    ——潜在问题 2: TX 结束后的 FIFO 复位(次要风险)

    在 TX 结束中断之后发出第二个 FIFO 复位 (0x8F)。 虽然标签在技术上尚未作出响应
    确切的时刻,这是没有必要的,如果标签响应时间变化可能会导致竞态条件。 FIFO 复位
    您已经在 TX 序列开始时发出的问题就足够了。 移除 TX 端后复位。

    --回答您的具体问题

    问题 1: 命令格式是否正确?
    是的。 [0x02][0xB2][0x04]是 ICODE SLIX2 的正确 ISO 15693 获取随机数帧。 标志= 0x02(高数据
    速率,非寻址)、命令= 0xB2、制造商代码= 0x04。 此处无需更改。

    问题 2: 其他设置或时序要求?
    内核要求不在 RX 启动时读取 FIFO。 请参阅下面更正的流程。

    问题 3 由于 FIFO 处理而产生的已知 0x0000 行为?
    是的—这是众所周知的陷阱。 从 TRF7960 (A) 上的空 FIFO 读取会返回 0x00。 结果为 0x0000
    即固件在到达之前通过接收到的数据进行读取。

    问题 4 与 FIFO 复位时序还是 RX 中断处理相关?
    FIFO 复位位置是第二个问题。 直接原因是在 RX Start 上读取、而不是等待
    全面接收。

    希望这对您有所帮助。

    谢谢、

    Riz