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:演示板读取正常,但写入失败

Guru**** 2542530 points


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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/695499/trf7970a-demo-board-read-is-ok-but-write-is-fail

器件型号:TRF7970A

大家好

我在 TI 演示板 G2553+TRF7970+Tagit 上运行 TI 示例固件 sloc297c。

该示例似乎只启用"nFC_appIso15693ReadTag (0x02 | ui8AddresedFlag")的读取功能、并且它确实运行正常。

客户还需要实现写入函数、我看到 FW 包含写入 API 但未使用、因此我尝试调用写入 API "ISO15693_sendWriteSingleBlock (0x02 | ui8AddresedFlag、0x0、0x6、Write_Data);"以替换读取函数、但写入 API 返回失败、 再次读取标签内容后、数据不会写入标签。  

我是否可以获得有关 ISO15693_sendWriteSingleBlock 使用问题或 Tagit 不支持写入函数的建议?

平台如下图所示。

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

    Terry、您好!

    [引用用户="Terry Deng "]我是否得到建议,即 ISO15693_sendWriteSingleBlock 使用问题或 Tagit 不支持写入功能?

    也不是很好! 我将进行解释。

    Tag-It 标签确实支持 ISO15693 Write、但它们需要一个不会由您的 API 调用触发的附加过程:

    ISO15693_sendWriteSingleBlock (0x02 | ui8AddresedFlag、0x0、0x6、Write_Data); 

    添加的过程是、当为 ISO15693选择了"选项标志"(这直接超出 ISO15693标准)时、读取器必须发出一个帧结束标志、以接受已写入的数据。

    此功能包含在固件中、但您必须使用正确的 ISO15693标志调用 API 来触发它。 该标志是标志字节的位6、因此该标志应附加0x40。

    因此、正确的函数调用为:

    ISO15693_sendWriteSingleBlock (0x42 | ui8AddresedFlag、0x0、0x6、Write_Data); 

    请尝试一下、我希望我的解释可以澄清有关它为什么不起作用的任何问题。

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

    你(们)好

    感谢您的快速建议。

    抱歉、我尝试"ISO15693_sendWriteSingleBlock (0x42 | ui8AddresedFlag、0x0、0x6、Write_Data)"仍然失败。 我在 sendWriteSingleBlock API 中查看了详细信息、并找到了过程结束显示 STATUS_FAIL、因为"无响应"。 您是否考虑其他原因?

    if (g_sTrfStatus = RX_COMPLETE)//如果数据已接收

    if (g_pui8TrfBuffer[0]= 0x00)//确认响应标志字节中的"无错误"

    //收到的答复

    ui8Status = STATUS_SUCCESS;

    else //响应字节中发回错误

    ui8Status = STATUS_FAIL;

    其他

    //无响应   

    ui8Status = STATUS_FAIL;

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

    Terry、您好!

    我建议检查 当您在该其他语句中着陆时出现的 g_sTrfStatus。 如果返回无响应 TRF79xx 状态、它可能会提供有关正在发生的情况的其他信息、然后标签实际上没有回复、这将向我表明这可能是范围问题。

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

    当 FW 位于 ISO15693_sendWriteSingleBlock API 中的"STATUS_FAIL"中时、我检查"g_sTrfStatus"内容是否显示"NO_RESPONSE_Received"。 我不确定您对"距离问题"的含义、您是否认为标签和读取器之间的距离不够? 为什么读取函数能够正常工作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Terry、您好!

    嗯、好的、老实说、我更希望报告一个错误、而不是没有响应。

    一般而言、从标签读取所需的射频能量比写入标签所需的射频能量更少。 如果标签靠近读取范围的边缘、则它可以成功进行读取、但不能成功写入。 如果标签位于该边缘、则可能需要将其移动得更近。

    另一个原因可能是写入命令不能按预期工作。  

    为了确保函数正在执行我们所需的操作、快速检查是在函数中为调用以下函数的两行设置断点:

    TRF79xxA_sendDirectCommand (TRF79XXA_transmit next SLOT_CMD);//向外发送帧结束标记 

    如果该行被命中、那么我确信 EOF 被正确发送、但是如果没有、 然后、您应该验证 ui8ReqFlag 以确保它为0x62 (0x42将在函数内附加0x20以使其成为0x62、从而支持寻址写入、这是最安全的写入标签的方法)。

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

    我已确认固件将在写入 API 中达到第一个"TRF79xxA_sendDirectCommand (TRF79XXA_transmit _next _SLOT_CMD")"、因此正如您所说的、EOF 应该被正确发送。

    我已经将标签放在读取器表面、我无法再将标签移到更近的位置。 您仍然认为射频能量不足以用于写入功能吗? 我是否可以尝试增加射频能量的其他方法、但将标签移近? 因为这是 TI 演示板、所以我认为无法找到另一个具有更好硬件性能的板。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Terry、您好!

    这在范围方面是绝对正确的、它应该在该距离工作。

    我注意到、在您的图片中、BoosterPack 上的锡盖已移除、除了移除 DLP 设计电容器外、是否对硬件进行了任何修改?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    我不会修改演示板的任何硬件。 我移除了 DLP 设计电容、仅为了通过示波器测量 TRF7970引脚信号。
    顺便说一下、我尝试在另一组 G2553 + TRF7970ABP 上进行测试、该组不会移除 DLP 设计电容器、结果与写入 API 中无响应相同。

    您手头上是否有演示板以及是否可以帮助尝试 sloc297c 固件、我想不出我们可能缺少的任何其他问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Terry、您好!

    我没有手头上的演示板和标签、但我亲自编写并验证了该固件、并多次使用它来编写标签。 您尝试了多少个标签? 您能否尝试使用智能手机写入标签以查看是否可以写入?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    我尝试使用智能手机在我手上写下标签、它可以正常工作。 因此、我确定标签应该正常。

    我还尝试测试2设置 TRF7970ABP 演示板、两者都可以读取标签、但写入失败。 假设2组演示板的行为相同且读取良好、我认为演示板硬件正常。

    因此、仅保留固件、我怀疑固件中可能缺少写入函数的提示。 我在 Tiva MCU 上找到了另一个示例代码库来运行 TRF7970写入函数、与 G2553 MCU 上的 sloc297c 代码相比、似乎没有什么区别。 你怎么看?

    G_pui8T5TBuffer[ui8Offset++]= g_ui8T5TRequestFlag;
    G_pui8T5TBuffer[ui8Offset++]= T5T_write_single_block_CMD;

    IF (g_ui8T5TRequestFlag 和 T5T_REQ_FLAG_ADDEED)

    //将 UID 复制到缓冲区中
    对于(ui8TempCount = 0;ui8TempCount < 8;ui8TempCount++)

    G_pui8TCTBuffer[ui8Offset++]= g_ui8TETUID[ui8TempCount];



    //要写入的块#
    G_pui8T5TBuffer[ui8Offset++]=(uint8_t)(g_ui16T5TBlockNumber & 0xFF);
    IF (g_ui8T5TRequestFlag 和 T5T_REQ_FLAG_DED)

    g_pui8T5TBuffer[ui8Offset++]=(uint8_t)(g_ui16T5TBlockNumber >> 8);


    //要写入块的数据
    对于(ui8TempCount = 0;ui8TempCount < g_ui8T5xLength;ui8TempCount++)

    G_pui8TCTBuffer[ui8Offset++]= g_pui8TTTxData[ui8TempCount];


    //为 TRF 驱动器设置选项标志延迟 bool
    IF (g_ui8T5TRequestFlag 和 T5T_REQ_FLAG_OPTION)

    G_bT5OptionDelay = true;

    其他

    G_bT5OptionDelay = false;

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

    我错过了有关您的 API 调用的一些关键内容、因为我将再次进行审核。

    API 参数包括:flags、Block Number、Block Size 和 Block Data。 TI Tag-It 标签的块大小为4字节大小。 因此、您应该对该参数使用0x04、而不是0x06。 使用0x06会发生的情况是、您将发送2个额外的字节、这使其成为对标签的非法命令、并且不会回复。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    您回答正确、现在我可以写"确定"。 非常感谢您的患者支持。