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:ISO 14443-3 B 类标签的卡仿真

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

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/943565/trf7970a-card-emulation-of-an-iso-14443-3-type-b-tag

器件型号:TRF7970A

您好!

我使用 的是 TRF7970A、尝试模拟非 NFC 标签、但这不使用 符合 ISO 14443-2 B 类标准 的空中接口和 符合 ISO 14443-3 标准的 B 类帧格式。 它使用13.56MHz 载波频率、847kHz 副载波频率和106Kbit/秒数据传输、10% ASK 调制;没有什么特别之处。

数据报中的数据交换由 SOF、命令、数据[]、CRC、CRC 和 EOF 组成、 如下所示。

考虑到它被指定为 符合 ISO 14443-3 B 类帧格式、我假定不再需要更多细节。 读取器以 ASK、10%调制深度发送其数据、并且标签应以 BPSK 进行响应。 我假设 这是 TRF7970A 的功能。

遗憾的是、我没有像传回数据那样走得太远。 当读取   器尝试在卡仿真模式中检测到我的 TRF7970A 时、TRF7970A 生成一个场改变中断、两个 RX 启动中断和另一个场改变中断。 尽管看起来很有希望、但随后报告 FIFO 仍然为空。 值得注意的是、FIFO 寄存器确实包含我期望的 CMD 值。

现在、此标签的 CMD 值是完全专有的。  卡仿真模式下的 TRF7970A 是否在此处需要标准命令? 我希望这个芯片允许我在这里接收和传输任意 CMD/数据。 我们非常感谢您的帮助。

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

    您好!

    我们的软件专家将于下周推出、并可为您提供更详细的帮助。

    如果还没有、我可以向您指出以下文档 "NFC 卡仿真使用 TRF7970A"、其中包含有关 CE 模式的有用信息:

    https://www.ti.com/lit/pdf/sloa208

    根据我的理解、只要您保持 ISO14443B 帧格式和通信参数、 不管命令代码如何、发送的数据都应该在 FIFO 中可用。 假设您的寄存器设置适用于 ISO1443B CE 模式。

    此致、

    Helfried

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

    您好!

    我们实际上对卡仿真的专有协议没有任何经验。 如果 RX 完成中断未触发、可能是因为状态机在直接模式2下无法识别异常数据包、从而提示器件相信已接收到正确的数据包。 您可能只需要依赖超时和检查 FIFO。

    我要说的是、从前面的讨论中、直接模式0不适用于卡仿真、所以如果直接模式2不能用于您的应用、那么 TRF7970A 将无法仿真专有标签。

    我知道这不是您的理想选择、但当我们制造该器件时、它从未打算模拟非 NFC 兼容标签(当时没有人要求这样做)、因此器件中的功能并不是真正考虑到这种应用的架构。

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

    数据表对此并不十分明确、但它确实建议 TRF 等待特定的 NFC 命令来实际进入卡仿真模式、您的答案也会进入该方向。

    我需要 TRF 为我做的是接收 ISO 14443-3 B 类数据包并允许我发送响应。 如果它已经为我执行了奇偶校验和 CRC、我甚至不需要访问这些校验和 CRC、那将是完美的。 但是、我确实需要访问数据包的完整负载以及它接收到的所有数据包。 如果它使用它无法识别的命令来交换数据包、或者它在收到标准初始化消息之前未进入适当的模式、它很遗憾不能用于我。 您能否确认(或拒绝)此情况、请这样做? 如果是这样,将非常感谢提出一项备选方案。

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

    您好!

    查看帧格式与 ISO14443-3、可能数据包没有我想象的那么异常。

    我猜"位"是指上图中的"etu"? 这是我希望帧格式兼容的唯一方法、因为 SOF 可以是12到14 ETU、EOF 可以是10到11 ETU。

    这还意味着一个字节的数据通过10位以上的起始位和停止位发送。 这也是正确的吗?

    如果是这样、我希望器件能够正确识别数据包。 看到用于 SOF/EOF 的"位"会使我失望、因为它听起来像是数据、而不是 ETU 时序参数。

    您得到的 IRQ 寄存器的确切值是什么?

    当 RX 完成时、您应该得到一个0x40。

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

    [引用用户="Ralph Jacobi"]
    查看帧格式与 ISO14443-3、可能数据包没有我想象的那么异常。
    [/报价]

    真是个好消息!

    [引用用户="Ralph Jacobi"]
    我猜"位"是指上图中的"etu"?
    [/报价]

    是的、确实如此。 不同之处在于、一个位可以有两个不同的状态、标记或空白来传输信息、而 ETU 具有相同的持续时间、但始终处于相同的状态。

    [引用用户="Ralph Jacobi"]
    这是我希望帧格式兼容的唯一方法、因为 SOF 可以是12到14 ETU、EOF 可以是10到11 ETU。
    [/报价]

    是的、他们使用"位"和 ETU 这两个术语、但我认为就像您说的那样。 Request-SOF 如下所示:

    Request-EOF 如下所示:

    [引用用户="Ralph Jacobi"]
    这还意味着一个字节的数据通过10位以上的起始位和停止位发送。 这也是正确的吗?
    [/报价]

    是的、在 UART 术语中、一个数据字节封装在一个10位的"帧"中:

    [引用用户="Ralph Jacobi"]
    如果是这样、我希望器件能够正确识别数据包。 看到用于 SOF/EOF 的"位"会使我失望、因为它听起来像是数据、而不是 ETU 时序参数。
    [/报价]

    我也希望它可以工作、但手册在 第6.1.3章末尾的最后一个要点中建议、TRF (仅限)在接收到 SENSB_REQ 作为第一个命令后进入 ISO/IEC 14443 B 仿真模式。 这不是我的读取器所做的。

    [引用用户="Ralph Jacobi"]
    您得到的 IRQ 寄存器的确切值是什么?

    当 RX 完成时、您应该得到一个0x40。
    [/报价]

    我将获得0x04、0x40和0x44的值。 这就是 IRG_srx 和 IRQ_RF。 在任何情况下、FIFO 都不会报告包含任何数据、甚至不会在 IRQ 发出一段时间后报告。 值得注意的是、FIFO 寄存器包含值0x06、可能是卡读取器发送的第一个数据字节。 但在读取它之后它仍然是0x06、我希望另有一个字节、

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

    您好!

    好的、我想我理解您现在面临的问题!

    因此、根据数据表注释、我认为这不会妨碍您完成所需的工作。 我的理解是、它仅适用于让器件根据接收到的标准操作选择想要使用的协议。 我认为您可以使用 ISO Control 强制器件进入特定代码。 也就是说、我从未在没有 SENSB_REQ 进入的情况下对此进行过测试、因此5%的可能性是无法这样正确设置某些内部器件状态机。

    [报价用户="user5978314"]我得到的值为0x04、0x40和0x44。

    好的、这很好。 获取0x40意味着 RX 完成。

    0x60为" RX 已启动、正在进行中"

    该表可能有点令人困惑、但显示如下:表示接收到 RX SOF 且 RX 正在进行中。 在 RX 开始时此标志被置位、但是当 RX 完成时中断请求(IRQ = 1)被发出

    如果达到 FIFO 水线位以指示需要清除 FIFO、也可以发送中断请求、因此如果您有大量数据(例如200字节)、则获取0x60、这意味着"RX 已启动、FIFO 已满"。 然后最终您将获得一个0x40、用于 RX 完成

    因此、您需要做的是:

    接收到0x40时、读出数据。

    如果您使用多种协议、那么第一次以这种方式获得 ISO14443-B 命令(尤其是当您有备用 SENSB_REQ 时)时、请使用 ISO 控制配置器件以实现 B 类卡仿真模式。

    继续尝试将响应发送回您的读取器。

    请注意、您提到 FIFO 为空-这可能是因为器件期望 SENSB_REQ、但未得到它、因此未指示接收到多少字节、 因此、您可能只需要对初始读取的字节进行硬编码、以查看字节是否符合预期。 如果 SENSB_REQ 未被发送、希望这不是一个常数...

    希望这能帮助您进一步了解、器件可以满足您的需求... 您可能还想考虑是否可以首先发送 SENSB_REQ 以使器件进入正确状态? 不确定您对该控制的控制程度、但根据行为、最终可能需要控制。 我希望我能以某种方式告诉您、但这不是我们以前测试过的。

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

    因此、如果我理解正确、由于缺少 SENSB_REQ、TRF 无法自动确定使用的协议? 这可以通过自行设置 ISO 寄存器来解决、而不是为我设置 TRF?

    这是我的初始化代码:

    //禁用 EN 信号*/
    GPIO_PinWrite (Board_RFID_EN_GPIO、Board_RFID_EN_GPIO_PIN,0);
    
    while (tick < 6 * ticks per_msec);
    GPIO_PinWrite (Board_RFID_EN_GPIO、Board_RFID_EN_GPIO_PIN,1);
    
    timer = tick + 1 * tick per_write*
    
    
    
    (tick
    
    
    
    
    + tick)
    ;tick 命令+ msec (timer + tick + tick + tick 命令+ tick);tick 命令+ tick (timer + tick + msec)* tick (timer + tick + tick + tick + tick + tick + tick 命令+ msec)(timer + tick + tick);tick
    
    WRITE_REG
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    (REG_CHIP_STATUS_CONTROL、CHIP_STATUS_CONTROL_RF_ON);//选择106kbps 14443B 卡仿真*/ WRITE_REG (REG_ISO_CONTROL、ISO_CONTROL_RFID | ISO_CONTROL_ISO_2 | ISO_CONTROL_REG_REG_CYCLE (REG_REG_REG_REG_WTOCOL);WCL10_REG_REG_REG_REG_REG_WIT_RESPONG_WITT_REG_RATIONAL (REG_WIT_CLPONG_WIT_REG_WIT_REG_WIT_CLPONG_WIT_CLPONG_WIT_RESPONG_WIT_CLPONG_WIT_CLPONG_WIT_CLPONG_WIT_CLPONG_WIT_RESPONG_RATIONAL);WIT_CLPONG_WIT_RESPONG_WIT_RESPONG_WIT_CL 电脑控制器_CONTRAL_AUTO_REG |
    电脑控制器_VRS (0x7));
    
    WRITE_REG (REG_FIFO_IRQ_LEVLS、FIFO_IRQ_LEVE_WLH (0x3)|
    FIFO_IRQ_LEVEL__WLL (0x3));
    
    WRITE_REG (REG_NFC_LOW_DETECTION_LEVEL、NFC_LOW_DETECTION_LEVEL_RFDET (0x3));
    
    对于(I = 0;I < 4;i++)
    BUF[i]= I;
    WRITE_addr (REG_NFC_ID_REG_LEVEL、4;REG_F[REG_F]
    
    (REG_REG_REG_REG_F_LEVEL_REG_)、[REG_F](REG_REG_REG_ NFC_TARGET_LEVEL_ID_S (0x0)|
    NFC_TARGET_LEVEL_RFDET (0x7);
    
    WRITE_REG (REG_TEST_SETTINGS_1、TEST_1_MOD_SUBC_OUT);
    
    WRITE_CMD_CMD_RESET_CYCLE (CMD_STOP_解码
    
    器);
    WRITE_cmd (CMD_RUN_解码 器);
    
    WRITE_REG (REG_IRQ_MASK、0xFF); 

    在初始化 TRF 并让读卡器尝试读取读卡之后、监视器控制台上的寄存器转储:

    # trf7970a 初始
    #
    组帧错误
    组帧错误
    RX_COMPLETE、0字节
    RX_COMPLETE、 0字节
    组帧错误
    # tf7970a 转储
    寄存器[0x00]= 0x20
    REG[0x01]= 0x25
    REG[0x02]= 0x00
    REG[0x03]= 0x00
    REG[0x04]= 0xc1
    REG[0x05]= 0xbb
    REG[0x06]= 0x00
    REG[0x07]= 0x0E
    REG[0x07]= 0x30[0x07] REG[0x07]= 0x07] REG[0x07] REG[0x30]
    
    
    = 0x07] REG[0x07]= 0x30[0x07] REG[0x07]= 0x07] REG[0x07]= 0x30[0x07] REG[0x07]=
    
    0x
    0x00
    REG[0x0F]= 0x42
    REG[0x10]= 0x00
    REG[0x11]= 0x01
    REG[0x12]= 0x00
    REG[0x13]= 0x00
    REG[0x14]= 0x0F
    REG[0x15]= 0x00
    REG[0x16]= 0x03
    REG[0x17]= 0x03 REG[0x31]=
    0x01V[0x01]= 0x01V[0x01]= 0x01VREG[0x000[0x000[0x000] REG[0x01]= 0x01]= 0x01VREG[0x01]= 0x000[0x01]= 0x01]= 0x01VREG[0x000[0x000[0x01]= 0x
    
    
    
    
    
    
    = 0x06 

    请注意、此模式下的组帧错误实际上意味着此模式下的射频场发生变化。 这些大写的日志行实际上是报告的 IRQ。 RX_COMPLETE 也会读取和记录 FIFO 电平、因此"0字节"。

    我是否在 ISO 寄存器中设置了错误的模式?

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

    您好!

    我在这里看到了一个非常大的问题...

    REG[0x00]= 0x20 

    也就是说、TRF7970A 的 RF 场输出被设定为打开-这绝对不允许卡仿真工作!

    "射频启用"是指器件正在生成自己的13.56 MHz 射频场、这将与您的读取器器件生成的场发生冲突。

    您处于卡仿真设置时,必须始终将其关闭。 射频使能仅用于与期望 TRF7970A 提供射频场的器件通信、即其他 NFC 标签或对等目标器件。

    查看删除它是否会使您的系统正常运行。

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

    您好!

    你们都对这件事感到兴奋、所以我立即尝试了、但不幸的是、这不会改善这种情况。 不使用场改变中断和 Rx 完成中断、如果不设置该位、我只会获得 场改变中断。 由于最初的兴奋、我有点失望、没有立即报告、因此我很抱歉耽误了时间、非常感谢您的帮助。

    也许我需要再设置一个位、但我并不能立即清楚应该是哪一个位。 你有什么想法吗?

    此致、

        Robert。

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

    您好、Robert、

    现在我只能想到的是、为什么不尝试使用符合 ISO14443-B/NFC-4B 标准的读取器与器件进行通信。 如果配置有问题、我们可以肯定地知道。

    您可以尝试和执行的另一项操作是使用我们的 LaunchPad+BoosterPack 组合进行测试、以查看您是否从专有读取器接收到第一个数据包、以及器件是否能够读取数据。 堆栈会拒绝初始命令、但这会告诉您、如果配置正确、您是否可以从专有设置中接收到数据包。

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

    [引用用户="Ralph Jacobi"]

    您可以尝试和执行的另一项操作是使用我们的 LaunchPad+BoosterPack 组合进行测试、以查看您是否从专有读取器接收到第一个数据包、以及器件是否能够读取数据。 堆栈会拒绝初始命令、但这会告诉您、如果配置正确、您是否可以从专有设置中接收到数据包。

    [/报价]
    我有两个 Booster Pack 和一整套 LaunchPad、是特意为您的建议购买的;这实际上是我的入门方式、但 TI 网站上有许多不同版本的支持包、Windows 应用程序在 Windows 10上似乎不再运行良好。

    这些内容是否仍然得到支持和维护?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    @TI:您认为解决问题的原因是什么? 是不是我即将放弃?

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

    您好!

    如需一般参考、我们的固件产品最好记录在常见问题 解答:https://www.ti.com/lit/pdf/sloa246中

    无论如何、我们的完整 NFC 堆栈都支持所有三种 NFC 模式。 我的想法是、如果您使用我们已根据 NFC 论坛标准进行测试的完整 NFC 堆栈以及我们最强大的卡仿真产品、我们可以评估器件甚至是能够处理您的定制的硬件。 固件位于以下位置: https://www.ti.com/lit/pdf/sloa208

    您需要使用断点来检查是否已接收到第一个数据包、GUI 将不会为您提供帮助、也就是说...

    [报价用户="user5978314"] Windows 应用程序在 Windows 10上似乎不再运行良好。[/quot]

    如果您是指 TI NFC 工具 v1.8、请参阅以下主题:  

    [报价用户="user5978314"]是否仍支持和维护此类内容?

    支持是、仅针对关键问题进行维护、因为我们的开发已根据 NFC 论坛标准和与 NFC 设备的互操作性进行了测试、而且多年来我们没有遇到与 NFC 兼容设备相关的问题。 我会毫不犹豫地说、我们不会为 Mifare Classic 之外的专有标签提供强大的支持。 任何其他专有标签或协议由终端用户实施。 我只是想帮助指导您、甚至知道器件硬件是否能够工作。

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

    [引用 user="user5978314"]

    @TI:您认为解决问题的原因是什么? 是不是我即将放弃?

    [/报价]

    我们标记了我们认为以这种方式提供答案的帖子。 对于任何不有用的问题、您都可以"拒绝回答"。 如果您对我之前发布的所有帖子执行此操作、该主题将不会显示该状态。