基于iMX8处理器的SGTL5000音频接口设计

发布时间:2024-02-21  

Apalis iMX8 计算机模块的数字音频接口 SAI(Synchronous Audio Interface)可以配置为 AC97、I2S格式,用于连接外部音频编解码器。文章接下来将介绍在 Linux BSP v6 上如何扩展第二路 SGTL5000。


iMX8 处理器具有多路 SAI 通道,SAI1 已经被模块片上的 SGTL5000 使用,SAI0 通道引出到模块金手指上,并且是兼容 Apalis 标准数字音频接口,该通道在基于其他 CPU 的 Apalis 模块也可以直接使用。因此,我们选择 SAI0 扩展外部 SGTL5000。

1681897621396772.png

SGTL5000 面向 iMX8 处理器的接口主要是 I2S 和时钟信号。

1681897621420282.png

Apalis iMX8 的 SAI0 通道可以直接连接 SGTL5000 的 I2S 接口。但是 MXM3_194 引脚上没有时钟信号。对于外部音频编解码器如果需要时钟输入,如 SGTL5000 的 SYS_MCLK,可以选择 MXM3_215 引脚,或者采用外部时钟源,如晶振。

1681897622241455.png

SGTL5000 在 master mode 时可以向 Apalis iMX8 输出 I2S_LRCLK 和 I2S_SCLK 信号。 当SYS_MCLK = SupportedRates * Fs,I2S_LRCLK 可以和 SYS_MCLK 同步。如果无法满足,SGTL5000 则会使用内部的 PLL  产生符合音源的  I2S_LRCLK 频率。PLL 的使用会增加 额外的功耗。PLL 的时钟输入也来自 SYS_MCLK,可以支持 8.0 到 27MHz 频率。

1681897624428529.png

外部 SGTL5000 原理图如下,其中使用一个12.28MHz 的外部有源晶振。

1681897626402543.png

接下来修改 device tree 添加 SGTL5000 的相关配置。

imx8-apalis-v1.1.dtsi  的 I2C3 节点添加 SGTL5000 的 I2C 配置。

---------------------------------------

/* Apalis I2C3 (CAM) */
&i2c3 {
    #address-cells = <1>;
    #size-cells = <0>;
    clock-frequency = <100000>;
    pinctrl-names = "default";
    pinctrl-0 = ;
    status = "okay";

    external_sgtl5000: audio-codec@a {
        #sound-dai-cells = <0>;
        compatible = "fsl,sgtl5000";
        reg = <0xa>;
        //micbias-resistor-k-ohms = <2>;
        micbias-voltage-m-volts = <2250>;
        VDDA-supply = ;
        VDDIO-supply = ;
        VDDD-supply = ;
        clocks = ;
    };

};

---------------------------------------

SGTL5000 使用外部的电源供电,所以也需要添加 VDDA-supply,VDDIO-supply 和 VDDD-supply。

---------------------------------------

reg_ex_auido_3v: regulator-ex-audio-3v {
        compatible = "regulator-fixed";
        regulator-name = "ex-audio-3V";
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
        regulator-always-on;
    };

    reg_ex_auido_1v8: regulatorex-audio-1v8 {
        compatible = "regulator-fixed";
        regulator-name = "+V1.8";
        regulator-min-microvolt = <1800000>;
        regulator-max-microvolt = <1800000>;
    };

---------------------------------------

以及外部时钟定义。

---------------------------------------

ex_audio_clk: sgtl5000_12M {
        compatible = "fixed-clock";
        #clock-cells = <0>;
        clock-frequency = <12288000>;
    };

---------------------------------------

在原有的 sound 节点后再增加一个 外部 SGTL5000 的 sound_external。

---------------------------------------

sound_external {
        compatible = "simple-audio-card";
        simple-audio-card,bitclock-master = ;
        simple-audio-card,format = "i2s";
        simple-audio-card,frame-master = ;
        simple-audio-card,name = "external-sgtl5000";

        simple-audio-card,cpu {
            sound-dai = ;
        };

        dailink_master_external: simple-audio-card,codec {
            sound-dai = ;
            system-clock-frequency = <12288000>;
        };
    };

---------------------------------------

配置 sai0 节点。

---------------------------------------

&sai0 {
    assigned-clocks = ,
            ,
            ,
            ;
    assigned-clock-rates = <786432000>, <49152000>, <12288000>, <49152000>;
    pinctrl-names = "default";
    pinctrl-0 = ;
    #sound-dai-cells = <0>;
    //fsl,txm-rxs;
};

---------------------------------------

最后在 imx8-apalis-ixora-v1.2.dtsi 里启用 SAI0。

---------------------------------------

&sai0 {
    status = "okay";
};

---------------------------------------

参考这里重新编译和部署 device tree 。上面提到的 patch 文件下载。重新启动后检查外部 SGTL5000 挂载情况。在I2C-5 通道上已经发现地址为 0x0a 的设备。

---------------------------------------

root@apalis-imx8-06852111:/tmp# i2cdetect -y -r 5
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- UU -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

---------------------------------------

相应的驱动也加载。

---------------------------------------

root@apalis-imx8-06852111:/tmp# dmesg|grep sgtl
[    2.128045] sgtl5000 3-000a: sgtl5000 revision 0x11
[    2.264861] sgtl5000 5-000a: sgtl5000 revision 0x11

---------------------------------------

检查声卡设备,发现 sysdefault:CARD=externalsgtl500。

---------------------------------------

root@apalis-imx8-06852111:/tmp# aplay -L

null

Discard all samples (playback) or generate zero samples (capture)

sysdefault:CARD=externalsgtl500

external-sgtl5000, 59040000.sai-sgtl5000 sgtl5000-0

Default Audio Device

sysdefault:CARD=apalisimx8qmsgt

apalis-imx8qm-sgtl5000, 59050000.sai-sgtl5000 sgtl5000-0

Default Audio Device

sysdefault:CARD=imxspdif

imx-spdif, S/PDIF PCM snd-soc-dummy-dai-0

Default Audio Device

---------------------------------------

使用 BSP 默认的音频文件播放。

---------------------------------------

root@apalis-imx8-06852111:/tmp# aplay -D sysdefault:CARD=externalsgtl500 ~/sound/Gong.wav

---------------------------------------

如果音量小的话,使用 alsamixer 调整。按F6 选择外部 SGTL5000。

1681897628624510.png

Gong.wav 是一个采样率44.1KHz,16bit双声道文件,比特率=16*2*44.1K=1.4MHz。如下面示波器测量显示,CH1 是LRCLK,CH2 是 SCLK。

1681897629584679.png

SGTL5000 在播放时会根据音源文件调整工作参数,例如时钟,PLL 工作状态。可以通过 cat /sys/kernel/debug/regmap/5-000a/registers 命令查看寄存器配置。由于 SGTL5000 的已经被其驱动占用,所以无法使用 i2cget 读取寄存器。

1681897631826033.png

例如寄存器 CHIP_CLK_CTRL 0x0004 的值为 0007。bit3:2=0x01,表示采样频率为 44.1KHz。Bit 1:0 = 0x3,表示使用 PLL 。这是由于  44.1KHz 信号无法通过 12.28MHz 的 256、384或 512 倍分频得到,所以只能使用 PLL 产生。

1681897634698274.png

外部 SGTL5000 的录音功能可以使用下面命令。

---------------------------------------

root@apalis-imx8-06852111:/tmp# arecord -D hw:0,0 -V mono -c 2 -f S16_LE -r 44100 -t wav mic.wav

---------------------------------------

其中 hw:0,0 可以 aplay -l 命令查看对应声卡的 card, subdevice 序号。

---------------------------------------

root@apalis-imx8-06852111:/tmp# aplay -l

**** List of PLAYBACK Hardware Devices ****

card 0: externalsgtl500 [external-sgtl5000], device 0: 59040000.sai-sgtl5000 sgtl5000-0 [59040000.sai-sgtl5000 sgtl5000-0]

Subdevices: 1/1

Subdevice #0: subdevice #0

---------------------------------------

总结

Apalis iMX8 的数字音频接口可以非常方便地扩展音频编解码器,具体的引脚分配、device tree 配置等需要结合所使用的音频编解码器,有些可能会十分简单,如 MAX98357A,其甚至不需要 I2C 和 SYS_MCLK 就可以直接工作。Apalis iMX8 所使用的 Linux kernel 源码中有非常多的示例可供用户参考。 


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    为了避免繁琐且耗时的交换机配置过程,NT5000采用精心设计,实现了快捷地开箱部署,其现代化的图形用户界面包含配置向导,可引导用户快速完成初始设置。 分层......
    工业交换机的结构组成和组网方式;  工业交换机也称作工业以太网交换机,即应用于工业控制领域的以太网交换机设备,由于采用的网络标准,其开放性好、应用广泛以及价格低廉、使用的是透明而统一的TCP/IP......
    10GigE最佳实践:设置单摄像头系统;无论您是在研究如何使用 ,还是寻求所需考虑事项的建议,本文均提供一些最佳实践,以帮助确保单相机 系统的平稳设置和最佳性能。我们列出了主机系统配置、布线和相机设置......
    10GigE 实践:设置单相机系统; 主机系统配置、布线和相机设置的实践。 无论您是在研究如何使用 10GigE 还是寻求所需考虑事项的建议,本文均提供有实践,帮助......
    Blackfly S)一起用于多相机系统。为确保性能可靠,必须在相机之间共享可用的接口带宽。 超过交换机与主机之间的接口带宽将导致丢包和丢帧。 图 4. 设置设备链接通量限制以分配接口带宽 建议设置......
    的组态方案如下图所示: 通过以上系统整体组态设计,可以实现现场触摸屏通过以太网方式与S7-300通讯,实时的监控,同样工控机也可实时进行监控;远端的触摸屏也通过以太网的方式连接到工业交换机上,也可......
    交换机中的存储为何重要?;在日常的工作网络部署中,交换机作为信息交换节点分配的重要装置自然必不可少。特别是基于以太网的交换机设备,通过标准网络获得成本低廉、开放性好、应用广泛的解决方案。正因......
    信。看起来无懈可击,但其中存在一个小问题:当端口收到带tag报文,其VID和端口的VID属性不一致时,交换机会采取什么措施吗?答案是:如果没有特殊设置交换机照收不误。因为在上述VLAN转发过程中,着重......
    ,并设置 MRP 角色和 MRP 实例。且组态一致。 多环网示例 下图显示了带有两个环网 ① 和 ② 的多环网组态示例。 在该示例中,交换机 1 属于两个 MRP 环网。环网 1 由交换机 1 和......
    供全铜制端口或铜制和光纤端口混合选项,满足各种特定安装要求。凭借耐用的金属外壳和宽泛的工作温度范围,NT5000可在恶劣的工业环境中可靠运行,广泛适用于工厂自动化、机器人、食品和饮料、石油和天然气、海事、铁路等各行各业。 简易设置 为了避免繁琐且耗时的交换机......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>