完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ESP32 PICO D4
ESP-IDF 4.3-rc 我在 ESP32 中使用 i2s 向 codec 芯片推送数据的时候,用逻辑分析仪抓 esp32 输出的数据,再对比标准 i2s 协议,发现存在一些差异。 在 ESP32 中配置 i2s ,16 bit 双声道,对齐方式为标准 i2s,重复输出字节 1-9 。 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_16BIT, .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 }; i2s_pin_config_t pin_config = { .bck_io_num = 4, .ws_io_num = 26, .data_out_num = 33, .data_in_num = -1 //Not used }; i2s_driver_install(i2s, &i2s_config, 0, NULL); i2s_set_pin(i2s, &pin_config); uint8_t simples [1024] ; for(int i=0; i } size_t cnt = 0 ; i2s_write(I2S_NUM_0, simples, sizeof(simples), &cnt, 1000 / portTICK_PERIOD_MS); 用逻辑分析抓到的波形如下: 疑问1: SDATA 上的数据相比 BCLK 和 LRSLK ,整体偏移了1位 (图中箭头所指) 标准 i2s 协议时序如下: 应该是每个 sample 都从第二位开始输出 SDATA ,所以 16bit的 sample, 实际上需要 17个 BCLK ,并且 L/R sample 都需要位移1bit。 疑问2: 缓冲区里的字节为 1-9 重复: 1,2,3,4,5,6,7,8,9,1,2,3 ... I2S 配置为 I2S_BITS_PER_SAMPLE_16BIT , i2s使用 大端字节顺序,所以输出的字节顺序应该是: 2,1,4,3,6,5,8,7,1,9,3,2 .... 但 ESP32 SDATA 上输出的字节顺序是: 4,3,2,1, 8,7,6,5, 3, 2, 1, 9 .... 这是把缓冲区里的数据当成 32bit 数据来处理了。 以上两个问题,是我的 i2s 配置不对,还是我对 i2s 的理解有误? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
542浏览 6评论
454浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
434浏览 5评论
436浏览 4评论
409浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 12:37 , Processed in 0.684192 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号