jcnrbczg 发表于 2026-6-11 20:53:56

求助大佬,usb数据接收出错

单片机型号STC32F12K54,usb接收音频流,通过dma送到iis里,目前能被主机识别,播放音乐就全是爆音,然后我尝试播放1khz音频进行测试,发现波形完全畸变,然后排查了很久,目前是怀疑数据接收出错了,我做了些实验:

1.使用固定数值生成1khz波形,dac波形是正常的,那大概率排查dma和iis配置错误和运行错误了
2.那是不是usb写入和dma读取相互干扰呢,我没有做任何情况缓冲的手段,所以在播放1khz音频时拔出usb,这样usb就没有新数据了,缓冲的内容就不会改变了,但是波形还是畸形的,那停止dma,拔出usb后用串口把数据发出来,弄成固定数值,结果也是一样畸形的
用网易云播放的时候发现这个1k波形会剧烈变动,固定的稳定的畸形波形是用这个网址测的:https://www.onlinemictest.com/zh/tone-generator/,不过win10本身播放器播放也是稳定的
然后我就弄不动了,感觉主机也不太可能发送错误的数据,那就是我读取的过程错了,但是我实在是看不出来了

jcnrbczg 发表于 2026-6-11 21:50:07

忘记说了,如果要下程序的话,调整irc频率到49.152mhz,数据接收在usb_out()这个子函数里,iis功能脚P_SW3=0x40,在I2S_ChuShiHua()这个子函数里

ercircle 发表于 2026-6-12 09:18:21


参考下:
Ai8051U实现USB全双工声卡,同时 录音/ 放 音,微信通话/腾讯会议 可用, 重磅开源 - 51 发烧友,UAC,高保真音频,大国工匠,艺术人生,乐林漫步 国芯人工智能技术交流网站 - AI32位8051交流社区

梁工 发表于 2026-6-12 11:20:54

注意数据的大小端模式,单片机使用大端模式,电脑使用的是小端模式。

jcnrbczg 发表于 2026-6-15 13:33:12

经过不严谨的测试,传输数据时,某一段数据疑似被跳过替换成了别的数据,导致某一段数据重复了两次,不清楚是主机发送的数据就是如此还是单片机的问题

jcnrbczg 发表于 2026-6-16 19:48:26

在收到设置接口SetInterface或者设置配置SetConfiguration指令时,一口气设置outcsr2或incsr2和inmaxp或outmaxp这两个寄存器,其他时候不要设置,如果提前设置了,对应端点收不到数据,如果提前设置了maxp在指令到来时再设置csr2,数据会错

神农鼎 发表于 2026-6-17 14:33:42

用 AI8051U 来做音频测试,我们例程多

jcnrbczg 发表于 2026-6-25 21:59:25

整了个异步声卡,48k/44.1k16bit立体声,无麦克风,iis功能脚P_SW3=0x40,在I2S_ChuShiHua()这个子函数里,飞利浦格式,下载选择40m就好,目前两个采样率在我的win10电脑上都能稳定运行,其他情况不知道,采样率的切换依赖IRTRIM的调节,但是看手册这个每个芯片的力度不一样,差太多反馈也救不回来,如果要调,以48k举例,lrclk调到48-47.9跳就好了,异步对快于主机的频率支持不是很好,48-48.1跳会救不回来,如果出现爆音,可以切个歌看看还有没有,当然如果出现爆音一般也就不能运行
页: [1]
查看完整版本: 求助大佬,usb数据接收出错