"); //-->

狠狠做深爱婷婷久久一区,欧美日韩国内,久久麻豆精品传媒,久久久一区一区二区,色鬼伦理片,99视频精品久久,久久精品国产久久久久久,久久久伦理电影一区二,磁力天堂河北彩花

專欄中心

EEPW首頁 > 專欄 > 基于NXP iMX8處理器擴展外部 SGTL5000 音頻接口

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

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

By Toradex胡珊逢

 

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

imx8-apalis-v1.1.dtsi  I2C3 節(jié)點添加 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-supplyVDDIO-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 節(jié)點后再增加一個 外部 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 節(jié)點。

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

&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 文件下載。重新啟動后檢查外部 SGTL5000 掛載情況。在I2C-5 通道上已經(jīng)發(fā)現(xiàn)地址為 0x0a 的設(shè)備。

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

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: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

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

 

相應(yīng)的驅(qū)動也加載。

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

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

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

 

檢查聲卡設(shè)備,發(fā)現(xiàn) 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 調(diào)整。按F6 選擇外部 SGTL5000。

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

 

Gong.wav 是一個采樣率44.1KHz16bit雙聲道文件,比特率=16*2*44.1K=1.4MHz。如下面示波器測量顯示,CH1 LRCLKCH2 SCLK。

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

 

SGTL5000 在播放時會根據(jù)音源文件調(diào)整工作參數(shù),例如時鐘,PLL 工作狀態(tài)。可以通過 cat /sys/kernel/debug/regmap/5-000a/registers 命令查看寄存器配置。由于 SGTL5000 的已經(jīng)被其驅(qū)動占用,所以無法使用 i2cget 讀取寄存器。

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

 

例如寄存器 CHIP_CLK_CTRL 0x0004 的值為 0007。bit3:2=0x01,表示采樣頻率為 44.1KHz。Bit 1:0 = 0x3,表示使用 PLL 。這是由于  44.1KHz 信號無法通過 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 命令查看對應(yīng)聲卡的 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

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

 

 

總結(jié)

Apalis iMX8 的數(shù)字音頻接口可以非常方便地擴展音頻編****,具體的引腳分配、device tree 配置等需要結(jié)合所使用的音頻編****,有些可能會十分簡單,如 MAX98357A,其甚至不需要 I2C SYS_MCLK 就可以直接工作。Apalis iMX8 所使用的 Linux kernel 源碼中有非常多的示例可供用戶參考。 


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

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

相關(guān)推薦

康佳特推出首款 Arm 架構(gòu) SMARC 模塊

ARM嵌入式系統(tǒng)開發(fā)

Arm再創(chuàng)季度營收紀(jì)錄

EDA/PCB 2026-02-09

Arm自研芯片掀「跨界戰(zhàn)爭」 臺積電旗下創(chuàng)意恐首當(dāng)其沖

天勢科技與Arm戰(zhàn)略合作,為人工智能驅(qū)動的個人 “智能自動駕駛汽車” 提供技術(shù)支持

最新ARM技術(shù)和嵌入式技術(shù)發(fā)展動態(tài) 中

視頻 2009-10-22

NXP 發(fā)布eIQ代理AI框架,實現(xiàn)安全邊緣自治

Arm與Linaro聯(lián)合發(fā)起行業(yè)聯(lián)盟 CoreCollective

最新ARM技術(shù)和嵌入式技術(shù)發(fā)展動態(tài) 下

視頻 2009-10-22

ARM嵌入式軟件編程經(jīng)驗談

arm學(xué)習(xí)資料

WinCE+ARM開發(fā)及關(guān)鍵技術(shù) 上

視頻 2009-10-22

ARM嵌入式系統(tǒng)開發(fā):軟件設(shè)計與優(yōu)化

Arm重磅推出AGI CPU 1OU 雙節(jié)點參考服務(wù)器

ARM開發(fā)詳解

OSM模塊由NXP i.MX 95驅(qū)動,用于邊緣 AI

ARM 展示小型低功耗上網(wǎng)本樣品

視頻 2009-03-16

摩爾線程推出ARM架構(gòu)SoC“長江” 進軍筆記本芯片市場

WinCE+ARM開發(fā)及關(guān)鍵技術(shù) 下

視頻 2009-10-22

Arm AGI CPU:智能體式人工智能云時代的芯片基石

更多 培訓(xùn)課堂
更多 焦點
更多 視頻

技術(shù)專區(qū)

白城市| 砀山县| 临潭县| 涿鹿县| 白朗县| 浦东新区| 新邵县| 河曲县| 株洲市| 大英县| 收藏| 江孜县| 西安市| 永寿县| 桃源县| 兴化市| 贺兰县| 马关县| 东平县| 斗六市| 宣恩县| 集安市| 红河县| 科技| 高平市| 元氏县| 承德县| 金昌市| 柯坪县| 五峰| 新野县| 安仁县| 兴海县| 永安市| 桂阳县| 崇信县| 广丰县| 崇仁县| 龙井市| 韶山市| 辽中县|