stm32f4 discovery usb mic录音44.1kHz的usb数据传送疑问

2019-12-20 21:31发布

本帖最后由 evilchips 于 2014-3-28 17:54 编辑

最近在使用stm32f4 discovery + 外置的codec做一个usb microphone时,在Fs=44.1kHz的时候,pc端录音到的数据听起来很干净,但是有断流和语速过快的问题.用usblyzer抓isochronous in endpoint的data量一看,firmware没有在10ms内送1764个byte到pc,只有1412和1588,1504这3个值,没有一次达到1764bytes/10ms.所以是数据送的不足引起断音和语速过快.有一些确定的问题和未知的疑问如下:
1,如果firmware把i2s录取的声音data又直接送到codec,声音很好.所以这里判断录音抓data没有问题.
2,往host(pc)端送data用了一个变量做计数器,0~8送176bytes/1ms,计数器的值为9的时候送180bytes并且复位计数器为0,这样加起来正好是10ms送1764bytes.但是pc收到的数据量并不如我所料...
3,在Fs=48kHz下,录音效果很好.

请教各位,usb mic @ Fs = 44.1kHz下,我还有哪些问题没注意到吗?

PS:刚发现,当第10笔data(180bytes)改成和前9笔data一样的数据量发给PC时,PC端可以恒定的每次收到1760byts/10ms.而把前9笔data改成和第10笔data一样的数据量(180bytes)的时候,个人猜想应该PC会恒定收到1800bytes/10ms,但是usblyzer抓到显示只有500多bytes/10ms,所以怀疑是当Fs==44.1kHz时,1ms内发送的data量不能超过176?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
evilchips
1楼-- · 2019-12-21 02:48
本帖最后由 evilchips 于 2014-4-5 00:35 编辑

解决了...留点经验吧.在用usb抓包工具抓包发现发送180bytes的那一个packet被分割成3个包发往host(176+0+4).所以检查了下fifo,ep的packet大小都没问题.最后发现时In ep初始化时的包为176,所以才不能发送180bytes.这是由于一个macro的定义没注意没改变所引起的.
huab
2楼-- · 2019-12-21 07:47
请教一下楼主:我在用M4做大于一小时的长时间录音(官方的demo),出现录制的音频长度和实际的不一样,找不到问题所在,楼主是否有心得?能否分享一下?谢谢!
evilchips
3楼-- · 2019-12-21 13:40
huab 发表于 2014-5-3 07:53
请教一下楼主:我在用M4做大于一小时的长时间录音(官方的demo),出现录制的音频长度和实际的不一样,找不 ...

不知道你用什么录音(不知道怎么抓数据),是Line-IN or Digi-MIC or Analog-MIC, 放音和录音的bit frame是一致的吗(16bit, 24bit, 或者其他).
huab
4楼-- · 2019-12-21 16:20
 精彩回答 2  元偷偷看……
evilchips
5楼-- · 2019-12-21 19:56
huab 发表于 2014-5-13 10:23
我用的是板载的数字麦克风,MIC是是MP45DT02,coded是CS43L22,I2S及SPI与M4通讯(SPI控制,I2S传输数据 ...

噢.你要保存在u盘,即是保存成wav那个demo么?如果是的话,要注意wav开头44字节的是否有误.
huab
6楼-- · 2019-12-21 20:51
evilchips 发表于 2014-5-16 10:30
噢.你要保存在u盘,即是保存成wav那个demo么?如果是的话,要注意wav开头44字节的是否有误. ...

谢谢!
文件的开头是按照DEMO程序上写的,没有动过,后面的不知是否有问题,谢谢了!

一周热门 更多>