声卡---USB声卡调试(播放和录音)

时间:2024-04-03 07:26:09

目录

  • 一、概述
  • 二、实例
  • 三、总结

一、概述

        这里注意一下,声卡只是包含adc(模拟音频转数字音频),dac(数字音频转模拟音频)这两个主要部件。里面没有编码和解码器。asoc驱动架构中的codec也只是这个部件。不然会出现理解错误,导致概念不清。后续分析alsa和asoc驱动时再提及。

二、实例

1、插入usb声卡,出现下面的打印

首先确保usb硬件和驱动正常,当插入usb声卡,usb总线控制器驱动,会识别到声卡设备插入,然后会读取声卡的设备描述符等信息,分配地址等操作,具体可参考usb驱动设备插入流程。如果没有如下打印,首先查找usb硬件是否连接正确,然后查看usb控制驱动是否正常。

usb 1-1: new high-speed USB device number 7 using xhci-hcd

[ 2306.893049] usb 1-1: New USB device found, idVendor=0424, idProduct=2514

[ 2306.899791] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0

[ 2306.934929] hub 1-1:1.0: USB hub found

[ 2306.938780] hub 1-1:1.0: 4 ports detected

[ 2307.800883] usb 1-1.1: new full-speed USB device number 8 using xhci-hcd

[ 2307.916502] usb 1-1.1: New USB device found, idVendor=0d8c, idProduct=0012

[ 2307.926980] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0

[ 2307.936098] usb 1-1.1: Product: USB Audio Device

[ 2307.942454] usb 1-1.1: Manufacturer: C-Media Electronics Inc.

[ 2308.029863] input: C-Media Electronics Inc. USB Audio Device as /devices/platform/[email protected]/38200000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1.1/1-1.1:1.2/0003:0D8C:0012.0003/input/input4

[ 2308.106866] hid-generic 0003:0D8C:0012.0003: input,hidraw0: USB HID v1.00 Device [C-Media Electronics Inc. USB Audio Device] on usb-xhci-hcd.0.auto-1.1/input2

2、插入usb声卡后

当usb总线控制器拿到usb声卡的设备描述符后,会选择对应的usb声卡驱动,进行初始化。会在/proc/asound/cards注册相关信息,和生成对应的设备节点。这个以后分析alsa或asoc驱动时再说。

声卡---USB声卡调试(播放和录音)

声卡---USB声卡调试(播放和录音)

默认声卡下只有播放设备,没有录入设备?

查看datasheet,里面是有录入和播放功能的。但是没有生成设备节点。开始认为是声卡的设备的描述符没有声卡的输入设备。

最后确定是硬件需要MODE脚下拉,才会有mircophone功能。

声卡---USB声卡调试(播放和录音)

声卡---USB声卡调试(播放和录音)

 

3、播放和录音测试

播放这里注意一下声卡本身支持的采样率,有的在驱动里面会有一个采样率限制。这个后续再驱动分析里会提。不然这里会播放错误

播放:tinyplay ***.wav -D 0 -d 0 -r 48000 -c 2

 

录音这里需要注意,只有指定1个声道,-c 1.因为接的只有一个micphone,否则会出现hwparams err。这个当时也搞不清楚原因,最后拿到ubuntu上用arecord对比才发现这里的错误。

录音:tinycap ***.wav -D 0 -d 0 -c 1 -r 48000

 

三、总结

 如果是硬件和驱动相关的error,需要仔细查看数据手册和驱动,看是否本身硬件正常。当然如果可以dump出里面的register,查看硬件是否正常。