声卡驱动调试过程

 ALSA声卡驱动

https://blog.csdn.net/droidphone/article/category/1118446

PCM(Pulse-code modulation)脉冲编码调制,把声音从模拟转换成数字信号的一种技术

https://blog.csdn.net/droidphone/article/details/6308006

 数字音频接口,即The Digital Audio Interface,简称DAI,连接codec和CPU进行通信

https://blog.csdn.net/xgbing/article/details/79578165

声卡驱动调试过程

1------将驱动源码信息添加到相应文件

  • 根据驱动源码信息添加设备信息,需要修改DTS

Y:\mtk8516m3v6\src\kernel\linux\v4.4\arch\arm\boot\dts\mediatek\aud8516m3v4_slc_avs_yocto.dts

sound: sound {
		compatible = "mediatek,mt8167s-som";
		mediatek,platform = <&afe>;
		pinctrl-names = "default";
		pinctrl-0 = <&aud_pins_default>;
		mediatek,audio-codec = <&tas2770>;
		
		status = "okay";
	};
//设备信息,挂载在I2C2下
tas2770: tas2770@41 {
			compatible = "ti,tas2770";
			reg = <0x41>;//地址(0x82转换=(1000 0010)最后一位0是读写位0x41=(0100 0001))
			ti,reset-gpio = <&pio 4 0>;//复位4号引脚
			ti,irq-gpio = <&pio 6 0>;//中断6号引脚
			ti,asi-format = <0>; /* 0, i2S; 1, DSP;  */
			ti,left-slot = <0>; /* <left slot number> */
			ti,right-slot = <1>; /* <right slot number> */
			ti,imon-slot-no = <0>; /* <current sense slot number> */
			ti,vmon-slot-no = <2>; /* <current voltage slot number> */
			status = "ok";
		};
//用到I2S引脚
aud_pins_default: audiodefault {
		pins_cmd_dat {
			pinmux = <MT8167_PIN_25_EINT25__FUNC_I2S_8CH_MCK>,
			     <MT8167_PIN_55_I2S_DATA_IN__FUNC_I2S_8CH_DO1>,
				 <MT8167_PIN_56_I2S_LRCK__FUNC_I2S_8CH_LRCK>, 
				 <MT8167_PIN_57_I2S_BCK__FUNC_I2S_8CH_BCK>,
				 
				 <MT8167_PIN_100_CMDAT0__FUNC_TDM_RX_MCK>,
				 <MT8167_PIN_101_CMDAT1__FUNC_TDM_RX_BCK>,
				 <MT8167_PIN_102_CMMCLK__FUNC_TDM_RX_LRCK>,
				 <MT8167_PIN_103_CMPCLK__FUNC_TDM_RX_DI>,
				 <MT8167_PIN_1_EINT1__FUNC_I2S2_DI>,
				 
				 <MT8167_PIN_60_SDA2__FUNC_SDA2_0>,
				 <MT8167_PIN_61_SCL2__FUNC_SCL2_0>,
				 
				 <MT8167_PIN_36_MRG_CLK__FUNC_I2S0_BCK>,
				 <MT8167_PIN_37_MRG_SYNC__FUNC_I2S0_LRCK>,
				 <MT8167_PIN_38_MRG_DI__FUNC_I2S0_DI>,
				 <MT8167_PIN_20_EINT20__FUNC_I2S3_DO>,
				 <MT8167_PIN_13_EINT13__FUNC_SPDIF_IN>;
				 drive-strength = <MTK_DRIVE_8mA>;
		};

 

  • 将.c和.h文件放到同一个文件夹下,在该文件夹下的Makefile(定义编译哪些文件以及怎样编译这些文件)和Kconfig(在内核配置时作为配置选项)根据驱动源码信息添加相关信息
  • 修改Kconfig来配置驱动,定义用到的宏
menuconfig SND_SOC_TAS2770
	tristate "Texas Instruments TAS2770 SmartAmp(R)"

config TAS2770_REGMAP
    bool "Use of RegMap API"

config TAS2770_CODEC
    bool "Codec Driver support"
endmenu
//包含在menu/endmenu中的内容为菜单项,可以有多个菜单项,需要以config开头
  • 假如想使这个驱动被编译,要修改Makefile,添加驱动源代码相关信息。
//多文件模块的定义
snd-soc-tas2770-objs := tas2770-codec.o tas2770-regmap.o
obj-$(CONFIG_SND_SOC_TAS2770) += snd-soc-tas2770.o

snd-soc-tas2770-y := tas2770-codec.o tas2770-regmap.o
obj-$(CONFIG_SND_SOC_TAS2770) += snd-soc-tas2770.o

/************模块的名字为snd-soc-tas2770,
由tas2770-codec.h和 tas2770-codec.c文件编译得到tas2770-codec.o并链接进内核,
由tas2770-regmap.h和tas2770-regmap.c文件编译得到tas2770-regmap.o并链接进内核,
如果CONFIG_SND_SOC_TAS2770的值是m,由tas2770-codec.o 和tas2770-regmap.o两个目标文件最终链接生成snd-soc-tas2770.o 直至snd-soc-tas2770.ko文件
如果CONFIG_SND_SOC_TAS2770的值是y,生成的snd-soc-tas2770.o将被链接进built-in.o最终链接进内核**************/

 

  •  如果希望编译成功,需要使能配置项,有两种方法可选择,方法一更规范                          
  • 方法一:修改defconfig,启用某些宏定

Y:\mtk8516m3v6\src\kernel\linux\v4.4\arch\arm\configs\aud8516m3v4_slc_avs_yocto_defconfig 

  • 方法二:修改上级挂载平台的kcongfig,在其上级芯片下选中它  

Y:\mtk8516m3v6\src\kernel\linux\v4.4\sound\soc\mediatek\kcongfig

/************defconfig开启*************/
CONFIG_SND_SOC_MT8167S_SOM_MACH=y
CONFIG_TAS2770_REGMAP=y
CONFIG_TAS2770_CODEC=y
/************Kconfig自选*************/
config SND_SOC_MT8167S_SOM_MACH
	tristate "ASoC Audio driver for MT8167SSOM"
	depends on MACH_MT8167
	select SND_SOC_MT8167
	select SND_SOC_TAS5782M
	select SND_SOC_MT8167_CODEC
	select SND_SOC_TLV320WN
    /****add****/
    select SND_SOC_TAs2770
    select SND_SOC_TAs2770.codec
    select SND_SOC_TAs2770.regmap
    /****end****/

	help
    This adds support for ASoC machine driver for Mediatek MT8167 SOM
	  platforms with internal audio codec and speaker codec TAS5782M.
	  Select Y if you have such device.
	  If unsure select "N".

 

  • 修改mt8167s-som.添加dai_link  

 Y:\mtk8516m3v6\src\kernel\linux\v4.4\sound\soc\mediatek\mt8167      

	{
		.name = "HDMI BE",
		.cpu_dai_name = "HDMIO",//CPU的dai接口
		.no_pcm = 1,
		.codec_dai_name = "tas2770 ASI1",//codec芯片里的使用的一个接口
		.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
			   SND_SOC_DAIFMT_CBS_CFS,
		.dpcm_playback = 1,
	},
              ..........
              ..........
   
   {
		.name = "I2S BE",
		.cpu_dai_name = "I2S",//CPU的dai接口
		.no_pcm = 1,
		.codec_dai_name = "tas2770 ASI1",//codec芯片里的使用的一个接口,进行匹配
		.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
				SND_SOC_DAIFMT_CBS_CFS,
		.dpcm_capture = 1,

	},
/*********这里不需要codec的地址,也可以通过名字.codec_dai_name匹配****************
  .codec_name     = "tas2770.3-0041",
  tas2770是codec(编解码芯片)的名字,
  0代表I2C总线1,如果是1则代表I2C总线2,依次类推
  0041是I2C设备的地址
********************************************************************************/

 

2-------编译内核

  • export TEMPLATECONF=${PWD}/meta/meta-mediatek-mt8516/conf/base/aud8516m3v4-slc-32b-avs
  • source meta/poky/oe-init-build-env
  • bitbake virtual/kernel -c cleanall
  • bitbake virtual/kernel

 

3------查看编译是否成功

  • 编译后.config(有效的宏定义)配置项为Y说明定义的配置项有效,可以在Makefile中编译

Y:\mtk8516m3v6\build\tmp\work\aud8516m3v4_slc_32b_avs-poky-linux-gnueabi\linux-mtk-extension\4.4-r0\linux-mtk-extension-4.4

  • 编译生成的.o目标文件

Y:\mtk8516m3v6\build\tmp\work\aud8516m3v4_slc_32b_avs-poky-linux-gnueabi\linux-mtk-extension\4.4-r0\linux-mtk-extension-4.4\sound\soc\codecs

 

4-------查看编译错误日志

Y:\mtk8516m3v6\build\tmp\work\aud8516m3v4_slc_32b_avs-poky-linux-gnueabi\linux-mtk-extension\4.4-r0\temp

 

5--------查看烧录后,开发板是否有声卡设备

adb shell
cd proc 
cd asound
ls
//声卡若存在,则有设备card0

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TI官方数字功放TAS2770开评估板 ALTIUM设计硬件原理图PCB+AD集成封装库文件,硬件4层板设计,大小为136mmx90mm,ALTIUM设计的工程文件,包括完整的原理图和PCB文件,可以做为你的设计参考。 集成库型号列表: Library Component Count : 86 Name Description ---------------------------------------------------------------------------------------------------- 0395443002 Terminal Block, 5.08mm, 2x1, TH 1902C Standoff, Hex, 0.5"L #4-40 Nylon 5000 Test Point, Miniature, Red, TH 5001 Test Point, Miniature, Black, TH 5003 Test Point, Miniature, Orange, TH 691 101 710 002 Terminal Block, 5 mm, 2x1, Tin, TH 7006 Binding Post, RED, TH 7007 Binding Post, BLACK, TH 804-10-015-10-002000Header, 2.54mm, 5x3, Gold, TH ASTMLPA-24.000MHZ-EJ-E-TOSC, 24 MHz, 2.25 - 3.63 V, SMD AssemblyNote These assemblies are ESD sensitive, ESD precautions shall be observed. C1005X7R1E104M050BB CAP, CERM, 0.1 礔, 25 V, +/- 20%, X7R, 0402 C1608X7R1A225K080AC CAP, CERM, 2.2 礔, 10 V,+/- 10%, X7R, 0603 CDCE913PWR Programmable 1-PLL VCXO Clock Synthesizer With 1.8-V, 2.5-V, and 3.3-V Outputs, PW0014A (TSSOP-14) CMP-0074926-1 Connector, Receptacle, Micro-USB Type AB, R/A, Bottom Mount SMT CMP-0074931-1 Power Jack, mini, 2.5mm OD, R/A, TH CMP-0075401-1 Receptacle, 100mil, 8x2, Gold, R/A, TH CMP-0075420-1 Header, 100mil, 8x2, Gold, R/A, TH CMP-0077658-3 15-W Digital Input Mono Class-D Audio Amplifier with Speaker I/V Sense, RJQ0026A (VQFN-HR-26) EEE-FK1J470P CAP, AL, 47 礔, 63 V, +/- 20%, 0.65 ohm, AEC-Q200 Grade TCA9406DCUR TCA9406 Dual Bidirectional 1-MHz I2C-BUS and SMBus Voltage Level-Translator, 1.65 to 3.6 V, -40 to 85 degC, 8-pin US8 (DCU), Green (RoHS & no Sb/Br) TCJB226M020R0090 CAP, Tantalum Polymer, 22 礔, 20 V, +/- 20%, 0.09 ohm, 3528-21 SMD TI_Logo Texas Instrument Corporate Signature TL760M33QKVURQ1 Single Output Automotive LDO, 500 mA, Fixed 3.3 V Output, 3.8 to 26 V Input, 3-pin PFM (KVU), -4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值