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.

[参考译文] CC2564MODN:A3DP 源代码演示

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1213434/cc2564modn-a3dp-source-demo

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

您好!

作为新产品开发的第一步、我成功地在定制 STM32F4板上运行了 A3DP 灌电流演示项目。 现在、我要尝试让 A3DP 源代码演示在同一电路板上工作。

我正在以 Noos 模式使用 CC2564CSTBTBLESW-v5.1.1封装中的代码库。 我遵循"CC2564x 演示应用用户指南"中的步骤(请参阅 swru580、第4章)。

我可以成功地将蓝牙耳机与电路板配对和连接、但打开流媒体时收到错误消息。 以下是所发生的操作链、参阅 A3DPDemo_SRC.c

  1. 使用 etAUD_Stream_Open_Confirmation  事件类型调用 AUD_Event_Callback
  2. 这会触发对 OpenA3DPStream 的调用
  3. 这会触发对 AUD_Query_Stream_Channel_Information 的调用

后者将失败并返回-1006。 在调用之后、StreamChannelInfo 结构填充如下:

InMTU = 1100、OutMTU = 0、LocalCID = 1、RemoteCID = 0

我尝试用这块板的另一副本替换耳机、这次运行散热器演示。 我得到相同的行为。

由于  AUD_Query_Stream_Channel_Information 函数的源代码不可用、您能否帮助我解决此问题?

提前感谢。

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

    尊敬的 Martin:

    您收到的-1006错误代码来自 Bluetopia 内部函数: GAVD_GET_Channel_Information ()。  

    此函数的作用是"获取 与本地端点相关联的 L2CAP 通道的信息"。  

    -1006表示"BTGAVD_ERROR_INVALID_OPERATION"。 在这种情况下、只有在以下情况下才会发生这种情况:找不到流端点、流终点不是打开/流化的、或者找不到 L2CAP 信息。 问题很可能出现在前两个问题中。 希望这些信息可以帮助您调试问题。

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

    "我不知道你在胡说什么,但我知道你不会同意的。"

    如何检查我的流端点有什么问题? 此流端点是指耳机(即声音接收器)还是我将音频数据馈入 CC2564的 PCM 接口(即声源)?

    我从代码中看到、我还没有深入到将 PCM 接口配置为声音传入的输入的位置(ReconfigureA3DPStream -> initializeAudio)。 但是、这个电话是在我对原始 A3DP 源代码中的 AUD_Query_Stream_Channel_Information 进行了有问题的电话之后进行的、因此我不认为尚未配置的 PCM 是我的问题。

    如果问题出现在耳机侧、是否有任何有关诊断内容的提示? 这似乎与 swru580用户指南中使用的蓝牙扬声器基本相同。 或者、是否耳机正在使用不同的配置文件(HSP 与 A2DP)、这会导致 AUD_Query_Stream_Channel_Information 失败?

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

    尊敬的 Martin:

    很可能是耳机正在尝试使用不同的配置文件、但由于 A2DP 很常见、我会怀疑这一点、尤其是使用另一个 CC2564C 板时不起作用。  在这种情况下、所指的端点应位于本地端、而不是 PCM 接口、因为它是指内部蓝牙服务。

    我能想到几件事:

    • 您是否对演示代码进行了任何更改或者是否按原样运行? 您是否有权访问终端? 如果是、我假设在 AUD_Initialize_V1等之前的初始化函数中没有错误?
    • 您可以使用演示的 OPENSINK 命令来调用 AUD_Open_Remote_Stream(),并让我知道行为是否有任何差异,而不是从接收端(耳机)初始化连接。
    • 如果所有其他选项都失败、您是否有权访问 CC2564C 上的调试引脚? 您是否能够使用 BT Logger 工具收集 HCI 日志
      • 此日志包含的信息可能对帮助我们找出问题非常有用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel、您好!

    感谢您的宝贵反馈。

    -我已经再次导入了原始演示代码并仅进行了必要的更改以适应我们的硬件,并使用了 v1.8软件包中的 CC256XB.h 补丁。 问题仍然存在。 我可以访问终端。 在所描述的错误之前、我没有看到任何错误。

    -我一直使用"opensink"命令来连接耳机。 我强制耳机开始重新配对、然后运行"查询"以查找其索引、最后运行"opensink" "。 请查看一个示例输出。 我添加了更多的诊断输出、在 linestart 上用#表示:

    OpenStack().
    Bluetooth Stack ID: 1
    A3DP Source Feature enabled.
    Device Chipset: 4.1
    BTPS Version  : 5.1.1.1
    PLAT Version  : 1.0
    App Name      : STM32-TI-BT-SRC
    App Version   : 0.2
    Project Type  : 6
    FW Version    : 7.42
    Local BD_ADDR: 0xD8B673934117
    EIR Data Configured Successfully (Device Name STM32-TI-BT-SRC-934117).
    A3DP Endpoint opened successfully.
    Class of Device: 0x100428.
    Supported formats:
       Frequency: 44100, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 1, Flags: 0
       Frequency: 44100, Channels: 1, Flags: 0
    
    ******************************************************************
    * Command Options: Inquiry, DisplayInquiryList, Pair,            *
    *                  EndPairing, PINCodeResponse, PassKeyResponse, *
    *                  UserConfirmationResponse,                     *
    *                  SetDiscoverabilityMode, SetConnectabilityMode,*
    *                  SetPairabilityMode, SetBaudRate               *
    *                  ChangeSimplePairingParameters,                *
    *                  GetLocalAddress, GetLocalName, SetLocalName,  *
    *                  GetClassOfDevice, SetClassOfDevice,           *
    *                  GetRemoteName, OpenSink, CloseSink, Play,     *
    *                  Pause, Help                                   *
    ******************************************************************
    
    A3DP+SRC>inquiry
    
    A3DP+SRC>
    Inquiry Entry: 0xD8B67394547E.
    
    A3DP+SRC>
    Inquiry Entry: 0x000D44D18552.
    
    A3DP+SRC>
      Result: 1,0xD8B67394547E.
      Result: 2,0x000D44D18552.
    
    A3DP+SRC>opensink 2
    
    AUD_Open_Remote_Stream success.
    
    A3DP+SRC>
    atLinkKeyRequest: 0x000D44D18552
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>
    atIOCapabilityRequest: 0x000D44D18552
    
    Auth success.
    
    A3DP+SRC>
    atIOCapabilityResponse: 0x000D44D18552
    Capabilities: No Input/Output
    
    A3DP+SRC>
    atUserConfirmationRequest: 0x000D44D18552
    
    Auto Accepting: 403903
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>Un-handled Auth. Event. // I checked that the event type here is 11 = atSecureSimplePairingComplete
    
    A3DP+SRC>
    atLinkKeyCreation: 0x000D44D18552
    Link Key Stored.
    
    A3DP+SRC>
    atAuthenticationStatus: 0 for 0x000D44D18552
    
    A3DP+SRC>
    etEncryption_Change_Result for 0x000D44D18552, Status: 0x00, Mode: Enabled.
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Open_Indication
    BD_ADDR:  0x000D44D18552
    
    A3DP+SRC>
    etAUD_Stream_Open_Confirmation
    Status:      0
    BD_ADDR:     0x000D44D18552
    MediaMTU:    895
    # StreamChannelInfo: InMTU=1100, OutMTU=0, LocalCID=1, RemoteCID=0 // This is the state after calling AUD_Query_Stream_Channel_Information()
    # AUD_Query_Stream_Channel_Information=-1006 // This is the value returned by AUD_Query_Stream_Channel_Information()
    
    A3DP+SRC>
    etAUD_Remote_Control_Open_Indication
    BD_ADDR:     0x000D44D18552
    
    A3DP+SRC>

    -我记录了一个 HCI 日志,覆盖了时间间隔显示在上面的终端。 您可以在此处暂时找到该 文件:ufile.io/w92yfako、或者我让您指出另一种与您共享该文件的方法。

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

    尊敬的 Martin:  

    您可以回复此主题、在起草回复时、单击 Insert (插入)> Image/Video/File (图像/视频/文件)>、然后从文件系统中选择 HCI 日志。

    在这种情况下,我已经通过我的电子邮件地址在平台上向您发送了一个朋友的请求。 如果以上方法因某种原因不起作用、请发送 HCI 日志、因为我无法在 TI 网络上打开您的链接。

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

    Daniel、您好!

    我无法附加此类文件类型。 因此我将其重命名为*。lgr ->*。png。 我也通过电子邮件发送了原件,以防万一。

    编辑: Hmm,虽然重命名使文件上载成为可能,这似乎仍然不能下载它。

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

    尊敬的 Martin:

    为以后查看此主题的任何人重新上传日志: e2e.ti.com/.../source_2D00_demo_2D00_log.lgr

    根据您给出的终端输出 、似乎不存在问题。 通过日志、在(我认为是的)补丁正在上传到器件的同时、AVPR_Enable 的命令 Complete 被丢弃。 您能否确认您是否正在将最新服务补丁与 CC2564B 的 AVPR 附加组件配合使用?  CC256XB-BT-SP 驱动程序或库| TI.com

    此外、您使用的耳机似乎支持与蓝牙3.0相关的旧版本 LMP。 您是否能够使用较新的耳机测试您的设置或更新固件?

    此致、

    但以理

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

    Daniel、您好!

    -我正在使用 v1.8软件包中的 CC256XB.h 补丁,该软件包可以通过您的链接获得。 从一开始就出现了这种情况。

    -仅供参考,运行接收器演示时,我也看到 HCI_Protocol_Viewer_Message_was_Drop_Event ,即运行的演示。

    -这是我唯一的耳机在我的处置,我无法更新它。 但是、当我将耳机替换为接收器演示板时、我获得了较新的 LMP 版本、但问题仍然存在:

    -我想重新检查一件事:在我得到这个错误的阶段(当调用 AUD_Query_Stream_Channel_Information 时),它还不重要的是音频数据将来自哪里,对吗? 也就是说、我们仅在这里在 BT 堆栈级别上建立流、音频的配置晚了、不能是导致此错误的原因?

    -是否有任何机会得到的源代码的库给出了这个错误? 我明白、如果不从返回此错误的代码中获取更多信息、对您来说是很难、对我来说也是不可能的。 但是、我看到(例如 在这里)其他人设法让该演示正常工作、我想继续。

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

    尊敬的 Martin:

    这是 A3DP 的正确程序流程、如果您没看到该文档的话、取自本文档。 其中可能包含一些有助于您理解问题的背景信息: e2e.ti.com/.../0285.CC256x-Advanced-Voice-and-Audio-Features.pdf

    正如您从图表中以及在下面的函数说明中看到的、它只提取 L2CAP 通道信息、任何与设置编解码器(PCM/I2S)相关的信息都是在打开流后提供的。 这可能是设置正确的 ACL 连接失败,因此无法获取 L2CAP 信息?

    尽管考虑到 ACL 上似乎存在某种流量,这是奇怪的:

    基本级别 HCI 设置中是否有需要更改的内容? 您可以尝试在 HCLL 以外的 UART 模式下初始化程序、从而减慢 UART 等 很遗憾、我目前无法提供进一步的反馈、但如果您在此过程中有任何其他问题、可以继续在 E2E 上发布。

    /* The following function is used to get information about the L2CAP */
       /* channels associated with this endpoint.  This function accepts as */
       /* input the Bluetooth Stack ID, the Local Endpoint ID, and the      */
       /* channel type to query.  The last parameter is a pointer to a      */
       /* buffer that is to receive the current L2CAP Channel Information   */
       /* that are being used by the specified endpoint.  This function     */
       /* returns zero if successful or a negative return error code if     */
       /* there was an error.                                               */
       /* * NOTE * This function returns an error if the specified Channel  */
       /*          Type is trNone.                                          */
    int BTPSAPI GAVD_Get_Channel_Information(unsigned int BluetoothStackID, unsigned int LSEID, GAVD_Transport_Channel_Type_t ChannelType, GAVD_Channel_Info_t *ChannelInfo)

    除了此级别的详细信息、我无法向您提供源代码。 也就是说、它更像是一个兔子洞、比现在更像、因为它本质上是一个获取内部 Bluetopia 信息的功能。  

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

    Daniel、您好!

    我还没有放弃,我希望你不要厌倦我。

    我切换到使用 A3DP Sink Demo 项目而不是耳机、以消除旧的 LMP 版本问题并获得更多诊断。 我可以看到、当 AUD_Query_Stream_Channel_Information 函数连接到源板时、它在接收板上被成功调用:

    接收器:

    OpenStack().
    Bluetooth Stack ID: 1
    Device Chipset: 4.1
    BTPS Version  : 5.1.1.1
    PLAT Version  : 1.0
    App Name      : Test-SNK
    App Version   : 0.2
    Project Type  : 6
    FW Version    : 7.42
    BD_ADDR: 0xD8B67394547E
    A3DP endpoint opened successfully.
    Class of Device: 0x040424.
    Supported formats:
       Frequency: 44100, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 1, Flags: 0
       Frequency: 44100, Channels: 1, Flags: 0
    
    ******************************************************************
    * Command Options: Inquiry, DisplayInquiryList, Pair,            *
    *                  EndPairing, PINCodeResponse, PassKeyResponse, *
    *                  UserConfirmationResponse,                     *
    *                  SetDiscoverabilityMode, SetConnectabilityMode,*
    *                  SetPairabilityMode, SetBaudRate               *
    *                  ChangeSimplePairingParameters,                *
    *                  GetLocalAddress, GetLocalName, SetLocalName,  *
    *                  GetClassOfDevice, SetClassOfDevice,           *
    *                  GetRemoteName, OpenSink, CloseSink,           *
    *                  RemotePlay, RemotePause, RemoteNext,          *
    *                  RemotePrev, Help                              *
    ******************************************************************
    
    
    A3DP+SNK>
    atIOCapabilityResponse: 0xD8B673934117
    Capabilities: No Input/Output
    
    A3DP+SNK>
    atIOCapabilityRequest: 0xD8B673934117
    
    Auth success.
    
    A3DP+SNK>
    atUserConfirmationRequest: 0xD8B673934117
    
    Auto Accepting: 369163
    
    GAP_Authentication_Response success.
    
    A3DP+SNK>Un-handled Auth. Event.: 11
    
    A3DP+SNK>
    atLinkKeyCreation: 0xD8B673934117
    Link Key Stored.
    
    A3DP+SNK>
    etAUD_Signalling_Channel_Open_Indication
    BD_ADDR:  0xD8B673934117
    
    A3DP+SNK>
    Unhandled AUD event: 25
    
    A3DP+SNK>
    etAUD_Stream_Open_Indication
    BD_ADDR:     0xD8B673934117
    MediaMTU:    800
    # StreamType:  SNK
    # StreamFormat:
    #   SampleFrequency: 44100
    #   NumberChannels:  2
    #   FormatFlags:     0
    # SyncSource:   1
    # BluetoothStackID=1
    # BD_ADDR=0xD8B673934117
    # StreamChannelInfo: InMTU=800, OutMTU=800, LocalCID=129, RemoteCID=129
    # AUD_Query_Stream_Channel_Information()=0
    # GAP_Query_Connection_Handle()=0
    # ConnHandle=1
    Status: VS_A3DP_Sink_Open_Stream(): 0
    
     Send HCI Flow Spec for guaranteed ACL connection
    # HCI_Flow_Specification()=0
    
     Send HCI VS DDIP for ACL priority over scans
    # VS_Send_DDIP()=0
     Initialize audio with Sample Freq: 44100
    
     I2S configuration start f = 44100
    
    A3DP+SNK>
    etAUD_Remote_Control_Open_Indication
    BD_ADDR:     0xD8B673934117
    
    A3DP+SNK>
    

    来源:

    OpenStack().
    Bluetooth Stack ID: 1
    A3DP Source Feature enabled.
    Device Chipset: 4.1
    BTPS Version  : 5.1.1.1
    PLAT Version  : 1.0
    App Name      : STM32-TI-BT-SRC
    App Version   : 0.2
    Project Type  : 6
    FW Version    : 7.42
    Local BD_ADDR: 0xD8B673934117
    EIR Data Configured Successfully (Device Name STM32-TI-BT-SRC-94547E).
    A3DP Endpoint opened successfully.
    Class of Device: 0x100428.
    Supported formats:
       Frequency: 44100, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 1, Flags: 0
       Frequency: 44100, Channels: 1, Flags: 0
    
    ******************************************************************
    * Command Options: Inquiry, DisplayInquiryList, Pair,            *
    *                  EndPairing, PINCodeResponse, PassKeyResponse, *
    *                  UserConfirmationResponse,                     *
    *                  SetDiscoverabilityMode, SetConnectabilityMode,*
    *                  SetPairabilityMode, SetBaudRate               *
    *                  ChangeSimplePairingParameters,                *
    *                  GetLocalAddress, GetLocalName, SetLocalName,  *
    *                  GetClassOfDevice, SetClassOfDevice,           *
    *                  GetRemoteName, OpenSink, CloseSink, Play,     *
    *                  Pause, Help                                   *
    ******************************************************************
    
    A3DP+SRC>inquiry
    
    A3DP+SRC>
    Inquiry Entry: 0xD8B67394547E.
    
    A3DP+SRC>
      Result: 1,0xD8B67394547E.
    
    A3DP+SRC>opensink 1
    
    AUD_Open_Remote_Stream success.
    
    A3DP+SRC>
    atLinkKeyRequest: 0xD8B67394547E
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>
    atIOCapabilityRequest: 0xD8B67394547E
    
    Auth success.
    
    A3DP+SRC>
    atIOCapabilityResponse: 0xD8B67394547E
    Capabilities: No Input/Output
    
    A3DP+SRC>
    atUserConfirmationRequest: 0xD8B67394547E
    
    Auto Accepting: 369163
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>Un-handled Auth. Event.: 11
    
    A3DP+SRC>
    atLinkKeyCreation: 0xD8B67394547E
    Link Key Stored.
    
    A3DP+SRC>
    atAuthenticationStatus: 0 for 0xD8B67394547E
    
    A3DP+SRC>
    etEncryption_Change_Result for 0xD8B67394547E, Status: 0x00, Mode: Enabled.
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Open_Indication
    BD_ADDR:  0xD8B67394547E
    
    A3DP+SRC>
    etAUD_Stream_Open_Confirmation
    Status:      0
    BD_ADDR:     0xD8B67394547E
    MediaMTU:     800
    # StreamType:   SRC
    # StreamFormat:
    #   SampleFrequency: 44100
    #   NumberChannels:  2
    #   FormatFlags:     0
    # SyncSource:   1
    # BluetoothStackID=1
    # Data->BD_ADDR=0xD8B67394547E
    # StreamChannelInfo: InMTU=1100, OutMTU=0, LocalCID=1, RemoteCID=0
    # AUD_Query_Stream_Channel_Information()=-1006
    
    A3DP+SRC>
    etAUD_Remote_Control_Open_Indication
    BD_ADDR:     0xD8B67394547E
    
    A3DP+SRC>
    


    所以我开始看看不对称发生的地方。 我看到这两个电路板启动时记录的调试日志的差异(直到此处、它们的行为几乎相同):

    接收器:

    来源:



    从突出显示的行中可以看到、我收到了"A3DP:init..." 消息后跟一个"A3DP 受电方:init..." 绿色波形消息。 另一方面、我收到一个"A3DP:init..." 消息在源板上显示两次、而为了对称性、我希望第二个消息是"A3DP 源:init..." 或类似的东西。

    您能否提示我这些消息来自哪里、以及是否预计会出现这种灌电流-拉电流差异?

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

    尊敬的 Martin:

    这些消息通常在启动期间发送、同时器件正在写入和处理补丁。 由于补丁的性质、获取多个事件并非意外。 例如、以下是  在其他日志中发生的样例: