打印

问一个GD32107C板子一个关于USB如何用作麦克风的问题

[复制链接]
1219|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3123|  楼主 | 2015-10-2 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手头这块板子已经使用官方给的audio class例程实现了耳机功能,连接PC会触发dataout函数接收到pc的声音,之后通过I2S播放,然后我试着参考了http://blog.csdn.net/terry_linux/article/details/5422312这个**修改了那个配置描述符,把输入输出反向,之后插到PC上可以识别出是一个usb麦克风,但是我设成监听模式,或者使用软件进行录音都没法从板子获取数据。经初步debug,发现根本不能像耳机那时候触发dataout那样触发datain,我准备的数组也就没法传给主机了,然后我尝试不接收请求的情况下直接调用DCD_EP_Tx发送数据,当然也是失败。感觉speaker和microphone不只是反向了而已?通信协议上另有区别?比如需要主动发控制信号之类的?请教一下可能是什么原因。或者正确的流程应该是怎样的。
沙发
vivilzb1985| | 2015-10-7 16:47 | 只看该作者
这个方案的看来是比较复杂的,我下去查查的再说吧

使用特权

评论回复
板凳
3123|  楼主 | 2015-10-9 17:51 | 只看该作者
感谢回帖,然后我这边知道原因了,由于那个例程是OUT的,所以改成IN之后有一个函数usbd_audio_OUT_Incplt没用了,回调函数的结构体上面有一个NULL得改成usbd_audio_IN_Incplt,之后添加对应的一个空函数。
不过之后还有一个问题,那个链接给的描述符是speaker和microphone结合的,分开的话PC可以分别识别出是一个spk或者mic,但是像他那样弄在一起PC无法识别其中任何一个了,然而既然那个链接在哪里,原作者应该成功了才对,请教一下具体原因。

使用特权

评论回复
地板
3123|  楼主 | 2015-10-13 10:35 | 只看该作者
这个问题也搞定了,把AUDIO_TOTAL_IF_NUM和USBD_ITF_MAX_NUM宏定义的值加1,然后麦克风的incmplt回调需要刷新fifo以及重启端点,直观影响是录音能否正常进行,具体原理听说是PC会多次发送请求,板子不一定每次都能收到导致需要刷新然后多次尝试连接。

使用特权

评论回复
5
firstblood| | 2015-10-26 20:53 | 只看该作者
这个我不太理解的,希望大侠们多指导指导的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

37

帖子

0

粉丝