ST意法半导体
直播中

云达贞

8年用户 957经验值
私信 关注
[问答]

BLE Audio CAP_UNICAST_SERVER_ASE_STATE_EVT状态变化异常的原因?

我在使用STM32WBA55G-DK1开发我的BLE Audio应用。我参考了ST提供的BLE_Audio_TMAP_Periopheral示例工程。

目前平板电脑连接我的应用正常,平板可以使能BLE Audio。但是当平板开始播放音乐的时候,BLE Audio协议栈上送的CAP_UNICAST_SERVER_ASE_STATE_EVT事件异常,其状态一开始是ASE_STATE_CODEC_CONFIGURED,然后是ASE_STATE_RELEASING。

作为对比,我使用BLE_Audio_TMAP_Periopheral进行测试,其CAP_UNICAST_SERVER_ASE_STATE_EVT状态是变化规律如下
ASE_STATE_CODEC_CONFIGURED->ASE_STATE_QOS_CONFIGURED->ASE_STATE_ENABLING->ASE_STATE_STREAMING。

是什么导致我的应用ASE状态没能从ASE_STATE_CODEC_CONFIGURED变迁到ASE_STATE_QOS_CONFIGURED?
下面是我的log

1204.392 CAP Event: 0x0d
1204.392 Preferred Server QoS Settings is requested for ASE ID 1 (Type ASE_SINK)
1204.392   Target Latency : TARGET_LATENCY_BALANCED_RELIABILITY
1204.392   Target Phy TARGET_LE_2M_PHY to achieve the Target Latency
1204.393   Codec ID
1204.393     Coding format : AUDIO_CODING_FORMAT_LC3
1204.393     Company id : 0x0000
1204.393     VS codec id : 0x0000
1204.393     Frequency : SAMPLE_FREQ_48000_HZ
1204.393     Frame Duration : FRAME_DURATION_10_MS
1204.393     Octets Per Codec Frame : 155
1204.393     Codec Frame Blocks Per SDU : 1
1204.393   Min Controller Delay in Source role 8336 us
1204.393   Max Controller Delay in Source role 110000 us
1204.393   Min Controller Delay in Sink role 4136 us
1204.393   Max Controller Delay in Sink role 50000 us
1204.393   Calculated SDU Interval : 10000 us
1204.393   num_snk_ases:2 num_src_ases:1
1204.393 ==>> CODEC_ReadLocalSupportedControllerDelay result 0x00
1204.394 ==>> CODEC_ReadLocalSupportedControllerDelay result 0x00
1204.394 Computed Min Controller Delay with 2 Snk ASEs and 1 Src ASEs : 14608 us
1204.394 WARNING : Controller Delay Min ( 14608 us) could be higher than the frame duration (10 ms)
1204.394 Submitted Min Presentation Delay 10010 us
1204.394 Submitted Max Presentation Delay 50010 us
1204.394 ==>> CODEC_ReadLocalSupportedControllerDelay result 0x00
1204.394 ==>> CODEC_ReadLocalSupportedControllerDelay result 0x00
1204.394 ==>> CODEC_ReadLocalSupportedControllerDelay result 0x00
1204.394 CAP Event: 0x0d
1204.395 Preferred Server QoS Settings is requested for ASE ID 2 (Type ASE_SINK)
1204.395   Target Latency : TARGET_LATENCY_BALANCED_RELIABILITY
1204.395   Target Phy TARGET_LE_2M_PHY to achieve the Target Latency
1204.395   Codec ID
1204.395     Coding format : AUDIO_CODING_FORMAT_LC3
1204.395     Company id : 0x0000
1204.396     VS codec id : 0x0000
1204.396     Frequency : SAMPLE_FREQ_48000_HZ
1204.396     Frame Duration : FRAME_DURATION_10_MS
1204.396     Octets Per Codec Frame : 155
1204.396     Codec Frame Blocks Per SDU : 1
1204.396   Min Controller Delay in Source role 8336 us
1204.396   Max Controller Delay in Source role 110000 us
1204.396   Min Controller Delay in Sink role 4136 us
1204.396   Max Controller Delay in Sink role 50000 us
1204.396   Calculated SDU Interval : 10000 us
1204.396   num_snk_ases:2 num_src_ases:1
1204.396 ==>> CODEC_ReadLocalSupportedControllerDelay result 0x00
1204.396 ==>> CODEC_ReadLocalSupportedControllerDelay result 0x00
1204.396 Computed Min Controller Delay with 2 Snk ASEs and 1 Src ASEs : 14608 us
1204.397 WARNING : Controller Delay Min ( 14608 us) could be higher than the frame duration (10 ms)
1204.397 Submitted Min Presentation Delay 10010 us
1204.397 Submitted Max Presentation Delay 50010 us
1204.397 CAP Event: 0x13
1204.397 Preferred Server Configuration for QoS Configuration:
1204.397   Framing:BAP_FRAMING_UNFRAMED
1204.397   Preferred PhyE_2M_PHY_PREFERRED
1204.397   PrefRetransmissionNumber:2
1204.397   MaxTransportLatency:5 ms
1204.397   PresentationDelayMin:10010 us
1204.397   PresentationDelayMax:50010 us
1204.398   PrefPresentationDelayMin:10010 us
1204.398   PrefPresentationDelayMax:50010 us
1204.398 Codec specific configuration for the ASE:
1204.398   CodingFormat:AUDIO_CODING_FORMAT_LC3
           CompanyID:0x00
           VsCodecID:0x00
1204.398 Audio Stream Endpoint State ASE_ID:1 Type:ASE_SINK State:ASE_STATE_CODEC_CONFIGURED
1204.399 CAP Event: 0x13
1204.399 Preferred Server Configuration for QoS Configuration:
1204.399   Framing:BAP_FRAMING_UNFRAMED
1204.399   Preferred PhyE_2M_PHY_PREFERRED
1204.399   PrefRetransmissionNumber:2
1204.399   MaxTransportLatency:5 ms
1204.399   PresentationDelayMin:10010 us
1204.399   PresentationDelayMax:50010 us
1204.399   PrefPresentationDelayMin:10010 us
1204.399   PrefPresentationDelayMax:50010 us
1204.399 Codec specific configuration for the ASE:
1204.399   CodingFormat:AUDIO_CODING_FORMAT_LC3
           CompanyID:0x00
           VsCodecID:0x00
1204.400 Audio Stream Endpoint State ASE_ID:2 Type:ASE_SINK State:ASE_STATE_CODEC_CONFIGURED
1204.630 CAP Event: 0x13
1204.631 Audio Stream Endpoint State ASE_ID:1 Type:ASE_SINK State:ASE_STATE_RELEASING
1204.631 CAP Event: 0x13
1204.631 Audio Stream Endpoint State ASE_ID:1 Type:ASE_SINK State:ASE_STATE_IDLE
1204.631 CAP Event: 0x13
1204.631 Audio Stream Endpoint State ASE_ID:2 Type:ASE_SINK State:ASE_STATE_RELEASING
1204.631 CAP Event: 0x13
1204.631 Audio Stream Endpoint State ASE_ID:2 Type:ASE_SINK State:ASE_STATE_IDLE


回帖(1)

远不及你

2025-6-3 17:59:39

在BLE Audio应用中,CAP_UNICAST_SERVER_ASE_STATE_EVT 状态从 ASE_STATE_CODEC_CONFIGURED 直接跳转到 ASE_STATE_RELEASING,通常是由以下原因导致的:




根本原因分析




  1. 编解码器配置不兼容



    • 问题表现:当Central设备(平板)尝试配置QoS参数时,Peripheral设备(STM32WBA55G)不支持其要求的编解码器参数(如采样率、帧长度、SDU大小等)。

    • 检查点

      • 确认代码中 hci_le_set_cig_parametershci_le_accept_cis_request 的参数是否与平板端协商的QoS参数一致。

      • 对比示例工程中的 lc3_codec_params 配置,确保支持的编解码器参数范围(如 supported_sampling_frequencies)覆盖了平板的请求。





  2. QoS配置阶段失败



    • 问题表现:在 ASE_STATE_CODEC_CONFIGURED 后,协议栈未正确处理QoS配置请求(如资源不足或参数无效),导致直接触发释放。

    • 检查点

      • 确认是否在 ASE_STATE_CODEC_CONFIGURED 状态后正确调用 hci_le_accept_cis_request 接受CIS连接请求。

      • 检查资源分配(如CIG/CIS实例、缓冲区)是否与示例工程一致,尤其是是否因内存不足导致配置失败。





  3. 协议栈事件处理逻辑错误



    • 问题表现:未正确处理 CAP_UNICAST_SERVER_ASE_STATE_EVT 事件,或在状态转换中遗漏关键操作。

    • 检查点

      • CAP_UNICAST_SERVER_ASE_STATE_EVT 事件回调中,确认是否针对 ASE_STATE_CODEC_CONFIGURED 状态调用了 qos_configure 相关函数。

      • 对比示例工程中的 TMAP_Peripheral_ASE_State_Handler 实现,确保状态机逻辑一致。





  4. 硬件资源限制



    • 问题表现:STM32WBA55G的硬件资源(如时钟、DMA通道)无法满足音频流的实时性要求。

    • 检查点

      • 确认系统时钟和音频时钟(如I2S/PCM)配置是否正确,尤其是当编解码器切换到高采样率(如48kHz)时。

      • 检查DMA缓冲区是否溢出或配置错误。







解决方案步骤




  1. 对比示例工程的关键配置




    • 在用户工程中,确保以下代码与 BLE_Audio_TMAP_Peripheral 完全一致:


      // 编解码器能力声明 (lc3_codec_params)
      static const lc3_codec_params_t lc3_codec_params = {
      .supported_sampling_frequencies = AUDIO_SAMPLE_FREQ_48000,
      .supported_frame_durations = AUDIO_FRAME_DURATION_10MS,
      .supported_octets_per_codec_frame = {30, 60}, // 确保范围包含平板请求的值
      ...
      };

      // QoS参数配置
      hci_le_set_cig_parameters(0, &cig_params, &cis_params);





  2. 启用协议栈调试日志



    • app_conf.h 中开启协议栈调试输出,观察QoS配置阶段的错误码:
      #define DEBUG_BLE_AUDIO_STATES 1  // 启用状态机日志
      #define DEBUG_HCI_COMMANDS     1  // 查看HCI命令交互

    • 通过日志定位是在哪一步返回了 HCI_ERROR_CODE_INVALID_PARAMETERSHCI_ERROR_CODE_INSUFFICIENT_RESOURCES




  3. 验证资源分配



    • 确保CIG/CIS实例数量、音频缓冲区大小等参数足够支持多路音频流:
      #define CFG_BLE_ISO_TX_PACKET_NUM  5  // 增加发送缓冲区
      #define CFG_BLE_ISO_RX_PACKET_NUM  5




  4. 检查事件处理逻辑



    • CAP_UNICAST_SERVER_ASE_STATE_EVT 回调中,确保对 ASE_STATE_CODEC_CONFIGURED 状态的处理逻辑与示例工程一致:
      case ASE_STATE_CODEC_CONFIGURED:
      // 调用QoS配置函数,如tmap_peripheral_qos_configure()
      break;






关键代码参考


若示例工程中在 ASE_STATE_CODEC_CONFIGURED 后主动配置QoS:


static void tmap_peripheral_ase_state_handler(uint8_t ase_id, ase_state_t state) {
    if (state == ASE_STATE_CODEC_CONFIGURED) {
        // 主动触发QoS配置
        hci_le_set_cig_parameters(0, &cig_params, &cis_params);
        hci_le_accept_cis_request(ase_id);
    }
}

而用户工程可能遗漏了这一步骤,导致协议栈因等待超时而释放ASE。




通过以上步骤,可定位并修复状态机异常问题,确保状态按预期从 CODEC_CONFIGURED → QOS_CONFIGURED → ENABLING 转换。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分