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.

[参考译文] TRF7962A:代码确认

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1095407/trf7962a-code-confirmation

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

您好的团队:  

 我的客户希望编写一 个多块函数代码、以便更方便。但在调试过程中发现一些错误、g_pui8TrfBuffer[0] 返回0x01作为失败状态。

 您能不能帮助确认是否存在用于 writeMultiblock 函数的任何参考代码。

 客户代码如下所示:

  代码如下所示:

 

uint8_t ISO15693_sendWriteMultipleBlock (uint8_t ui8ReqFlag、uint8_t ui8FirstBlock、uint8_t ui8NumberOfBlock、uint8_t ui8DataLen、uint8_t * pui8BlockData)

         uint8_t ui8Offset = 0;

         uint8_t ui8Status = STATUS_FAIL;

         uint8_t ui8LoopCount = 0;

         ui8ReqFlag = ui8ReqFlag | 0x20;                 //强制使用寻址写入-强烈建议的做法

         G_pui8TrfBuffer[ui8Offset++]= 0x8F;          //复位 FIFO

         G_pui8TrfBuffer[ui8Offset++]= 0x91;          //使用 CRC 发送

         G_pui8TrfBuffer[ui8Offset++]= 0x3D;          //连续写入

         G_pui8TrfBuffer[ui8Offset++]=((((0x0C+ui8DataLen)& 0xF0)>> 0x04);    //数据包长度(以字节为单位)-传输字节长度的上半字节和中半字节

         G_pui8TrfBuffer[ui8Offset++]=((0x0C+ui8DataLen)<< 0x04);                        //数据包长度(以字节为单位)-发送字节长度的较低半字节和不完整半字节

         G_pui8TrfBuffer[ui8Offset++]= ui8ReqFlag;// ISO15693标志

         G_pui8TrfBuffer[ui8Offset++]= 0x24;                    //编写单块命令代码

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[0];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[1];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[2];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[3];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[4];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[5];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[6];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[7];         //标记 UID

         G_pui8TrfBuffer[ui8Offset++]= ui8FirstBlock;

         G_pui8TrfBuffer[ui8Offset++]= ui8NumberOfBlock;                    //块#(变量、对于 HF-I Plus 器件可转至0x3F、Pro 和 Standard、由"error"响应标志处理)

         对于(ui8LoopCount = 0;ui8LoopCount < ui8DataLen;ui8LoopCount++)

         

                    G_pui8TrfBuffer[ui8Offset++]= pui8BlockData[ui8LoopCount];                     //要写入标签的数据

         

         TRF79xxA_writeRaw (&g_pui8TrfBuffer[0]、ui8Offset);                    //发出获取系统信息命令

         G_sTrfStatus = TRF79xxA_getTrfStatus ();

         //对 TI Tag-It HF-I ISO15693应答器的选项标志用例进行特殊处理

         if (g_sTrfStatus = TRF_IDLE || g_sTrfStatus = TX_WAIT)

         

                    //检查是否设置了选项标志

                    IF (ui8ReqFlag & 0x40)

                    

                              TRF79xxA_waitTxIRQ (10);         // 10毫秒 TX 超时

                              G_sTrfStatus = TRF79xxA_getTrfStatus ();

                              如果(g_sTrfStatus = TX_COMPLETE)    //发送完成

                              

                                        MCU_delayMillisecond (10);

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

                                        TRF79xxA_waitRxIRQ (30);                                       // 30毫秒 RX 超时

                              

                              否则                                                                          //否则返回错误

                              

                                        返回 ui8Status = STATUS_FAIL;

                              

                    

                    其他

                    

                              TRF79xxA_waitTxIRQ (10);         // 10毫秒 TX 超时

                              TRF79xxA_waitRxIRQ (30);         // 30毫秒 RX 超时

                    

         

         否则、如果(g_sTrfStatus = TX_COMPLETE)

         

                    //检查是否设置了选项标志

                    IF (ui8ReqFlag & 0x40)

                    

                              MCU_delayMillisecond (10);

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

                    

 

                    TRF79xxA_waitRxIRQ (30);                                      // 30毫秒 RX 超时

         

         其他

         

                    返回 ui8Status = STATUS_FAIL;

         

 

         G_sTrfStatus = TRF79xxA_getTrfStatus ();

 

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

         

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

                    

                              //收到的答复

                              ui8Status = STATUS_SUCCESS;

                    

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

                    

                              ui8Status = STATUS_FAIL;

                    

         

         其他

         

                    //无响应

                    ui8Status = STATUS_FAIL;

         

         返回 ui8Status;

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

    您好、Allen、

    很抱歉耽误你的回答。 上周我不在办公室、不幸的是、我在接下来的3天里很忙。 然后、我将查看您的请求。

    此致、

    Andreas。

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

    尊敬的 Andreas:

     希望您工作正常。如果有任何关于 writeMultiblock  函数的评论,我可以向客户获取一些更新。

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

    您好、Allen、

    根据我的快速检查、写入多个块函数的实现看起来是合理的。

    是否可以分析响应错误代码(响应中的第二个字节)?

    不幸的是、我没有找到此类功能的示例。 固件 中实现了一个读取多块(文件"nFC_rw_t5t.c"中的"F5529LP_TRF7970A_All_NFC_modes")、但没有这样的写入。

    此致、

    Andreas。

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

    尊敬的 Andreas:

     您是否愿意支持此 Write Multiple Block 函数? 一方面、我们可以改进设计优化、另一方面、我们可以加快客户设计 过程。  

     

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

    您好、Allen、

    抱歉、我没有为您进行代码开发的带宽。

    此致、

    Andreas。

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

    您好、Allen、

    您对分析响应错误代码(响应中的第二个字节)是否有任何更新?

    BTW:很有可能、我在《 TRF7970A EVM 用户指南》 (第2.3-6章)中发现了一条注释、即编写多个块并不是任何应答器所支持的。

    此致、

    Andreas。

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

    尊敬的 Andreas:

     客户仍在进行此操作、但由于他们不熟悉此平台、因此进一步调试有点困难。

     根据您的最新反馈,这是否意味着我们尚未开发出可选功能?

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

    您好、Allen、

    是的、需要在两端、读取器和标签上都支持写入多个块命令。 如果标签不支持、则在读取器固件中实现此功能毫无意义。 根据我上一篇文章中的文档、没有支持此命令的标签(至少在编写此文档时)。

    标签返回的错误代码可能会确认不支持该代码。

    此致、

    Andreas。

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

    尊敬的 Andreas:

     我想与您再次核对 ISO15693标准、 写入 多 个块功能是 强制性的还是可选的?

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

    您好、Allen、

    写入多个块是 ISO15693-3中列出的可选命令。

    此致、

    Andreas。