ESP32通过I2S读24位音频A/D芯片CJC5340的问题
Posted: Mon Jul 28, 2025 7:05 am
esp32 通过I2S接口读取24位音频A/D芯片CJC5340 采集的MIC数据,
目前可以读取数据,通过SPK播放出来,但是声音不太正常,是变音的。
数据通道32位与24位都设置过,但是都不完全对,
通道设置:
.slot_cfg = {
.data_bit_width = I2S_DATA_BIT_WIDTH_32BIT,
.slot_bit_width = I2S_SLOT_BIT_WIDTH_32BIT,
.slot_mode = I2S_SLOT_MODE_STEREO ,
.slot_mask = I2S_STD_SLOT_LEFT,
//组合 I2S_STD_SLOT_BOTH .bit_shift = true, .msb_right =false
.ws_width = 32,
.ws_pol = true,
.bit_shift = true,
.msb_right =false,
读数据函数:
int NoAudioCodec::Read(int16_t* dest, int samples) {
size_t bytes_read;
size_t bytes_write;
std::vector<int32_t> bit32_buffer(samples);
if (i2s_channel_read(rx_handle_, bit32_buffer.data(), samples * 4, &bytes_read, portMAX_DELAY) != ESP_OK) {
ESP_LOGE(TAG, "Read Failed!");
return 0;
}
比较奇怪的是: bit32_buffer读出的数据,这些数据都是右边12bit 为0,然而cjc5340是24bit的A/D,不知道什么原因,按道理应该是右边8bit为0才对啊,反复看了首次I2S说明,也没有找到问题的原因。求大神指导下,或者有相关I2S相关数据读取排列详细说明指导,非常感谢!
18325) NoAudioCodec: micdata fff4f000
(18335) NoAudioCodec: micdata fff73000
(18335) NoAudioCodec: micdata fff78000
(18345) NoAudioCodec: micdata fffa6000
(18345) NoAudioCodec: micdata fffd0000
(18355) NoAudioCodec: micdata fffd9000
(18355) NoAudioCodec: micdata fffea000
(18365) NoAudioCodec: micdata ffffb000
(18365) NoAudioCodec: micdata 49000
(18375) NoAudioCodec: micdata 44000
(18375) NoAudioCodec: micdata 26000
(18385) NoAudioCodec: micdata 25000
(18385) NoAudioCodec: micdata 3b000
(18385) NoAudioCodec: micdata 46000
目前可以读取数据,通过SPK播放出来,但是声音不太正常,是变音的。
数据通道32位与24位都设置过,但是都不完全对,
通道设置:
.slot_cfg = {
.data_bit_width = I2S_DATA_BIT_WIDTH_32BIT,
.slot_bit_width = I2S_SLOT_BIT_WIDTH_32BIT,
.slot_mode = I2S_SLOT_MODE_STEREO ,
.slot_mask = I2S_STD_SLOT_LEFT,
//组合 I2S_STD_SLOT_BOTH .bit_shift = true, .msb_right =false
.ws_width = 32,
.ws_pol = true,
.bit_shift = true,
.msb_right =false,
读数据函数:
int NoAudioCodec::Read(int16_t* dest, int samples) {
size_t bytes_read;
size_t bytes_write;
std::vector<int32_t> bit32_buffer(samples);
if (i2s_channel_read(rx_handle_, bit32_buffer.data(), samples * 4, &bytes_read, portMAX_DELAY) != ESP_OK) {
ESP_LOGE(TAG, "Read Failed!");
return 0;
}
比较奇怪的是: bit32_buffer读出的数据,这些数据都是右边12bit 为0,然而cjc5340是24bit的A/D,不知道什么原因,按道理应该是右边8bit为0才对啊,反复看了首次I2S说明,也没有找到问题的原因。求大神指导下,或者有相关I2S相关数据读取排列详细说明指导,非常感谢!
18325) NoAudioCodec: micdata fff4f000
(18335) NoAudioCodec: micdata fff73000
(18335) NoAudioCodec: micdata fff78000
(18345) NoAudioCodec: micdata fffa6000
(18345) NoAudioCodec: micdata fffd0000
(18355) NoAudioCodec: micdata fffd9000
(18355) NoAudioCodec: micdata fffea000
(18365) NoAudioCodec: micdata ffffb000
(18365) NoAudioCodec: micdata 49000
(18375) NoAudioCodec: micdata 44000
(18375) NoAudioCodec: micdata 26000
(18385) NoAudioCodec: micdata 25000
(18385) NoAudioCodec: micdata 3b000
(18385) NoAudioCodec: micdata 46000