乐鑫技术交流
直播中

吴湛

10年用户 959经验值
擅长:可编程逻辑
私信 关注
[问答]

Espressif-IDE I2S0和I2S1使用同一个管脚for mclk. 出现编译错误怎么解决?

大家好,
#define FUNC_I2S_EN         (1)
#define GPIO_I2S_LRCK       (GPIO_NUM_26)
#define GPIO_I2S_MCLK       (GPIO_NUM_0)
#define GPIO_I2S_SCLK       (GPIO_NUM_27)
#define GPIO_I2S_SDIN       (GPIO_NUM_36)
#define GPIO_I2S_DOUT       (GPIO_NUM_NC)

/**
* @brief ESP32-KORVO-V1.1 I2S GPIO defination
*
*/
#define FUNC_I2S0_EN         (1)
#define GPIO_I2S0_LRCK       (GPIO_NUM_22)
#define GPIO_I2S0_MCLK       (GPIO_NUM_0)
#define GPIO_I2S0_SCLK       (GPIO_NUM_25)
#define GPIO_I2S0_SDIN       (GPIO_NUM_NC)
#define GPIO_I2S0_DOUT       (GPIO_NUM_13)

I2S0 和I2S1 使用同一管脚作为MCLK. 在编译时,出现错误。

E (342) esp_clock_output: esp_clock_output_start(188): Selected io is already mapped by another signal
E (342) i2s_common: i2s_check_set_mclk(755): mclk configure failed
E (352) i2s_std: i2s_std_set_gpio(162): mclk config failed
E (362) i2s_std: i2s_channel_init_std_mode(225): initialize channel failed while setting gpio pins
E (372) i2s_common: i2s_channel_enable(995): the channel has already enabled or not initialized
我使用的是Espressif-IDE。

                                                                                                                                                                                                                        
           

回帖(1)

艾玛

2024-7-19 17:32:30
您好,看起来您在使用ESP32开发板时遇到了I2S0和I2S1使用同一个管脚作为MCLK的问题。为了解决这个问题,您可以尝试以下步骤:

1. 首先,检查您的硬件设计,确保I2S0和I2S1的MCLK管脚没有冲突。如果可能的话,尝试使用不同的管脚。

2. 如果您无法更改硬件设计,您可以尝试修改软件配置。在您的代码中,您已经定义了I2S的GPIO管脚。您可以尝试为I2S1分配一个新的MCLK管脚,例如:

```c
#define GPIO_I2S1_MCLK (GPIO_NUM_5)
```

3. 在您的I2S初始化代码中,确保为I2S0和I2S1分别设置正确的MCLK管脚。例如:

```c
i2s_config_t i2s_config = {
    .mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX,
    .sample_rate = 44100,
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
    .communication_format = I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB,
    .intr_alloc_flags = 0,
    .dma_buf_count = 8,
    .dma_buf_len = 1024,
    .use_apll = 0,
};

i2s_config.mclk = 44100 * 32 * 2; // 设置I2S0的MCLK频率
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);

i2s_config.mclk = 44100 * 32 * 2; // 设置I2S1的MCLK频率
i2s_config.mck_io_num = GPIO_I2S1_MCLK; // 设置I2S1的MCLK管脚
i2s_driver_install(I2S_NUM_1, &i2s_config, 0, NULL);
```

4. 重新编译您的代码,检查是否解决了编译错误。

5. 如果问题仍然存在,请检查您的开发环境和ESP-IDF版本,确保它们是最新的。有时候,编译错误可能是由于开发环境或库版本不兼容导致的。

希望这些建议能帮助您解决问题。如果您还有其他问题,请随时提问。
举报

更多回帖

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