乐鑫技术交流
直播中

可口可甜

8年用户 871经验值
私信 关注
[问答]

ESP32从机设置bits_per_sample为32的情况下,从机无法向主机发送数据的的原因?

使用ESP-IDF 4.3.1和ESP-IDF 4.0.2测试过,一个ESP32作为主机,一个ESP32作为从机进行I2S通信,主机接收数据,从机发送数据。现在问题是从机设置Code: Select all
    i2s_config_t i2s_config = {        .mode = I2S_MODE_SLAVE | I2S_MODE_RX,                                          .sample_rate = SAMPLE_RATE,        .bits_per_sample = 32,        .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,                           //2-channels        .communication_format = I2S_COMM_FORMAT_STAND_MSB,        .dma_buf_count = 6,        .dma_buf_len = 60,        .use_apll = false,        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1                                //Interrupt level 1    };  
从机设置bits_per_sample 为32的情况下,从机是无法向主机发送数据的(我用逻辑分析仪抓取过数据取验证确实没有数据)。

回帖(1)

刘涛

2024-6-17 17:35:42
在ESP32上使用I2S通信时,如果从机设置bits_per_sample为32位,但无法向主机发送数据,可能的原因有以下几点:

1. **I2S配置错误**:首先,确保I2S配置正确。在您提供的代码片段中,`i2s_config`结构体的`.mode`字段设置为`I2S_MODE_SLAVE | I2S_MODE_RX`,这意味着从机应该接收数据,而不是发送数据。如果您想要从机发送数据,应该设置为`I2S_MODE_SLAVE | I2S_MODE_TX`。

2. **采样率设置**:您提供的代码片段中`.sample_rate`字段的值是`SAMP`,但这个值没有给出具体的数值。确保采样率设置正确,并且与主机的采样率一致。

3. **数据位宽设置**:在`i2s_config`结构体中,`.bits_per_sample`字段应该设置为32,表示每个样本32位。确保这个值已经正确设置。

4. **I2S初始化**:确保在配置I2S之后,您已经正确初始化了I2S接口。使用`i2s_driver_install()`函数来安装I2S驱动。

5. **数据发送逻辑**:检查您的代码中是否有逻辑错误,例如在发送数据之前没有正确地准备数据缓冲区,或者在发送数据时没有正确地调用I2S发送函数。

6. **硬件连接**:检查硬件连接是否正确,确保I2S数据线和时钟线连接正确,并且没有硬件故障。

7. **ESP-IDF版本差异**:您提到使用了ESP-IDF 4.3.1和ESP-IDF 4.0.2进行测试。虽然这两个版本应该在功能上相似,但可能存在一些细微的差别或bug修复。确保您的代码与ESP-IDF版本兼容。

8. **中断和DMA配置**:如果使用中断或DMA进行数据传输,确保这些配置正确,并且中断服务程序或DMA回调函数能够正确处理数据。

9. **调试和日志**:使用ESP-IDF的调试工具来检查I2S通信过程中的任何错误或异常情况。查看I2S相关的日志输出,以获取更多关于问题的信息。

10. **电源和时钟问题**:确保ESP32的电源稳定,并且时钟配置正确,因为这些问题可能会影响I2S通信。


举报

更多回帖

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