<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口

發(fā)布人:toradex 時(shí)間:2023-04-19 來(lái)源:工程師 發(fā)布文章

By Toradex胡珊逢

 

Apalis iMX8 計算機模塊的數字音頻接口 SAISynchronous Audio Interface)可以配置為 AC97、I2S格式,用于連接外部音頻編****。文章接下來(lái)將介紹在 Linux BSP v6 上如何擴展第二路 SGTL5000。

 

iMX8 處理器具有多路 SAI 通道,SAI1 已經(jīng)被模塊片上的 SGTL5000 使用,SAI0 通道引出到模塊金手指上,并且是兼容 Apalis 標準數字音頻接口,通道在基于其他 CPU Apalis 模塊也可以直接使用。因此,我們選擇 SAI0 擴展外部 SGTL5000。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口345.png 

 

SGTL5000 面向 iMX8 處理器的接口主要是 I2S 和時(shí)鐘信號。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口386.png 

 

Apalis iMX8 SAI0 通道可以直接連接 SGTL5000 I2S 接口。但是 MXM3_194 引腳上沒(méi)有時(shí)鐘信號。對于外部音頻編****如果需要時(shí)鐘輸入,如 SGTL5000 SYS_MCLK,可以選擇 MXM3_215 引腳,或者采用外部時(shí)鐘源,如晶振。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口530.png 

 

SGTL5000 master mode 時(shí)可以向 Apalis iMX8 輸出 I2S_LRCLK I2S_SCLK 信號。 當SYS_MCLK = SupportedRates * Fs,I2S_LRCLK 可以和 SYS_MCLK 同步。如果無(wú)法滿(mǎn)足,SGTL5000 則會(huì )使用內部的 PLL  產(chǎn)生符合音源的  I2S_LRCLK 頻率。PLL 的使用會(huì )增加 額外的功耗。PLL 的時(shí)鐘輸入也來(lái)自 SYS_MCLK,可以支持 8.0 27MHz 頻率。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口770.png 

 

外部 SGTL5000 原理圖如下,其中使用一個(gè)12.28MHz 的外部有源晶振。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口815.png 

 

接下來(lái)修改 device tree 添加 SGTL5000 的相關(guān)配置。

imx8-apalis-v1.1.dtsi  I2C3 節點(diǎn)添加 SGTL5000 I2C 配置。

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

/* Apalis I2C3 (CAM) */
&i2c3 {
    #address-cells = <1>;
    #size-cells = <0>;
    clock-frequency = <100000>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_lpi2c3>;
    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 = <?_ex_auido_3v>;
        VDDIO-supply = <?_ex_auido_3v>;
        VDDD-supply = <?_ex_auido_1v8>;
        clocks = <&ex_audio_clk>;
    };

};

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

 

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>;
    };

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

 

以及外部時(shí)鐘定義。

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

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

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

 

在原有的 sound 節點(diǎn)后再增加一個(gè) 外部 SGTL5000 sound_external。

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

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

        simple-audio-card,cpu {
            sound-dai = <&sai0>;
        };

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

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

 

配置 sai0 節點(diǎn)。

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

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

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

 

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

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

&sai0 {
    status = "okay";
};

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

 

參考這里重新編譯和部署 device tree 。上面提到的 patch 文件下載。重新啟動(dòng)后檢查外部 SGTL5000 掛載情況。在I2C-5 通道上已經(jīng)發(fā)現地址為 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: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

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

 

相應的驅動(dòng)也加載。

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

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

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

 

檢查聲卡設備,發(fā)現 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

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

 

如果音量小的話(huà),使用 alsamixer 調整。按F6 選擇外部 SGTL5000。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口5684.png 

 

Gong.wav 是一個(gè)采樣率44.1KHz,16bit雙聲道文件,比特率=16*2*44.1K=1.4MHz。如下面示波器測量顯示,CH1 LRCLK,CH2 SCLK。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口5777.png 

 

SGTL5000 在播放時(shí)會(huì )根據音源文件調整工作參數,例如時(shí)鐘,PLL 工作狀態(tài)??梢酝ㄟ^(guò) cat /sys/kernel/debug/regmap/5-000a/registers 命令查看寄存器配置。由于 SGTL5000 的已經(jīng)被其驅動(dòng)占用,所以無(wú)法使用 i2cget 讀取寄存器。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口5925.png 

 

例如寄存器 CHIP_CLK_CTRL 0x0004 的值為 0007。bit3:2=0x01,表示采樣頻率為 44.1KHz。Bit 1:0 = 0x3,表示使用 PLL 。這是由于  44.1KHz 信號無(wú)法通過(guò) 12.28MHz 256、384512 倍分頻得到,所以只能使用 PLL 產(chǎn)生。

基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口6082.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 配置等需要結合所使用的音頻編****,有些可能會(huì )十分簡(jiǎn)單,如 MAX98357A,其甚至不需要 I2C SYS_MCLK 就可以直接工作。Apalis iMX8 所使用的 Linux kernel 源碼中有非常多的示例可供用戶(hù)參考。 


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: ARM Linux iMX8 SAI NXP Audio Toradex Apalis

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>