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

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

3天内不再提示

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

2132110287 来源:万象奥科 2024-05-17 11:33 次阅读

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

1.环境准备

平台: HD6ULL-IOT开发板

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

2.原理图及相关资料

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

9fa6efbe-13fc-11ef-b74b-92fbcf53809c.png

9fc9e726-13fc-11ef-b74b-92fbcf53809c.png

9fdeab2a-13fc-11ef-b74b-92fbcf53809c.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)

9fecadec-13fc-11ef-b74b-92fbcf53809c.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.9aplay 这个目录下会生成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)

至此,我们完成移植、测试的全部工作。

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

    关注

    1

    文章

    195

    浏览量

    53175
  • SDA
    SDA
    +关注

    关注

    0

    文章

    124

    浏览量

    28120
  • 音频芯片
    +关注

    关注

    3

    文章

    128

    浏览量

    17929
  • GND
    GND
    +关注

    关注

    2

    文章

    538

    浏览量

    38672
  • 时钟线
    +关注

    关注

    0

    文章

    6

    浏览量

    3610

原文标题:Linux平台移植音频芯片实战记录

文章出处:【微信号:万象奥科,微信公众号:万象奥科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    移植NXP官方linux 5.4内核到i.MX6ULL开发板

    本文描述移植NXP官方 linux 5.4 内核到i.MX6ULL开发板。
    发表于 12-19 11:10 2009次阅读

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

    本文详细记录在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片
    的头像 发表于 05-17 14:28 1040次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>平台</b><b class='flag-5'>移植</b><b class='flag-5'>音频芯片</b>实战记录

    请问m8960 wm8974 wm8978 wm8994 一系列音频接口芯片在录放音的音质上有提升吗?

    wm8960 wm8974 wm8978 wm8994,这一系列音频接口芯片
    发表于 02-19 06:02

    请问在哪里把CODEC_PWR_EN引脚拉高给音频芯片供电呢

    您好,我调AM5718的开发板,发现硬件上有一个CODEC_PWR_EN引脚是给音频芯片wm8960供电的。可是我看了设备树文件和相关的驱动,没有发现对此引脚的操作。请问在哪里把这个引脚拉高,从而给
    发表于 01-06 07:05

    为什么wm8960中的probe移植中未执行呢

    我的内核是3.0.35版,将IMX6wm8960i2c0移植i2c2的过程中,
    发表于 01-07 06:52

    wm8960挂载I2C2上匹配不了驱动这是为什么

    我用的是IMX6Q+linux4.1.15内核版本,设备树文件imx6qdl-sabresd.dtsi 中做修改, wm8960挂载
    发表于 01-07 06:56

    开发板上挂载的wm8960录音失败怎么解决

    开发板上挂载wm8960成功,输入 arecord [-Dplughw:0,0] -r 44100 -f S16_LE -c 2 -d 2 record.wav 测试录音时,一直卡在这,也没有
    发表于 01-13 08:15

    I2C3挂载wm8960音频芯片

    就是OKMX8MM-C开发板的I2C3挂载wm8960音频芯片并通过SAI1连接传输音频数据的操作过程
    发表于 08-17 11:41

    请问wm8960声卡驱动是否支持音频输入动态选择?

    你好,我们基于OK4418开发板进行项目开发时,需要基于WM8960做些扩展,WM8960声卡芯片支持三路语音输入,但是贵公司开发板目前只
    发表于 11-23 07:14

    请问WM8960有驱动源码吗?

    硬件环境 OKMX6DL-S3Linux 版本linux-4.1.15内核代码包中没有找到WM8960源代码,只有一个二进制文件imx-wm8960.mod请问是故意不开放源代码吗?
    发表于 11-25 07:27

    如何通过tinyalsa命令音频正在通过wm8960播放?

    我能够 imx8mp phytec pollux 板上检测到 android 11 中的 wm8960 编解码器 问题是:我能够通过命令行方式播放音频,通过 tinyalsa 命令音频
    发表于 05-12 06:33

    Android11中通过GUI的wm8960模块播放音频找不到是为什么?

    1. 命令提示符下使用 Tinyplay 命令,我们验证了模块是否正常工作。默认 wm8960 模块正在播放,音频播放。 2.我们通过报警默认歌曲播放,也可以自定义报警歌曲,可以
    发表于 05-17 10:00

    微雪电子树莓派音频编解码扩展板|WM8960 Audio HAT介绍

    WM8960 树莓派音频解码扩展板 I2S接口 低功耗 支持播放和录音、立体声编解码;板载耳机和麦克风 型号 WM8960 Audio HAT
    的头像 发表于 11-13 15:39 5108次阅读
    微雪电子树莓派<b class='flag-5'>音频</b>编解码扩展板|<b class='flag-5'>WM8960</b> Audio HAT介绍

    微雪电子WM8960立体声编解码模块简介

    WM8960 立体声编解码模块 I2S/I2C接口 低功耗 基于WM8960芯片音频模块
    的头像 发表于 01-02 14:51 1.1w次阅读
    微雪电子<b class='flag-5'>WM8960</b>立体声编解码模块简介

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

    飞凌嵌入式的OKMX8MM-C开发板预留了I2C3和SAI引脚接口,分别位于P18和P7插针引脚上,板载音频芯片挂载到了I2C2和SAI2。今天小编为大家列举并说明如何在I2C3挂载
    的头像 发表于 08-12 14:20 1511次阅读
    <b class='flag-5'>I</b>2C3挂载<b class='flag-5'>wm8960</b><b class='flag-5'>音频芯片</b> | 飞凌干货笔记