我的USB音频设备不能在手机上生成声卡

cow 2022-10-28 18:17:38 编辑

我开发的USB音频设备(芯片支持USB2.0)能在win11下生成声卡并能正常播放声音。而插上手机后没有反应(手机有5V电源输出,设备能跑起来),不能生成声卡。用的是华为手机,已经打开开发者选项(这个手机插上其它音频设备是能正常生成声卡的。)。不知道是什么原因,怎样查找问题?

USB中文网 2022-10-28 21:23:44 编辑

抓包,看走到哪一步了

cow 2022-10-31 22:03:32 编辑

分别在windows 和 android 下抓包对比,在android只有这几个包。安卓下抓包
但在windows下的数据包就很完整windows下的数据包
问题还在分析。

USB中文网 2022-11-01 10:33:28 编辑

从抓包来看,主机没有给设备端发送获取配置描述符(过滤驱动抓包)或SE_ADDRESS(usb总线分析仪抓包)请求,所以也就没有后面的识别过程了。
请仔细读一下:USB的通讯过程 https://www.usbzh.com/article/detail-202.html

cow 2022-11-04 11:50:29 编辑

您好,更正一下,在安卓手机没有看到完整抓包,我发现是所用抓包工具问题。我用的是 USB Packet Viewer, 要把它设置在 high speed 模式,才可以看到更多的抓包信息。所以安卓手机是有发送获取配置描述符和SET_ADDRESS给设备的。但是通过进一步对比,在windows下,主机可以成功收到 Get Config Descriptor 的225个Bytes, 但安卓手机就不能完整收到。以下是windows和安卓分别抓取Get Config Descriptor的信息包。Windows 抓取 Get_cfgDesc 225 Bytes成功安卓手机抓取Get cfgDesc 225 Bytes不成功
请问知道是为什么吗?

cow 2022-11-14 20:47:27 编辑

在安卓手机下,会有Set_Res的命令,并且执行到这一步就一直不再跑下去了
而 Windows下,就不会有这个命令。为什么安卓要执行Set_Res的命令 ?安卓手机会有Set_Res的命令

USB中文网 2022-11-14 20:55:37 编辑

204916714571 这里有明显的包错误。所以是传输出错了,而且后面跟了个奇怪的ISO,理论上应是ACK的。所以你要查一下安卓下获取配置描述符返回数据时是否出错还是抓包错误。

从SET_RES来看,后面也有一个同样的包SET_RES,而且数据也是一样的。这看像着一直在重发这个包。
你最再看一下后面的包是什么,然后SET_RES,对其命令进行解析,应看一下对应的是那个UnitId和选择子,它的目的是什么。
看像着给UAC控制接口Id=0b的实例。你这个ID是什么东西?
另外可以对照一个可以正常工作的设备工作流程。

cow 2022-11-26 14:47:05 编辑

现在我的USB声卡设备可以在安卓手机上生成USB声卡了,播放手机音乐正常。但是设备输入音频到手机,声音就有问题了。比如设备把一首歌输入到手机,用手机的录音机录音。录音出来的效果是在歌曲的声音上叠加了噼里啪啦的噪声。我的设备输入到手机的声音采样频率是48KHz, 不知道是不是手机输入不支持这个采样率?但是如果不支持48K采样,那录音的歌曲播放时应该会变快或变慢,但我听到的是正常的速度。所以现在不知道怎样查问题。

USB中文网 2022-11-27 21:48:22 编辑

48K走USB2.0是很轻松的,很容易传输的。
你说的啪啦的噪声大概率是因为你的定时器不准引起的,导致数据传输过快或者过慢导致的破音问题

cow 2022-11-29 12:33:38 编辑
  1. USB设备是用UAC 1.0协议的
  2. 如果是设备的定时器不准,从手机USB播放出来的歌曲,也应该有噼里啪啦的噪声。但事实上手机从USB播放出来的歌曲是正常的。
  3. 我的USB设备插到PC 的 windows系统中,用windows录音是正常的,没有噼里啪啦的声音。
    从2和3来看,是否可以确定我的设备定时器是准确的?
USB中文网 2022-12-01 15:29:38 编辑

这种情况只能通过抓包工具来分析你的包的时标来判断。
啪啪的声音一般是因为数据叠加播放或者数间之间有间隔导致的。