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:与 Android 通信

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/878365/trf7970a-communicating-with-android

器件型号:TRF7970A
主题中讨论的其他器件: DLP-7970ABP

您好!

我只是想知道是否可以使用 TRF7970A 与 Android 手机通信?

我只是尝试发送 ISO7816 Select File 命令、但 TRF 没有从电话中获取响应。

我为此编写了一个应用程序、并使用不同的 NFC 控制器/天线进行了测试、它可以完美地与4台不同的 Android 手机配合使用。

是否需要为此配置特定的寄存器、因为我开发的系统用于与 DESFire 卡(工作正常)进行通信、并且我已相应地配置 TRF 寄存器?

谢谢你

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

    更新:

    我刚刚将 NFC TI 工具与连接的 DLP-7970ABP 一起使用、并且能够检测到 Android 手机。 因此、我假设 ISO14443A 3和4正在成功执行。 我编写的固件也成功地完成了这两个过程。 发生故障的地方是接收到初始 ISO7816 Select File 命令的响应数据。 下面是我为该特定命令编写的代码:

    uint8_t Iso7816Commands__IsoSelectFile (uint8_t P2、uint16_t FileID、uint8_t * dfName、uint8_t dfSize)
    {
    uint8_t status = error; /*初始化返回状态*/
    uint8_t bufSize = 0x00; /*要发送到 TRF FIFO 的字节数*/
    uint8_t * buf = NFC_data.buf; /* TRF FIFO 数据缓冲器*/
    
    buf[bufSize++]= 0x8F;
    buf[bufSize+]= 0x93;//带有 CRC 的延迟发送*/
    buf[bufSize++]= 0x3D; 
    /*计算 TRF 必须发送到标签的字节数*/ uint16_t numBytes = 0x0006 + dfSize; buf[bufSize+]=(uint8_t)(numBytes >> nytes); buf[bufSize+]]=(uint8_t)(0x000F < nytes); /* ISO/IEC 7816-4 C-APDU (命令应用协议数据单元)*/ buf[bufSize+]= 0x00;/*标准 ISO/IEC 7816-4命令 CLA 必须为0x00 */ buf[bufSize+]= iso_select_file_CMD;/* 0xA4 */ buf[buf[bufs]+=dfsize]=使用 buf+[bufsize] ;/buf=bufs+[bufs+]=df=dfs/set_buf_buf=dfs+=df_buf=dfs+] /*数据字段的长度*/
    /*填充数据字段并更新缓冲区大小*/ memcpy (&buf[bufSize]、&dfName[0]、dfSize); bufSize += dfSize; buf[bufSize+]]= LE; /*预期响应长度- 0x00 =所有可用数据*/* 传送命令*/ Trf797x_Rawwrite (&buf[0]、bufSize); HAL_delay (5); //等待 ISO/IEC 7816-4 R-APDU (Response APDU)响应来自 TAG */* /* Timeout = 26ms ***/ TRF97x* (如果已到达)*/ TRF97xSTATE = 0xSTATE (*)*(TRFREWIT_TRF975*)*(TRF871_) sprintf (printBuf、"UID:%02x %02x %02x %02x %02x %02x %02x %02x\r\n"、buf[0]、buf[1]、buf[2]、buf[3]、 buf[4]、buf[5]、buf[6]); printDebug (printBuf); } 否则 { sprintf (printBuf、"ISO 选择文件命令错误:%02x\r\n"、Trf797x__GetState(); printDebug (printBuf); } 返回状态; }

    问题^是中的响应从未收到。

     

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

    您好、Wilmer、

    很高兴您能够尝试使用 TI NFC 工具、并看到该器件能够与 NFC 标签通信

    一般而言、我们不支持重新制作那一级别的 NDEF 处理、因为我们花费了大量的开发工作和调试工作来提供这种处理、包括测试和 NFC 标准。 我可以提供一两个指针、但我们不会再投入时间、因为 TI NFC 堆栈工作正常、应按原样用于此类应用。

    您应该非常强烈地考虑将您作为附加应用程序所做的 DESFire 工作移植到此应用程序中。 您以前询问 DESFire 时并不清楚、您后来需要完整的 NFC 功能、或者我可能建议您在更早的时候采取这些步骤。 如果您需要添加其他 NFC 协议(类型2/3/5)、这将完全省去您长时间的工作、而不是重做堆栈。 我们花了几个月的时间开发读/写器模式堆栈。

    该堆栈还能够支持具有 ISO_7816_4_sendAPDU 和 ISO_7816_4_getWriteAPDUStatus 等 API 的专有标签。

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

    您好!

    我正在尝试在我自己的系统上执行此操作。 系统只需支持 ISO 14443A 类型标签。 我刚刚使用 TI NFC 工具来验证是否可以使用 TRF7970A 检测 Android 手机。 使用我编写的 FW、我可以将上面显示的命令发送到各种 DESFire 卡、并且能够接收响应。 我只是想知道原因是、当我尝试使用 Android 时、TRF 没有收到响应。 我为它编写的应用程序已经过测试、并正在使用不同的 RFID 收发器进行正常工作。

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

    您好、Wilmer、

    快速检查了我们的一个更易于阅读的示例、您丢失了 I 块 PCB +块位编号字节。

    G_pui8TrfBuffer[ui8Offset++]= 0x8F;//复位 FIFO
    G_pui8TrfBuffer[ui8Offset++]= 0x91;//使用 CRC 发送
    G_pui8TrfBuffer[ui8Offset++]= 0x3D;//连续写入
    G_pui8TrfBuffer[ui8Offset++]= 0x00;//数据包长度(以字节为单位)-发送字节长度的上半字节和中半字节
    G_pui8TrfBuffer[ui8Offset++]= 0x80;//数据包长度(以字节为单位)-发送字节长度的较低半字节和不完整半字节
    G_pui8TrfBuffer[ui8Offset++]= 0x02 | g_BClockNumberBit;// I 块 PCB:读取块0或块1、CID = 0、NAD = 0、无链
    G_pui8TrfBuffer[ui8Offset++]= 0x00;// CLA
    G_pui8TrfBuffer[ui8Offset++]= 0xA4;// INS =选择(本例中为文件)
    G_pui8TrfBuffer[ui8Offset++]= 0x00;
    G_pui8TrfBuffer[ui8Offset++]= 0x0C;
    G_pui8TrfBuffer[ui8Offset++]= 0x02;
    G_pui8TrfBuffer[ui8Offset++]=((ui16FileID >> 8)& 0xFF);
    G_pui8TrfBuffer[ui8Offset++]=(ui16FileID 和0x00FF);

    此外、不确定延迟传输是否适合您、我始终使用通过命令0x91通过 CRC 发送。

    希望这个缺失的字节能够解决问题。 NDEF 有时很难使一切正常。

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

    非常感谢!

    这是 PCB 字节!

    在哪里可以找到有关这方面的更多信息?

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

    在 Android 设备发送的响应中、是否也应将此 PCB 字节添加到 R-APDU?

    RX 端仍然有问题。 是否需要在 RX 响应中将其他直接模式配置为具有 CRC 的长模式?

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

    您好、Wilmer、

    [引用 user="Wilmer Suarez"]在哪里可以找到有关[ PCB 字节]的更多信息?

    这在 ISO14443-4中定义、并在 NFC 论坛规范中进行了详细阐述。 我们参考了直接规格、不确定是否有互联网资源。 如果您在这一级别进行开发、我认为获得这些规格是非常宝贵的。

    [引用 USER="Wilmer Suarez"]此 PCB 字节是否也应该添加到 R-APDU 中-在 Android 设备发送的响应中?

    响应发送的一个字节将是一个 PCB 字节。 这是您可以用来解码接收到的回复类型的内容、例如、您可能只获得回复中的 R-Block (R-APDU)、而不是包含数据的 I-Block。 您还需要支持 S 块以延长等待时间。

    [引用 user="Wilmer Suarez"] RX 端仍然有问题。 是否需要在 RX 响应中使用 CRC 配置一个较长的不同直接模式?

    否、您只想使用直接模式2。 不同的直接模式只对非 ISO 投诉标签有帮助。

    您可能需要调整 ISO 控制寄存器、以确定是否查找 RX CRC。 这是寄存器的位7。 当您在第4层时、一切都有 CRC。 有时、标签检测过程中不存在 CRC。

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

    非常感谢您的回复。 我成功地使它正常工作。 不过、似乎只有一些手机能够正常响应。