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.

[参考译文] CC2564C:HCI 数据包损坏

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1131807/cc2564c-hci-packets-getting-corrupted

器件型号:CC2564C
主题中讨论的其他器件: CC2564

  

我们的项目是 STM32+CC2564C、使用 SPPdemo 通信、封装参数是:1010 2020 3030、通信距离较长后、主机的软件在通信过程中将突然不接收反馈、
我们捕获了 HCI 数据、发现 CC2564输出的 HCI 数据中的数据存在错误、这应该是由空气中的数据传输引起的。 STM32应用层也未接收 etPort_Data_indication
3.这种错误是否将相应的事件信息传输到 PC 软件? 或者 Bluetopia 会将相应的错误事件发送到 SPP_Event_Callback 应用层。 SPP_Event_Type_t 结构中似乎没有错误事件信息。
typedef 枚举

etPort_Open_indication、/*!<表示已建立远程端口打开连接。 *
etPort_Open_Confirmation、/*!<确认端口打开请求已被响应或发生错误。 *
etPort_Close_Port_Indication、/*!<表示端口已关闭(未注册)。 *
etPort_Status_Indication、/*!<表示已收到端口状态的更改。 *
etPort_Data_indication、/*!<表示数据已到达端口。 *
etPort_Transmit Buffer_empty_indication、/*!<指示传输缓冲区何时为空(仅当传输缓冲区已满或调用了 SPP_Purge_Buffer ()函数时具有清除缓冲区的选项)。 *
etPort_Line_Status_Indication、/*!<表示已收到行状态的更改。 *
etPort_Send_Port_Information_indication、/*!<表示已接收到远程设备的端口参数(开始参数协商)。 *
etPort_Send_Port_Information_Confirmation、/*!<确认已收到发送端口参数命令的响应。*/
etPort_Query_Port_Information_indication、/*!<指示已收到发送当前端口参数的请求。 *
etPort_Query_Port_Information_Confirmation、/*!<确认已收到对发送当前端口参数的请求的响应。 *
etPort_Open_Request_Indication /*!<表示已收到远程端口打开请求。 *
} SPP_Event_Type_t;

4. HCI 接收到数据错误、无法解码并将相应的事件信息发送到 STM32的 SPP_Event_Callback。 在这种情况下是否会出现错误消息? 如何将错误消息发送到 PC 主机并让其 重新发送数据?

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

    补充信息:正确的数据包标头应如下所示: 0x02 0x01 0x20 0xFC  0x03  0xf8 0x03 0x83 0x00 0x0B 0xFF 0xE4 0x07 0x00……
    CC2564至 STM32数据线的实际数据为:                     0x02 0x01 0x20 0xFC  0x00  0xf8 0x03 0x83 0x00 0x0B 0xFF 0xE4 0x07 0x00……
    长度信息错误、然后解码器不会将回调信息发送到 SPP_Event_Callback。

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

    你好、Xudong、

    您能否根据 本指南获取 HCI 日志?  

    [引用 userid="494183" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1131807/cc2564c-hci-packets-getting-corrupted ]4. HCI 接收到数据错误、无法解码并将相应的事件信息发送到 STM32的 SPP_Event_Callback。 在这种情况下是否会出现错误消息? 如何将错误消息发送到 PC 主机并让其 重新发送数据?

    您能解释一下在哪里接收到 HCI 数据错误吗? 您是否在 STM32/CC2564C 设置或 PC 上看到 HCI 数据包错误? 您共享的任何日志或错误代码都很有用。

    谢谢、

    Jacob

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

    e2e.ti.com/.../Error_5F00_220905.rar

    您好!

     附件是捕获的日志,因为问题有时会发生,一小时内出现1或2次。

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

    e2e.ti.com/.../AutoSave-Session-01-_2D00_-_2300_0076.rar

    您好!

      Jacob、我们发现了数据错误问题、因为 HCI 的波特率为4M、当数据错误问题降至2M 时、尚未发现。
    还有一个问题、即如何增加 RFCOMM 的信用额度。 我看到 RFCOMM 的 API 函数包括 RFCOMM_Send_Credits。 是否有使用此函数的示例?

    在通信过程中、由于无线数据包丢失、PC 端的点数不足、数据停止。 是否有任何方法可以主动增加 PC 端的信用?

     我们的应用是 PC 通过虚拟串行端口与蓝牙模块进行通信。 通信大约需要一个小时、有时需要两个小时、PC 端的数据无法发送。 PC 端必须断开串行端口连接并重新连接才能正常通信。 我们希望找到一种在不断开串行端口的情况下继续通信的方法。

     附件是通信中断前后的日志文件、整个过程的日志在那里、如果您需要、我将上传所有日志。

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

    您好 Xudong、

    我在 Error_220905.lgr 文件中看到错误:

    您的根像这样的原因是您使用的是4 Mbps 波特率、这是我们的最大值 很高兴您能够降低波特率。

    [引用 userid="494183" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1131807/cc2564c-hci-packets-getting-corrupted/4213113 #4213113"]还有一个问题,即如何增加 RFCOMM 的信用额度。 我看到 RFCOMM 的 API 函数包括 RFCOMM_Send_Credits。 是否有使用此函数的示例?

    我们没有示例、但您是否看过该函数的文档?

       /*! @brief The following function is used to send credits to an RFCOMM
        * channel that is currently open.
        * @param BluetoothStackID Unique identifier assigned to this Bluetooth
        * Protocol Stack via a call to BSC_Initialize
        * @param TEI Terminal Endpoint Identifier of channel.
        * @param DLCI Data Link Connection Identifier of channel.
        * @param Credits Number of credits to issue to the receiver (cannot be zero).
        * @return If the request was successfully submitted to the lower layer for
        * delivery zero is returned.  If an error occurred while submitting
        * the Credits, a negative value is returned that identifies the
        * reason for the failure.  It must be noted that this function is
        * only available for those channels that have been configured to use
        * Credit Based Flow control.
        * \note If this function returns the Error Code:
        *
        *             BTPS_ERROR_INSUFFICIENT_BUFFER_SPACE
        *
        *          then this is a signal to the caller that the requested
        *          data could NOT be sent because the requested data could
        *          not be queued in the Outgoing Data Queue.  The caller
        *          then, must wait for the
        *
        *             etTransport_Buffer_Empty_Indication
        *
        *          Event before trying to send any more data.
        */
    BTPSAPI_DECLARATION int BTPSAPI RFCOMM_Send_Credits(unsigned int BluetoothStackID, Word_t TEI, Byte_t DLCI, Byte_t Credits);

    您可能还需要查看 RFCOMM_Send_Data_With 计点()。

    谢谢、
    Jacob

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

    您好!

     Jacob,í a

      1.我查看了此 API,但无法获取 TEI 和 DLCI 参数,因此无法使用。 您能告诉我如何获取这两个参数吗?

      如果没有、您能告诉我如何获取所连接器件的通道 ID(LCID)?   

      BTPSAPI_Declaration int BTPSAPI L2CA_Data_Write (unsigned int BluetoothStackID、Word_t LCID、Word_t Data_Length、Byte_t * Data);

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

    您好 Xudong、

    如果在 Bluetopia 中找不到这些参数、我不确定如何获取这些参数。 您能否查看这些线程中的解决方案是否对您有所帮助?

    最棒的
    Jacob