0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux平台移植音频芯片实战记录

武汉万象奥科 2024-05-17 14:28 次阅读


本文详细记录在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程,其他平台操作方法类似,希望为大家提供帮助。

1.环境准备

平台: HD6ULL-IOT开发板

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

2.原理图及相关资料

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

wKgZomZG-DSAKRqdAAjRCBkk3aU742.png

wKgaomZG-DqAbwvIAAJ6uvihqJE756.pngwKgaomZG-D-AYL6yAADkuEgY_CI313.png

WM8960资料:

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: JD1 JD2 or JD3 * hp-det-polarity = 0: hp detect high for headphone * hp-det-polarity = 1: hp detect high for speaker hp-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_BCLK0x17088 MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC0x17088 MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA0x11088 MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA0x11088 MX6UL_PAD_JTAG_TMS__SAI2_MCLK0x17088 MX6UL_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 0x4001b8b0 MX6UL_PAD_CSI_MCLK__I2C1_SDA 0x4001b8b0 >; };

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

wKgaomZG-FeASHr5AAA78hptay4872.png

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/arecord cd /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)

至此,我们完成移植、测试的全部工作。如您在开发过程中遇到问题,欢迎技术交流


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50764

    浏览量

    423375
  • NXP
    NXP
    +关注

    关注

    60

    文章

    1278

    浏览量

    184141
  • Linux
    +关注

    关注

    87

    文章

    11300

    浏览量

    209404
  • 音频芯片
    +关注

    关注

    3

    文章

    130

    浏览量

    17946
  • IMX6ULL
    +关注

    关注

    3

    文章

    16

    浏览量

    4042
收藏 人收藏

    评论

    相关推荐

    请问音频芯片WM8978和VS1053B的有什么区别?

    音频芯片:WM8978和VS1053B的区别???求问大神:音频芯片:WM8978和VS1053B的有什么区别???先谢过
    发表于 01-22 06:36

    手机电池直接连接哪些芯片,是电源管理芯片音频芯片吗?

    手机电池直接连接哪些芯片,是电源管理芯片音频芯片吗?新人求教
    发表于 07-01 14:22

    基于Study210开发板点亮LED灯的相关资料推荐

    Linux 嵌入式系列】点亮LED灯实战记录--基于Study210开发板【Linux 嵌入式系列】点亮LED灯实战记录--基于Study210开发板
    发表于 12-16 07:36

    基于Study210开发板的刷机实战记录

    Linux 嵌入式系列】开发板刷机实战记录--基于Study210开发板【1】基于串口的控制台搭建【1.1】安装USB转串口驱动未安装USB转串口驱动时设备管理器图示成功安装USB转串口驱动
    发表于 12-21 07:08

    开发一个嵌入式BLE蓝牙音频芯片

    如何快速上手新的嵌入式BLE蓝牙音频芯片(记录KT1025A开发经历)最新要开发一个蓝牙的氛围灯,网上找了好久,都没找到合适的芯片。要么是TI或者nordic的纯BLE,不带播放音乐。要么是带
    发表于 12-23 06:08

    I2C3挂载wm8960音频芯片

    OKMX8MM-C开发板预留了I2C3和SAI引脚接口,分别位于P18和P7插针引脚上,板载音频芯片挂载到了I2C2和SAI2。今天小编为大家列举并说明如何在I2C3挂载wm8960音频芯片并通过
    发表于 08-17 11:41

    通过I2S连接一个音频芯片,ESP32如何连接这个音频芯片

    我们要通过I2S连接一个音频芯片,但改音频芯片的设定为I2S slave 模式,但却提供MCLK出来。 麻烦可以告知在ESP32 该如何配置去连接此芯片呢?谢谢!
    发表于 03-14 07:36

    飞利浦1380音频芯片

    飞利浦1380音频芯片:The UDA1380 is a stereo audio coder-decoder, availablein TSSOP32 (UDA1380TT
    发表于 12-28 10:52 53次下载

    dac33音频芯片

    dac33音频芯片
    发表于 12-28 11:25 82次下载

    2.4GHz无线数字音频芯片nRF24Z1及其应用

    2.4GHz无线数字音频芯片nRF24Z1及其应用:nRF24Z1是挪威Nordic半导体公司于2005年推出的单片式CD(Compact Disc,光盘)音质无线数字音频芯片,其能以24位48kHz的速度处理数字音频流。
    发表于 10-27 14:13 136次下载

    Realtek ALC HD Audio音频芯片驱动包1.4

    Realtek ALC HD Audio音频芯片驱动包1.47版.zip
    发表于 01-26 14:28 6次下载

    Linux-kernel-3 0的移植记录

    Linux-kernel-3 0的移植记录
    发表于 10-31 11:33 7次下载
    <b class='flag-5'>Linux</b>-kernel-3 0的<b class='flag-5'>移植</b><b class='flag-5'>记录</b>

    I2C3挂载wm8960音频芯片 | 飞凌干货笔记

    音频芯片并通过SAI1连接传输音频数据。设备树和设备树头文件路径如下:OK8MM-linux-sdk/OK8MM-linux-kernel/arch/arm64/bo
    的头像 发表于 08-12 14:20 1544次阅读
    I2C3挂载wm8960<b class='flag-5'>音频芯片</b> | 飞凌干货笔记

    高通Qualcomm-QCC30xx系列音频芯片

    高通Qualcomm-QCC30xx系列音频芯片LEAUDIO芯片QCC3071,QCC30712,QCC3081,QCC3083,QCC3084等●支持LEaudioAptxLosslessAuracast,TWS,ANC,AptxAdaptive,ApxtVoice
    发表于 01-09 16:59 13次下载

    浅析在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程

    本文详细记录在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程,其他平台
    的头像 发表于 05-17 11:33 1280次阅读
    浅析在NXP I.MX6ULL+<b class='flag-5'>Linux</b><b class='flag-5'>平台</b>下进行WM8960<b class='flag-5'>音频芯片</b><b class='flag-5'>移植</b>的过程