usb麦以及GD32单片机的一些坑--usb microphone&exmc

项目中途换方案,st改成gd,407Ve片子。

**usb mic**

要实现usb  microphone,于是音频codec+usb iso,上位机是linux。根据各个例程,初步实现都ok。

问题来了:1ms发一次的声卡数据,还tm是44.1khz的,我去!后来又发现iis的dma数据填充和usb上位机的读取数据时钟源不一致,导致dma填充速度快过usb读取,有些数据还没传过去就被覆盖了!!然后播放的声音间歇性失真(试了满久才认定的),我再去!!!!

怎么搞:(1)44.1k频率很讨厌,加上之前没搞过usb iso。。查各种资料,每10ms传送441个音频采样给到主机,就ok了。又来个问题,不知道iso其实可以每次传输不同长度的数据,好sb。试试,发现可以。另外,由于之前没发现数据覆盖问题还以为linux不支持iso不定长传输,深深忏悔我的无知!!!!

(2)数据覆盖问题,理论分析一定会存在的,可是例程就是彻底的例程,不涉及实际应用中的问题。纠结之下,突然想起来,不是可以发不定长吗?那好办了,当发现dma buffer 有较多没发完的数据时,一次发两个1ms的数据不就ok了?是的,实际测试真的好了。

真的深深惭愧,linux其实很NB。linux用alsa接usb数据的,发现只要设置好了采样率,通道,每次采样的点数,就可以直接接收数据了。我觉得alsa在自己里层也做了缓冲,不然44.1k音频的一包数据(1ms)是44或45个,我设置一次读200个,肯定是5个包啦!然后我处理了数据继续接收,后面的数据和前面的数据还可以无缝衔接,必定有缓冲的。在这次应用里,alsa挺好用,当然libusb也挺牛逼的,之前的程序是alsa直接通过pcm驱动读codec的,先入为主了吧。

**exmc **

用于驱动lcd,本来是stm的4系列,可是你懂的,现在不好买,换GD,虽然也不好买。

只是要吐槽一句:你的gpio支持2M,25M,50M,200Mhz几种速度,stm程序写的 是100Mhz,我改成200Mhz,有错么,有错么,有错么??????!!NNDX。。你不是号称是最大支持的速度吗?为了支持100M,我设200M没毛病啊?可是lcd就是死活不出图像。。。最后把200M改成50Mhz,一切ok。。。我该怎么评价这个逻辑。。。

**linux基础**

其实没人带过我玩linux,总是各种菜鸟问题搞得我难受。

这次本来想加libusb库到程序做尝试的。几个低级问题:(1)include 头文件的写法: #include "libusb-1.0/libusb.h"   似乎是这样的吧,主要说的是路径里可能有上级目录。怎么确定:直接find命令找 libusb.h,然后看程序调用的其他头文件在usr/或者别的文件夹下的路径,比如有的是 /usr/libuv.h,有的 是/usr/xxx/xxx.h, 这时候就可以确定怎么include了。

//(weiwancheng)(2)makefile库的链接,比如这个libusb,CFLAGS  +=...,这

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值