(M5CoreS3)I2S和ES7210做了驱动开发,但是麦克风的声音老是获取有问题
-
我对I2S和ES7210做了驱动开发,但是麦克风的声音老是获取有问题
i2s_chan_handle_t es7210_i2s_init(void)
{
ESP_LOGI(TAG, "Initializing I2S");i2s_chan_config_t chan_cfg = { .id = I2S_NUM_0, .role = I2S_ROLE_MASTER, .dma_desc_num = 8, // 增加 DMA 描述符数量 .dma_frame_num = 64, // 增加每个描述符的帧数 .auto_clear = false, // 不自动清除 DMA buffer }; ESP_ERROR_CHECK(i2s_new_channel(&chan_cfg, NULL, &i2s_rx_chan)); i2s_std_config_t std_cfg = { .clk_cfg = { .sample_rate_hz = SAMPLE_RATE, .clk_src = I2S_CLK_SRC_PLL_160M, // 明确指定时钟源 .mclk_multiple = I2S_MCLK_MULTIPLE_512, // 提高MCLK倍数以适应48kHz }, .slot_cfg = { .data_bit_width = I2S_DATA_BIT_WIDTH_16BIT, .slot_bit_width = I2S_SLOT_BIT_WIDTH_16BIT, .slot_mode = I2S_SLOT_MODE_STEREO, .slot_mask = I2S_STD_SLOT_BOTH, .ws_width = 16, .ws_pol = false, .bit_shift = true, .left_align = false, .big_endian = false, .bit_order_lsb = false, }, .gpio_cfg = { .mclk = MCLK_PIN, .bclk = ADC_BCLK_PIN, .ws = ADC_LRCLK_PIN, .dout = GPIO_NUM_NC, .din = ADC_DATA_PIN, .invert_flags = { .mclk_inv = false, .bclk_inv = false, .ws_inv = false, }, }, }; ESP_ERROR_CHECK(i2s_channel_init_std_mode(i2s_rx_chan, &std_cfg)); // 在启用通道之前添加延迟 vTaskDelay(pdMS_TO_TICKS(100)); ESP_ERROR_CHECK(i2s_channel_enable(i2s_rx_chan)); // 等待 I2S 稳定 vTaskDelay(pdMS_TO_TICKS(100)); ESP_LOGI(TAG, "I2S initialized successfully"); return i2s_rx_chan;}
void es7210_codec_init(void)
{
ESP_LOGI(TAG, "Init I2C used to configure ES7210");
i2c_config_t i2c_conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = GPIO_NUM_12,
.scl_io_num = GPIO_NUM_11,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master = {
.clk_speed = EXAMPLE_ES7210_I2C_CLK,
},
};
ESP_ERROR_CHECK(i2c_param_config(EXAMPLE_I2C_NUM, &i2c_conf));
ESP_ERROR_CHECK(i2c_driver_install(EXAMPLE_I2C_NUM, i2c_conf.mode, 0, 0, 0));/* Create ES7210 device handle */ es7210_dev_handle_t es7210_handle = NULL; es7210_i2c_config_t es7210_i2c_conf = { .i2c_port = EXAMPLE_I2C_NUM, .i2c_addr = EXAMPLE_ES7210_I2C_ADDR }; ESP_ERROR_CHECK(es7210_new_codec(&es7210_i2c_conf, &es7210_handle)); ESP_LOGI(TAG, "Configure ES7210 codec parameters"); es7210_codec_config_t codec_conf = { .sample_rate_hz = EXAMPLE_I2S_SAMPLE_RATE, .mclk_ratio = EXAMPLE_I2S_MCLK_MULTIPLE, .i2s_format = EXAMPLE_I2S_TDM_FORMAT, .bit_width = (es7210_i2s_bits_t)EXAMPLE_I2S_SAMPLE_BITS, .mic_bias = EXAMPLE_ES7210_MIC_BIAS, .mic_gain = EXAMPLE_ES7210_MIC_GAIN, .flags = { .tdm_enable = 1 }, }; ESP_ERROR_CHECK(es7210_config_codec(es7210_handle, &codec_conf)); ESP_ERROR_CHECK(es7210_config_volume(es7210_handle, EXAMPLE_ES7210_ADC_VOLUME));}
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login