首页 » 智能 » Linux平台移植音频芯片实战记录_耳机_模块

Linux平台移植音频芯片实战记录_耳机_模块

雨夜梧桐 2025-01-01 06:32:00 0

扫一扫用手机浏览

文章目录 [+]

哀求: 外接一个WM8960模块。
哀求能正常播放音频文件。

2. 事理图及干系资料

将模块飞线到底板J17上,接法如下;且模块1脚 接了J17的1脚(3.3V); 然后模块的3脚(GND)接的J17的29脚地。

Linux平台移植音频芯片实战记录_耳机_模块 Linux平台移植音频芯片实战记录_耳机_模块 智能

WM8960资料:

Linux平台移植音频芯片实战记录_耳机_模块 Linux平台移植音频芯片实战记录_耳机_模块 智能
(图片来自网络侵删)

https://www.waveshare.net/wiki/WM8960_Audio_Board

3. 内核以及设备树调试

内核须要勾选WM8960干系配置,可以make menuconfig后/搜索8960然后勾上就行。

设备树把稳三点:

①. 客户飞线WM8960是挂载到i2c1上的。

sound { compatible = "fsl,imx6ul-evk-wm8960", "fsl,imx-audio-wm8960"; model = "wm8960-audio"; cpu-dai = <&sai2>; audio-codec = <&codec>; asrc-controller = <&asrc>; codec-master; gpr = <&gpr>;/not support hp-det = <hp-det-pin hp-det-polarity>; hp-det-pin: JD1 JD2 or JD3 hp-det-polarity = 0: hp detect high for headphone hp-det-polarity = 1: hp detect high for speakerhp-det = <3 0>;hp-det-gpios = <&gpio5 4 0>;mic-det-gpios = <&gpio5 4 0>; /audio-routing ="Headphone Jack", "HP_L","Headphone Jack", "HP_R","Ext Spk", "SPK_LP","Ext Spk", "SPK_LN","Ext Spk", "SPK_RP","Ext Spk", "SPK_RN","LINPUT2", "Mic Jack","LINPUT3", "Mic Jack","RINPUT1", "Main MIC","RINPUT2", "Main MIC","Mic Jack", "MICB","Main MIC", "MICB","CPU-Playback", "ASRC-Playback","Playback", "CPU-Playback","ASRC-Capture", "CPU-Capture","CPU-Capture", "Capture"; };};&sai2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai2>; assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>, <&clks IMX6UL_CLK_SAI2>; assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>; assigned-clock-rates = <0>, <12288000>; status = "okay";};pinctrl_sai2: sai2grp {fsl,pins = <MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK0x17088MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC0x17088MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA0x11088MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA0x11088MX6UL_PAD_JTAG_TMS__SAI2_MCLK0x17088MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO040x17059>;};&i2c1 { clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1>; status = "okay"; codec: wm8960@1a {compatible = "wlf,wm8960";reg = <0x1a>;clocks = <&clks IMX6UL_CLK_SAI2>;clock-names = "mclk";wlf,shared-lrclk; };};pinctrl_i2c1: i2c1grp {fsl,pins = <MX6UL_PAD_CSI_PIXCLK__I2C1_SCL 0x4001b8b0MX6UL_PAD_CSI_MCLK__I2C1_SDA 0x4001b8b0>;};

②. 时钟线(SCL)和数据线(SDA)是飞线到J17的3,4脚(UART6_TXD,UART6_RXD),对应的CSI_MCLK与CSI_PIXCLK,我们须要将其复用成I2C1_SCL,I2C1_SDA功能。
(须要查询对应的引脚功能列表和datasheet)

pinctrl_i2c1: i2c1grp { fsl,pins = < MX6UL_PAD_CSI_PIXCLK__I2C1_SCL 0x4001b8b0 MX6UL_PAD_CSI_MCLK__I2C1_SDA 0x4001b8b0 >;};

③. 由于底板上有一个耳机接口是从核心板直接引出的,我们须要禁掉他。

sound-mqs { compatible = "fsl,imx-audio-mqs"; model = "mqs-audio"; cpu-dai = <&sai1>; asrc-controller = <&asrc>; audio-codec = <&mqs>; status = "disabled";};&sai1 { assigned-clocks = <&clks IMX6UL_CLK_SAI1_SEL>, <&clks IMX6UL_CLK_SAI1>; assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>; assigned-clock-rates = <0>, <24576000>; status = "disabled";};&mqs { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mqs>; clocks = <&clks IMX6UL_CLK_SAI1>; clock-names = "mclk"; status = "disabled";};

重新编译后更换设备树,然后cd /home/audio ./aplay 1.wav。
插上耳机或者扬声器即有声音。

在调试过程中,可通过i2cdetect -y -a 0 (此处wm8960挂载在i2c1)检讨音频设备是否挂载到i2c1上,或者dmesg | grep wm8960 检讨驱动是否加载成功。

4. 录音测试

首先须要有arecord这个工具;

源码下载网址:https://www.alsa-project.org/wiki/Download#alsa-lib

编译参考网址: https://blog.csdn.net/gjy938815/article/details/11809269

编译好后:alsa-utils-1.2.9\aplay 这个目录下会天生aplay(145M),然后改名为arecord即可。

录音播放测试:

将arecord拷贝到U盘内,依次实行以下指令:cp /mnt/sda1/arecord /home/demo/chmod a+x /home/demo/arecordcd /home/audio/./amixer cset numid=1 60 录音功能需设置录音控件的参数./amixer cset numid=36 240 录音功能需设置录音控件的参数./amixer cset numid=41 1 将麦克风输出旗子暗记同时记录在旁边声道cd /home/demo实行下面这个指令时须要对着WM8960说话,会录音到/tmp/t.wav文件中。
录音韶光为10s./arecord -f cd -d 10 /tmp/t.wav播放录音文件 (最好用耳机听声音)cd /home/audio/./aplay /tmp/t.wav
5. 音量调节

掌握耳机音量大小:numid=11,iface=MIXER,name='Headphone Playback Volume'./amixer cset numid=11 80 (范围0~127, 80得当)掌握喇叭音量大小:numid=13,iface=MIXER,name='Speaker Playback Volume' 这个配置./amixer cset numid=13 100 (范围0~127,但一样平常100声音就得当了)录音时配置:numid=36,iface=MIXER,name='ADC PCM Capture Volume'./amixer cset numid=36 190 (录音范围0~255,一样平常190旁边得当,值过大杂声会有点大)numid=1,iface=MIXER,name='Capture Volume' (设置捕获的音量)./amixer cset numid=1 30 (范围0~63 ,可以选择30)

至此,我们完成移植、测试的全部事情。
如您在开拓过程中碰着问题,欢迎技能互换。

标签:

相关文章

电气编程,推动智能时代发展的关键技术

随着科技的飞速发展,电气编程已成为推动智能时代发展的重要关键技术。从智能家居到自动驾驶,从物联网到云计算,电气编程无处不在。本文将...

智能 2025-01-02 阅读0 评论0

电脑语言的魅力与挑战,修复的艺术

电脑语言,作为现代信息技术的核心,犹如人类文明的神经中枢,承载着信息传递、数据处理、智能控制等重要功能。在高速发展的背后,电脑语言...

智能 2025-01-02 阅读0 评论0