乐鑫技术交流
直播中

母猪会上树

9年用户 812经验值
擅长:电源/新能源
私信 关注
[问答]

i2s在slave模式下使用时,MCLK/BCLK/LRCK管脚将没有信号输入怎么解决?

问题描述:
       i2s在slave模式下使用时
       此时如果没有接设备,那么 MCLK/BCLK/LRCK管脚将没有信号输入
       然后调用 audio_pipeline_stop 没有问题
       再调用 audio_pipeline_wait_for_stop 将会陷入无限等待                                                                                                                                                  

回帖(1)

孙成红

2024-6-17 17:50:34
在I2S(Inter-IC Sound)通信中,Slave模式意味着设备接收来自Master设备的信号。在Slave模式下,MCLK(主时钟)、BCLK(位时钟)和LRCK(左右声道时钟)信号通常由Master设备提供。如果在Slave模式下没有连接Master设备,这些信号将无法输入。

要解决这个问题,您可以尝试以下方法:

1. 确保硬件连接正确:检查您的设备是否正确连接到Master设备,并确保所有信号线都已正确连接。

2. 使用外部时钟源:如果Master设备无法提供MCLK/BCLK/LRCK信号,您可以考虑使用外部时钟源来驱动Slave设备。这通常需要硬件设计上的修改。

3. 软件处理:在您的代码中,您可以添加一些条件判断,以检查MCLK/BCLK/LRCK信号是否有效。如果这些信号无效,您可以手动停止音频管道并避免无限等待。

例如,您可以在调用`audio_pipeline_stop`和`audio_pipeline_wait_for_stop`之前,添加以下代码:

```c
if (!is_mclk_valid() || !is_bclk_valid() || !is_lrck_valid()) {
    // 手动停止音频管道
    audio_pipeline_stop();
    // 避免无限等待
    return;
}
```

这里,`is_mclk_valid()`、`is_bclk_valid()`和`is_lrck_valid()`是您需要实现的函数,用于检查MCLK、BCLK和LRCK信号是否有效。

4. 考虑使用其他通信协议:如果I2S Slave模式无法满足您的需求,您可以考虑使用其他通信协议,如SPI或UART,这些协议可能更适合您的应用场景。

总之,解决这个问题需要从硬件和软件两个方面进行考虑。确保硬件连接正确,并在软件中添加适当的条件判断,以避免在没有信号输入时陷入无限等待。
举报

更多回帖

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