在 CYW20721 上配置 A2DP 接收器端的 I2S 时钟(特别是设置为主模式下的 1411.2 kHz 或 1536 kHz),主要通过 Wiced HCI 音频控制命令 hci_control_audio 来实现。你需要关注该命令中 Configuration Settings (Config Settings) 参数的特定位(Bit)。
以下是具体的配置步骤和示例代码:
? 关键配置位 (Config Settings Bits)
- I2S Master Clock Select (Bit 2-1 of Config Settings,
I2S_MCLK_SEL):
00 (0x00 << 1) = 1536 kHz Master Clock (适用于 48kHz 采样率)
01 (0x01 << 1) = 1411.2 kHz Master Clock (适用于 44.1kHz 采样率)
? 配置命令 hci_control_audio
使用 hci_control_audio命令设置 A2DP Sink 的音频参数。结构体定义通常包含采样率(sampleRate)和配置设置(configSettings)。
wiced_result_t hci_control_audio(
uint16_t connectionHandle, // 连接句柄
uint8_t audioHandle, // 音频句柄 (通常为 0x01)
AUDIO_SOURCE_T audioSource, // 音频源 (A2DP_SINK_AUDIO)
uint8_t sampleRate, // 采样率 (可设为0或对应值,时钟主要由下面配置)
uint8_t configSettings // 配置设置位 (关键)
);
⚙️ 配置示例
设置 I2S MCLK = 1536 kHz (48kHz 场景):
configSettings = 0; // 默认值通常为0
// 确保 MCLK_SEL 位[2:1] 设置为 00 (1536kHz)
configSettings &= ~(0x03 << 1); // 清除位 [2:1]
// configSettings |= (0x00 << 1); // 0x00 即是默认值, 这行可省略
result = hci_control_audio(
a2dp_connection_handle,
0x01, // 音频句柄
A2DP_SINK_AUDIO,
0, // sampleRate 参数对 I2S MCLK 无直接影响
configSettings
);
设置 I2S MCLK = 1411.2 kHz (44.1kHz 场景):
configSettings = 0; // 默认值通常为0
// 设置 MCLK_SEL 位[2:1] 为 01 (1411.2kHz)
configSettings &= ~(0x03 << 1); // 清除位 [2:1]
configSettings |= (0x01 << 1); // 设置位[2:1] 为 0b01
result = hci_control_audio(
a2dp_connection_handle,
0x01, // 音频句柄
A2DP_SINK_AUDIO,
0, // sampleRate 参数对 I2S MCLK 无直接影响
configSettings
);
? 重要说明
- 连接建立后调用: 此命令应在 A2DP 连接建立并配置为 Sink 后调用,但在音频流开始传输之前。
- 采样率 (
sampleRate): 对于 I2S 主时钟设置,sampleRate 参数并非直接决定 MCLK。它用于内部同步逻辑,但实际时钟频率由 configSettings 控制。设为 0 或正确的 AUDIO_SAMPLE_RATE_48K / AUDIO_SAMPLE_RATE_44_1K 均可(建议设为对应的值)。
- BCLK (位时钟):
- 48kHz 32bit/帧:
1536 kHz (MCLK) / (64 LRCK cycles) = 48kHz * 2 (stereo) * 32 (bits) = 3.072 MHz
- 44.1kHz 32bit/帧:
1411.2 kHz (MCLK) / (64 LRCK cycles) = 44.1kHz * 2 (stereo) * 32 (bits) = 2.8224 MHz
- BCLK 由 CYW20721 在 I2S 主模式下自动产生,开发者无需直接设置。
- 芯片限制: 确认 CYW20721 硬件支持所选时钟频率。
- I2S 接口配置: 除了时钟频率,还需正确配置 I2S 的:
- 模式 (I2S, Left-Justified 等)
- 数据长度 (32位)
- 声道模式 (Stereo)
BCLK / LRCK 极性
? 调试建议
- SDK 参考: 检查
hci_control_audio.h 中 configSettings 位的定义(如 AUDIO_CONFIG_I2S_CLK_SEL_*)。
- AIROC 工具: 使用 Infineon 的 AIROC™ Bluetooth® LE Protocol Viewer 监控 HCI 命令,观察实际发送的
configSettings 值。
- 信号测量: 用示波器测量 CYW20721 的
I2S_MCLK 引脚,验证是否为预期的 1411.2 kHz 或 1536 kHz。
- 编译选项: 确保工程预编译选项中启用了音频支持(如
ENABLE_AUDIO, ENABLE_A2DP)。
? 总结
设置核心就是通过 hci_control_audio 命令的 configSettings 参数,精确控制其第 2 位和第 1 位 (即 I2S_MCLK_SEL[1:0]):
00 ➡️ 1536 kHz (48 kHz)
01 ➡️ 1411.2 kHz (44.1 kHz)
将此命令在适当时机(连接建立后,音频开始前)发送给 CYW20721 固件即可生效。在实际操作中,建议结合 SDK 中的音频示例代码(如 a2dp_sink)进行修改验证,同时做好信号验证工作。??️
在 CYW20721 上配置 A2DP 接收器端的 I2S 时钟(特别是设置为主模式下的 1411.2 kHz 或 1536 kHz),主要通过 Wiced HCI 音频控制命令 hci_control_audio 来实现。你需要关注该命令中 Configuration Settings (Config Settings) 参数的特定位(Bit)。
以下是具体的配置步骤和示例代码:
? 关键配置位 (Config Settings Bits)
- I2S Master Clock Select (Bit 2-1 of Config Settings,
I2S_MCLK_SEL):
00 (0x00 << 1) = 1536 kHz Master Clock (适用于 48kHz 采样率)
01 (0x01 << 1) = 1411.2 kHz Master Clock (适用于 44.1kHz 采样率)
? 配置命令 hci_control_audio
使用 hci_control_audio命令设置 A2DP Sink 的音频参数。结构体定义通常包含采样率(sampleRate)和配置设置(configSettings)。
wiced_result_t hci_control_audio(
uint16_t connectionHandle, // 连接句柄
uint8_t audioHandle, // 音频句柄 (通常为 0x01)
AUDIO_SOURCE_T audioSource, // 音频源 (A2DP_SINK_AUDIO)
uint8_t sampleRate, // 采样率 (可设为0或对应值,时钟主要由下面配置)
uint8_t configSettings // 配置设置位 (关键)
);
⚙️ 配置示例
设置 I2S MCLK = 1536 kHz (48kHz 场景):
configSettings = 0; // 默认值通常为0
// 确保 MCLK_SEL 位[2:1] 设置为 00 (1536kHz)
configSettings &= ~(0x03 << 1); // 清除位 [2:1]
// configSettings |= (0x00 << 1); // 0x00 即是默认值, 这行可省略
result = hci_control_audio(
a2dp_connection_handle,
0x01, // 音频句柄
A2DP_SINK_AUDIO,
0, // sampleRate 参数对 I2S MCLK 无直接影响
configSettings
);
设置 I2S MCLK = 1411.2 kHz (44.1kHz 场景):
configSettings = 0; // 默认值通常为0
// 设置 MCLK_SEL 位[2:1] 为 01 (1411.2kHz)
configSettings &= ~(0x03 << 1); // 清除位 [2:1]
configSettings |= (0x01 << 1); // 设置位[2:1] 为 0b01
result = hci_control_audio(
a2dp_connection_handle,
0x01, // 音频句柄
A2DP_SINK_AUDIO,
0, // sampleRate 参数对 I2S MCLK 无直接影响
configSettings
);
? 重要说明
- 连接建立后调用: 此命令应在 A2DP 连接建立并配置为 Sink 后调用,但在音频流开始传输之前。
- 采样率 (
sampleRate): 对于 I2S 主时钟设置,sampleRate 参数并非直接决定 MCLK。它用于内部同步逻辑,但实际时钟频率由 configSettings 控制。设为 0 或正确的 AUDIO_SAMPLE_RATE_48K / AUDIO_SAMPLE_RATE_44_1K 均可(建议设为对应的值)。
- BCLK (位时钟):
- 48kHz 32bit/帧:
1536 kHz (MCLK) / (64 LRCK cycles) = 48kHz * 2 (stereo) * 32 (bits) = 3.072 MHz
- 44.1kHz 32bit/帧:
1411.2 kHz (MCLK) / (64 LRCK cycles) = 44.1kHz * 2 (stereo) * 32 (bits) = 2.8224 MHz
- BCLK 由 CYW20721 在 I2S 主模式下自动产生,开发者无需直接设置。
- 芯片限制: 确认 CYW20721 硬件支持所选时钟频率。
- I2S 接口配置: 除了时钟频率,还需正确配置 I2S 的:
- 模式 (I2S, Left-Justified 等)
- 数据长度 (32位)
- 声道模式 (Stereo)
BCLK / LRCK 极性
? 调试建议
- SDK 参考: 检查
hci_control_audio.h 中 configSettings 位的定义(如 AUDIO_CONFIG_I2S_CLK_SEL_*)。
- AIROC 工具: 使用 Infineon 的 AIROC™ Bluetooth® LE Protocol Viewer 监控 HCI 命令,观察实际发送的
configSettings 值。
- 信号测量: 用示波器测量 CYW20721 的
I2S_MCLK 引脚,验证是否为预期的 1411.2 kHz 或 1536 kHz。
- 编译选项: 确保工程预编译选项中启用了音频支持(如
ENABLE_AUDIO, ENABLE_A2DP)。
? 总结
设置核心就是通过 hci_control_audio 命令的 configSettings 参数,精确控制其第 2 位和第 1 位 (即 I2S_MCLK_SEL[1:0]):
00 ➡️ 1536 kHz (48 kHz)
01 ➡️ 1411.2 kHz (44.1 kHz)
将此命令在适当时机(连接建立后,音频开始前)发送给 CYW20721 固件即可生效。在实际操作中,建议结合 SDK 中的音频示例代码(如 a2dp_sink)进行修改验证,同时做好信号验证工作。??️
举报