完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题描述:
连接Mic并设置I2S后工作不正常,想请教下是不是我参数设置有误。 已知信息: Mic输出的音频为24位大端数据,为标准Philips格式(数据延后一个clk),且要求channel为32位宽(datasheet要求SCK频率为WS的64倍)。 现象: 使用逻辑分析仪抓包发现每个channel的sck数量始终等于代码中定义的采样深度(bits_per_sample),与通道深度无关(bits_per_chan)。例如(bits_per_sample=24,bits_per_chan=32)时抓包发现左声道只有24个clk,bits_per_sample=16时左声道只有16个clk。 抓包结果如图,实际在左声道时只有16个clk出来。 预期效果: 如图,预期应该在每个通道设置有32个clk出来,但是实际只采样最前面的24(16)个bit到内存中,下图效果是将bits_per_sample 设置为32时得到的,但是这样设置的话,虽然每个channel是32bit了,但是采样到的最低一个字节为无意义的信号(mic在第24bit发出后就高阻态了),浪费宝贵的空间不说,需要软件再做处理,又要浪费cpu时间。 此外,我也尝试了(代码中注释掉的)i2s_set_clk,使用该函数后也同样无法将channel的深度设置为32。 Code: Select all // ESP_ERROR_CHECK(i2s_set_clk(I2S_MIC_BUS_PORT, I2S_MIC_SAMPLE_RATE, (I2S_BITS_PER_CHAN_32BIT << 16) | I2S_BITS_PER_SAMPLE_24BIT, I2S_CHANNEL_MONO)); 根据IDF的doc所述,set_clk方法的第三个参数的高16位用于指示channel有多少个bits宽,低16bit用于指示channel里的数据有多少个bit宽,但是实测并没有产生等于高16位所指示的数量的clk。 /* You can reset parameters by calling 'i2s_set_clk' 根据现象推断,设置的bits_per_chan未起到作用,请问是我哪里设置有问题还是这是IDF中/硬件中的问题? 如果是代码参数设置问题,请指出如何实现所需功能(bits_per_chan的意义何在,如何使用)。 如果是库或者硬件问题,请指点下哪个版本的IDF或芯片解决了这个问题。 感激不尽 title="Smile"> 环境: IDF:v5.0-dev-595-g98ad01e5fc Mic:INMP441 24bit I2S MCU:ESP32-WROOM-32U (rev版本暂未查,可能比较老,但errata里未找到相关信息,应该不重要) 不重要的环境(Win10+VisualStudio2022,供电使用IdealDiode线或了USB与外部电源) Code: [Select all] [Expand/Collapse]
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1143 浏览 1 评论
578浏览 6评论
479浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
463浏览 5评论
464浏览 4评论
440浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 03:22 , Processed in 1.165207 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号