Page 1 of 1

ESP32 I2S 连接顺芯 ES8156 的问题

Posted: Tue Aug 09, 2022 9:56 pm
by alee163
ESP32-PICO D4 芯片
ESP-IDF 4.3 - RC

我们在一款ESP32硬件产品中用到了 ES8156,
由于ESP32 端 GPIO 紧张,所以希望 MCLK 不占用 ESP32 的 GPIO 。

顺芯FAE建议将 MCLK 和 BCLK 短接,由 BCLK 倍频得到 MCLK,并且提供了相应的寄存器配置。
在这种方式下, BCLK / LRCLK 不能小于 64 ,也就是每个 sample 最小 32bit 。

但是在播放 16 bit 双通道音频的时候,BCLK / LRCLK 只有 32 ,每个 sample 是 16 。

我用 I2S_BITS_PER_SAMPLE_32BIT 来播放 16bit 音频,是可以满足 ES8156 的要求的, 并且可以听到音乐,但是播放速度快了1倍 :

Code: Select all

i2s_config_t i2s_config = {
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX),
    .sample_rate = 8000,
    .bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT,
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
    .communication_format = I2S_COMM_FORMAT_STAND_I2S,
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL2 | ESP_INTR_FLAG_IRAM,
    .dma_buf_count = 2,
    .dma_buf_len = 1024,
    .use_apll = true,
    .tx_desc_auto_clear = true,
    .fixed_mclk = 0
};

顺芯FAE表示 标准I2S协议 可以用两个空字节填充,像这样 :
Clip_20220810_053746.png
Clip_20220810_053746.png (33.78 KiB) Viewed 6090 times
那么:
1. 是否可以通过配置,让 ESP32 播放 16bit 音频时,用2个空字节将每个 simple 由 16 bit 填充到 32bit
2. 如果不能配置,我能否在 i2s_write() 前,给数据事先插入隔空的2个字节

Re: ESP32 I2S 连接顺芯 ES8156 的问题

Posted: Sat Aug 10, 2024 7:17 am
by xuankong
我自己打了一块es8156的板,esp32 通过i2s 到es8156,独立使用mck播放高码率和短接mck和bck播放都正常,个人猜测应该是你的配置问题,我没有独立配置i2s的参数。