I2S MCLK没有信号
-
- Posts: 9
- Joined: Wed Aug 18, 2021 1:47 pm
- Location: 江西
I2S MCLK没有信号
我用的是ESP-IDF 4.3.1,官方给的I2S示例运行的时候不会输出MCLK信号,我在官方文档里也找不到如何设置MCLK的API,我翻看本论坛,论坛里有人说用LED PWM产生MCLK信号替代;有的推荐用 esp_err_t i2s_mclk_gpio_select(i2s_port_t i2s_num, gpio_num_t gpio_num); 这个函数,但是这个函数是ESP-ADF的函数,i2s_mclk_gpio_select()这个函数在官方的IDF和ADF的文档里都找不到。上面这些都讲的模糊不清,不一定能用,有没有人明确用I2S实际产生出来MCLK,说明下如何用。就为来产生个MCLK,搞得我头疼,找不到个明确的答案,官方文档也是对MCLK绝口不提,资料根本不好找。望用过的的人帮帮,感谢了。
Re: I2S MCLK没有信号
可以看看这个https://github.com/espressif/esp-adf/tree/master/examples/get-started/play_mp3_control
搜索i2s_stream_init i2s_mclk_gpio_select
搜索i2s_stream_init i2s_mclk_gpio_select
-
- Posts: 9
- Joined: Wed Aug 18, 2021 1:47 pm
- Location: 江西
Re: I2S MCLK没有信号
我搜了下4.3.1的IDF,没有这个函数。
-
- Posts: 9
- Joined: Wed Aug 18, 2021 1:47 pm
- Location: 江西
Re: I2S MCLK没有信号
我搜了下4.3.1的esp-idf,没有这个函数
-
- Posts: 9
- Joined: Wed Aug 18, 2021 1:47 pm
- Location: 江西
Re: I2S MCLK没有信号
经过测试,我从esp-adf(注意adf是另外的音频框架)里面的C:\Users\用户名\esp\esp-adf\components\audio_board\lyrat_v4_3里面的board_pins_config.c文件里把下面的函数复制到esp-idf里面,然后调用,测试是可以产生mclk信号的。
函数调用PIN_FUNC_SELECT(),WRITE_PERI_REG()来设置寄存器,从而产生mclk。调用示例
i2s_mclk_gpio_select(I2S_NUM_0, GPIO_NUM_0); // 在GPIO 0 上产生mclk
Code: Select all
static const char *TAG = "I2S MASTER TX";
esp_err_t i2s_mclk_gpio_select(i2s_port_t i2s_num, gpio_num_t gpio_num)
{
if (i2s_num >= I2S_NUM_MAX) {
ESP_LOGE(TAG, "Does not support i2s number(%d)", i2s_num);
return ESP_ERR_INVALID_ARG;
}
if (gpio_num != GPIO_NUM_0 && gpio_num != GPIO_NUM_1 && gpio_num != GPIO_NUM_3) {
ESP_LOGE(TAG, "Only support GPIO0/GPIO1/GPIO3, gpio_num:%d", gpio_num);
return ESP_ERR_INVALID_ARG;
}
ESP_LOGI(TAG, "I2S%d, MCLK output by GPIO%d", i2s_num, gpio_num);
if (i2s_num == I2S_NUM_0) {
if (gpio_num == GPIO_NUM_0) {
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1);
WRITE_PERI_REG(PIN_CTRL, 0xFFF0);
} else if (gpio_num == GPIO_NUM_1) {
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD_CLK_OUT3);
WRITE_PERI_REG(PIN_CTRL, 0xF0F0);
} else {
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD_CLK_OUT2);
WRITE_PERI_REG(PIN_CTRL, 0xFF00);
}
} else if (i2s_num == I2S_NUM_1) {
if (gpio_num == GPIO_NUM_0) {
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1);
WRITE_PERI_REG(PIN_CTRL, 0xFFFF);
} else if (gpio_num == GPIO_NUM_1) {
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD_CLK_OUT3);
WRITE_PERI_REG(PIN_CTRL, 0xF0FF);
} else {
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD_CLK_OUT2);
WRITE_PERI_REG(PIN_CTRL, 0xFF0F);
}
}
return ESP_OK;
}
i2s_mclk_gpio_select(I2S_NUM_0, GPIO_NUM_0); // 在GPIO 0 上产生mclk
-
- Posts: 9
- Joined: Wed Aug 18, 2021 1:47 pm
- Location: 江西
Who is online
Users browsing this forum: No registered users and 174 guests