工具/软件:
您好:
我将使用 TI CC2564MODNEM 蓝牙控制器和 STM32F401 微控制器。 我希望 CC256 在从模式下提供 PCM/I2S 音频接口、让 STM32 充当总线主器件并提供位时钟和 LR 时钟。 该应用是蓝牙 HFP 演示。
启动时、CC256 上的 nSHUTDOWN_1V8 引脚设置为低电平 250ms、然后设置为高电平(程序会在继续之前额外等待 500ms)。 此后、STM32 从 TI 的 CC256XB 蓝牙服务包 (https://www.ti.com/tool/CC256XB-BT-SP) 发送 CC256 的初始化脚本版本 1.8。 具体来说、我正在使用 initscripts-TIInit_6.7.16_bt_spec_4.1.bts 和 initscripts-TIInit_6.7.16_ble_add-on.bts。
接下来、应在从模式下为 I2S 配置 CC256。 为此、我使用 HCI_VS_Write_CODEC_Config 命令 0xFD06。 我在此处引用了 CC256 的供应商特定 HCI 命令: https://www.ti.com/lit/an/swra751/swra751.pdf。 我将省略 STM32 程序的完整源代码、但为了了解具体情况、HCI_VS_Write_codec_Config 命令的数据数组如下所示:
static const uint8_t hci_write_codec_config_cvsd[] = {
0x06, 0xFD, // HCI opcode = HCI_VS_Write_CODEC_Config
0x22, // HCI param length
0x00, 0x01, // PCM clock rate 256, - clock rate 256000 Hz
0x01, // PCM clock direction = slave
0x40, 0x1F, 0x00, 0x00, // PCM frame sync = 8kHz
0x00, 0x00, // PCM frame sync duty cycle = 50% of period (I2S format)
0x01, // PCM frame edge = falling edge
0x01, // PCM frame polarity = active low
0x00, // Reserved
0x10, 0x00, // PCM channel 1 out size = 16
0x00, 0x00, // PCM channel 1 out offset = 0
0x01, // PCM channel 1 out edge = falling
0x10, 0x00, // PCM channel 1 in size = 16
0x00, 0x00, // PCM channel 1 in offset = 0
0x01, // PCM channel 1 in edge = falling
0x00, // Reserved
0x10, 0x00, // PCM channel 2 out size = 16
0x10, 0x00, // PCM channel 2 out offset = 16
0x00, // PCM channel 2 out edge = rising
0x10, 0x00, // PCM channel 2 in size = 16
0x10, 0x00, // PCM channel 2 in offset = 16
0x00, // PCM channel 2 in edge = rising
0x00, // Reserved
};
请注意、根据 TI VS HCI 命令文档、PCM 时钟方向设置为 0x01、这意味着“PCM 时钟和 Fsync 方向为输入“。 来自器件初始化的 HCI 数据包转储显示、此命令由 STM32 发送并由 CC256 进行处理。 下面的数据包转储代码片段显示了命令 06 FD(小端字节序)的命令完成事件 (0E)、返回代码为 00(成功)。
[00:00:05.403] CMD => 06 FD 22 00 01 01 40 1F 00 00 00 00 01 01 00 10 00 00 00 01 10 00 00 00 01 00 10 00 10 00 00 10 00 10 00 00 00 [00:00:05.421] EVT <= 0E 04 01 06 FD 00
但是、当我通过蓝牙将手机连接到 CC256 并拨打电话以获取 HFP 数据时、CC256 似乎正在驱动 AUD_FSYNC_1V8 和 AUD_CLK_1V8 引脚、如下面的示波器截图所示。 绿色迹线(顶部)是 LR 时钟 (AUD_FSYNC_1V8)、黄色是位时钟 (AUD_CLK_1V8)。 这些信号与 STM32 断开连接、仅连接到 CC256 和示波器探头。 考虑到上述 PCM 时钟方向的配置、我本来希望 CC256 不会驱动这些时钟信号、而是接受它们作为输入。 我在这里遗漏了什么? 如何在从模式下为 I2S 配置 CC256?

我已在初始化时附加完整的 HCI 数据包转储 (cc256-HCI-packet-dump.txt)。