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:尝试模拟 B 型卡时出现问题

Guru**** 2455360 points
Other Parts Discussed in Thread: TRF7970A, MSP430F5529

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1534131/trf7970a-a-problem-trying-to-emulate-a-type-b-card

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

工具/软件:

您好、在 TRF7960ATB 模块上使用 TRF7970A 芯片进行 B 型卡 (106Kbps) 仿真时遇到问题。

我的问题是、当我尝试使用直接模式 2 时、我应该在 FIFO 中找到所有数据(预期数据是简单的 WUPB)、但我确实收到了指示帧结束的 IRQ 触发。 但是、问题出在这里:当我检查 FIFO 中的数据时、我发现数据大小= 0。

为了确认帧结束后的读取结果、我发现 IRQ_STATUS = 0x40。 此外、读取 NFC 目标协议寄存器会在帧结束后提供 0x05、这是正确的。 尽管 FIFO 中没有数据、但示波器上的值也是非常合乎逻辑的。
您将在下面找到我当前的 B 型配置以及示波器读数:


TRF_SendCommand (TRF797x_SOFT_INIT_CMD);
CyDelay (5);
TRF_SendCommand (TRF797x_IDLE_CMD);
TRF_WriteRegister (TRF797x_NFC_TARGET_DETECT_LVL、0x00);
TRF_WriteRegister (TRF797x_ISO_CONTROL、ISO14443B_CONFIG); ===== > 0xA5 或 0x25(带和不带 CRC “同时尝试“)
TRF_WriteRegister (TRF797x_RX_SPECIAL_SETTINGS、0x24);
TRF_WriteRegister (TRF797x_CHIP_STATUS_CTRL、0x02 | CSC_VIN_5V | CSC_RX_IN1);
TRF_WriteRegister (TRF797x_IRQ_MASK、EN_IRQ_FIFO);
TRF_WriteRegister (TRF797x_regulator_IO_CONTROL、0x82);
TRF_WriteRegister (TRF797x_TEST、0x40);
TRF_WriteRegister (TRF797x_regulator_IO_CONTROL、0x80);
TRF_WriteRegister (TRF797x_Modulator_and_CLK、0x80);

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

    您好、

    [报价 userid=“6609" url="“ url="~“~/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1534131/trf7970a-a-problem-trying-to-emulate-a-type-b-card

    TRF_WriteRegister (TRF797x_Modulator_and_CLK、0x80);

    [/报价]

    您是否尝试了 使用 TI EVM 硬件 ( MSP430F5529 LaunchPad 开发套件和 dlp_TRF7970ABP) 进行卡仿真?

     我 运行完整的 NFC 堆栈并为卡仿真模式启用 TRF7970A。 我能够使用 Android 手机正确读取仿真 TRF7970A 卡。 您可以参阅 NFCLink 独立入门指南中的完整 NFC 堆栈用户指南

    请参阅仿真选项卡中的示例文本“卡仿真是非凡的“。  

    在我的手机上、我可以在 卡仿真模式下读取 TRF7970A 上的 ID 和记录。  

    请运行 TI NFC 示例、并将您的代码与 TI 代码进行比较。  

    您还可以参阅以下应用手册以了解卡仿真。  

    使用 TRF7970A 进行 NFC 卡仿真(修订版 B)

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

    问题是我没有 用于测试模块的 TI EVM 硬件、我将 TRF 与 PSoC MCU 用于此工程(因此我无法以这种方式进行)。
    我已经读取了 REV.B 项目 、可以确认他们仅提到了 ISO CONFIG (0x01) 寄存器配置 、我已经进行了测试、除此之外没有其他配置。

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

    您好、

    TRF_WriteRegister (TRF797x_NFC_TARGET_DETECT_LVL、0x00);
    [/报价]

    您要向 NFC_TARGET_DETECT_LVL 寄存器写入 0。 这意味着您禁用射频场检测。 请参阅此寄存器上的 B2:b0 说明。 您应设置 b2:b0=0x7。  

     有关详细信息、请参阅数据表。 读取您的代码后、您未启用 AutoSDD、这是正常的。 当 IRQ 状态寄存器上有 0x40 时、您需要首先检查 NFC 目标协议寄存器、以查看其是否等于 0xC5。 我认为您在代码中不会这样做。 当寄存器 返回 0xC5 时、意味着发出了 ISO14443B 命令、您可以读取 FIFO 状态。  

    当使用 NFC/RFID 时、该寄存器用于(读取时)显示比特率和协议类型
    将显示启动器/读取器。 在放置 TRF7970A 时就是这种情况的一个用例
    插卡仿真(A 型或 B 型)和另一个 TRF7970A 或 NFC 器件(为其他 NFC 轮询)
    器件)提供给 TRF7970A 的卡仿真模式。 IRQ 指示有一个字段
    检测到 (IRQ 状态= 0x04) 或自动 SDD 已完成 (IRQ 状态= 0x08、如果针对进行了配置
    AutoSDD)。
    如果设置了自动 SDD 并且 0x04 返回 IRQ 状态、则可以读出该寄存器以查看是哪个寄存器
    用于了解轮询周期序列的命令。 然后、当首先正确时
    从读卡器或启动器发出匹配命令(即 REQA 或 REQB)、如果已设置 AutoSDD、则为 IRQ
    火灾且 IRQ 状态为 0x08、表示 SDD 完成。 下一个 IRQ 应返回 0x40、如所示
    状态、可以检查寄存器 0x19 以确保其值正确(即 106 下 A 类的 0xC9
    106kbps、B 型为 0xC5)、指示 FIFO 中有字节和 FIFO 状态的读取
    指示要读出的字节数。 例如、AutoSDD 完成后、中有四个字节
    FIFO、这些应该是来自读取器的 RAT 命令、由 MCU 控制
    卡仿真模式下的 TRF7970A 必须响应。 如果未设置 AutoSDD、则作为的另一个示例
    TRF7970A 在 ISO/IEC 14443 B 卡仿真模式下、则会像以前那样进行现场检测
    所述的 IRQ 也会触发、以指示 RX 已完成 (0x40)。 必须对该寄存器进行检查、然后进行检查
    与为该寄存器值设置为 0xC5 的 case 语句结构进行比较、
    表示以 106 kbps 的速率发出了 ISO/IEC 14443 B 命令。 当此寄存器 (0x19) 为 0xC5 时、
    然后可以读取 FIFO Status 并应保持值 0x03、读取时为 REQB
    命令 (0x05、0x00、0x00);控制 MCU 必须通过 ATQB 响应进行响应。 后续步骤
    对于这些示例中的任何一个、都遵循 ISO/IEC 14443-3 或–4 标准的相关部分、然后执行
    NFC 论坛规格、具体取决于系统用例或应用。

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

    我已经测试了您建议的配置、但很遗憾、它不起作用。 如前所述、我使用的是 TARGET_PROTOCOL_REG (0x19)、我正确观察到了值 0x05、这表示已检测到 B 类卡。 在值 0xC5 中、C 部分用于指示射频场是否高于唤醒电平以及用于冲突检测。 但在我的例子中、射频唤醒电平设置为 0、这意味着 TRF 已经被唤醒、因此我采用更简单的配置。

    关于寄存器 0x18、我根据 TRF 芯片的 勘误表 (器件 B08)将其设置为 0x00、建议在初始化后将其复位为零、因此我遵循了该建议。

    如前所述、由于寄存器 0x19 返回 0x05、这确认检测到 B 类并且射频场处于活动状态。 但是、当我检查 FIFO 缓冲区时、它是空的。 我还使用 TEST_REGISTER (0x1A) 进行了测试、可以清楚地观察到 TRF 正在通过 MOD 引脚检测 WUPB 信号(请参阅新附加的屏幕截图以供参考)。

    我还尝试使用直接模式 1、通过 SPI 读取时发现了一些奇怪的情况:即使 TRF 在 MOD 引脚上检测到 WUPB(没有通过 SPI 解码)、当我发送 WUPA 命令(即使 TRF 配置为 B 型)时、它解码 WUPA 并通过 SPI 发送、就好像它卡在 A 型模式中一样。

    这种行为很奇怪、即使将 TRF 显式设置为 B 型配置、也会发生这种情况。 我附加的第二张图片显示了我观察到的实际行为。 尽管我已将 TRF 配置为 B 型、但响应看起来与 A 型卡的响应完全相同

    作为参考、我还在下面添加了直接模式 1 配置。 我想指出的是,我也测试了你的建议对于这种模式,以防万一,但他们产生了类似的结果。

    注意:键入 a 可以正常工作。

     b 类型的新直接模式 1 配置而不是直接模式 2:

    TRF_WriteRegister (TRF797x_NFC_TARGET_DETECT_LVL、0x00);//我测试了其他值并提供了相同的结果
    TRF_WriteRegister (TRF797x_Modulator_and_CLK、0x01);
    TRF_WriteRegister (TRF797x_ISO_CONTROL、ISO14443B_CONFIG | ISO_DIRECT_MODE_1);//对于有或没有 CRC、ISO CONFIG b 为 A5 或 25(已尝试这两种模式)
    TRF_WriteRegister (TRF797x_RX_SPECIAL_SETTINGS、0x20);
    TRF_WriteRegister (TRF797x_TEST、0x40);
    TRF_SendCommand (TRF797x_ENABLE_RX_CMD);
    TI_ss_Write (0);// ss Down


    SPI_WriteTxData (TRF797x_CHIP_STATUS_CTRL & 0x1F);//我选择 reg 0x00 进行写入
    SPI_WriteTxData (0x02 | CSC_VIN_5V | CSC_RX_IN1 | CSC_DIRECT_MODE_1_0);//对于寄存器 0x00、我将其写入此处并保持 SS 关闭


    SPI_WriteTxData (0x00);//byte 表示 clk 和我会不停地切换(这不是为了给您提供上下文信息而导致的问题)







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

    您好、

     我今天在度假,明天是一个公共的美国假期。 我将在星期一上回复您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于寄存器 0x18、我根据 TRF 芯片的 勘误表 (器件 B08)将其设置为 0x00、建议在初始化后将其重置为零、因此我遵循了该建议。

    根据勘误表、仅在上电后才将寄存器初始化为 0x0。  

    观察在卡仿真模式下运行完整 TI NFC 堆栈固件的 SPI 波形、我看到以下寄存器正在初始化。 您是否可以使用相同的寄存器设置?  

     

      直接命令   软件初始化 (0x03)
      直接命令   空闲 (0x00)
    单路 写入寄存器    
    数据 0x01 调制器和 SYS_CLK 控制 (0x09)
    单路 写入寄存器    
    数据 0x20 芯片状态控制 (0x00)
    单路 写入寄存器    
    数据 0xA1 ISO 控制 (0x01)
    单路 写入寄存器    
    数据 0xF0 RX 特殊设置 (0x0A)
    单路 写入寄存器    
    数据 0x00 稳压器和 I/O 控制 (0x0B)
    单路 写入寄存器    
    数据 0x0F 可调的 FIFO IRQ 级别 (0x14)
    单路 写入寄存器    
    数据 0x03 NFC 低场检测电平 (0x16)
    单路 写入寄存器    
    数据 0x07 NFC 目标检测级别 (0x18)
    连续电流 读取寄存器    
    数据 0x00 IRQ 状态 (0x0C)
    数据 0x3e 中断屏蔽 (0x0D)
    单路 读取寄存器    
    数据 0xC0 NFC 目标协议 (0x19)
      直接命令   启用接收器 (0x17)
    单路 读取寄存器    
    数据 0xC5 NFC 目标协议 (0x19)
    单路 读取寄存器    
    数据 0x40 IRQ 状态 (0x0C)
    单路 读取寄存器    
    数据 0x03 FIFO 状态 (0x1C)
    连续电流 读取寄存器    
    数据 0x05 FIFO I/O (0x1F)
    数据 0x00 FIFO I/O (0x1F)
    数据 0x08 FIFO I/O (0x1F)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这种行为很奇怪、即使将 TRF 明确设置为 B 型配置、也会发生这种情况。 我附加的第二张图片显示了我观察到的实际行为。 响应看起来与 A 型卡的响应完全相同、即使我已将 TRF 配置为 B 型。

    TRF 配置为卡、而不是读卡器、对吧? WUPB 应该是读卡器发出的命令。 TRF 应仅作为卡发送响应、而不是命令。 0x52 表示发件人发出 WUPA 命令而不是 WUPB 命令的人(本应是 0x05 而不是 0x52)?  

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

    你好,谢谢你的支持,现在我正处于另一件事的中间,这一刻,我会尽快回到你

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

    尊敬的 Nader:

     我没有从你那里听到。 我现在就把螺纹关上了。 如果您有任何更新、可以写入此帖子、状态将更改为“打开“。