Jetson Orin Nano 音频设置与开发之 DTS

详细讲解如何进行音频设置开发,涉及的步骤、概念以及具体操作。

概念概述

在 Jetson 设备中,音频设备的配置和管理通常通过 Device Tree 来完成。设备树 (dts/dtsi 文件) 定义了硬件配置,告诉操作系统和驱动程序如何与硬件交互。在音频开发中,主要涉及音频编解码器、I2S 总线、时钟源以及音频路径等设置。

在这个例子中,涉及了 SGTL5000 音频编解码器 ,这是一个常见的音频编解码器芯片,支持多个输入输出通道。这个 dtsi 文件定义了如何在 Jetson 上配置这个编解码器,以及如何通过设备树与其他硬件(如 I2S 接口、音频卡等)进行通信。

1. 时钟配置

在设备树中,首先需要为音频编解码器配置时钟,这对于音频信号的采样和传输至关重要。文件中有如下配置:

复制代码
fragment@0 {
    target-path = "/";
    __overlay__ {
        clocks {
            sgtl5000_mclk: sgtl5000_mclk {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency = <12288000>;
                clock-output-names = "sgtl5000-mclk";
                status = "okay";
            };
        };
    };
};
  • sgtl5000_mclk 是配置的时钟源,它使用了 fixed-clock 类型,表示该时钟频率固定为 12.288 MHz,适用于 SGTL5000 编解码器。

  • clock-frequency = <12288000>:设置时钟频率为 12.288 MHz,这是 SGTL5000 的工作频率。

操作步骤:

  • 确认时钟源的频率符合你的音频设备要求。

  • 设置 clocks 节点以指定正确的时钟源。

2. I2C 配置与 SGTL5000 编解码器配置

接下来需要配置 I2C 接口与 SGTL5000 音频编解码器之间的通信:

复制代码
fragment@1 {
    target = <&hdr40_i2c1>;
    __overlay__ {
        #address-cells = <1>;
        #size-cells = <0>;

        sgtl5000: sgtl5000@0a {
            compatible = "fsl,sgtl5000";
            reg = <0x0a>;
            clocks = <&sgtl5000_mclk>;
            micbias-resistor-k-ohms = <2>;
            micbias-voltage-m-volts = <3000>;
            VDDA-supply = <&hdr40_vdd_3v3>;
            VDDIO-supply = <&hdr40_vdd_3v3>;
            #sound-dai-cells = <0>;
            status = "okay";

            sound-name-prefix = "H40-SGTL";

            port {
                sgtl5000_ep: endpoint {
                    remote-endpoint = <&hdr40_snd_i2s_dap_ep>;
                    link-name = "fe-pi-audio-z-v2";
                };
            };
        };
    };
};
  • target = <&hdr40_i2c1>:这个部分表示音频编解码器通过 I2C 接口 i2c1 进行通信。

  • reg = <0x0a>:指定 SGTL5000 编解码器的 I2C 地址。

  • clocks = <&sgtl5000_mclk>:与前面的时钟源连接,确保编解码器有稳定的时钟输入。

  • micbias-resistor-k-ohms = <2>micbias-voltage-m-volts = <3000>:配置麦克风偏置电压。

操作步骤:

  • 确保 I2C 地址和时钟源设置正确。

  • 设置编解码器的电源管理配置,如电压和偏置电压。

3. 音频卡设置

然后,定义音频卡的音频路由和音频组件,如扬声器、麦克风、耳机等:

复制代码
fragment@2 {
    target = <&tegra_sound>;
    __overlay__ {
        nvidia-audio-card,widgets =
            "Headphone",    "H40-SGTL Headphone",
            "Microphone",   "H40-SGTL Mic",
            "Line",         "H40-SGTL Line In",
            "Line",         "H40-SGTL Line Out";

        nvidia-audio-card,routing =
            "H40-SGTL Headphone",    "H40-SGTL HP_OUT",
            "H40-SGTL MIC_IN",       "H40-SGTL Mic",
            "H40-SGTL ADC",          "H40-SGTL Mic Bias",
            "H40-SGTL LINE_IN",      "H40-SGTL Line In",
            "H40-SGTL Line Out",     "H40-SGTL LINE_OUT";
    };
};
  • widgets 定义了音频卡的输入输出设备,如耳机、麦克风、线路输入和输出。

  • routing 定义了音频信号的路径,比如从编解码器的耳机输出到音频卡的耳机输入。

操作步骤:

  • 配置音频卡的音频通道(例如耳机、麦克风)。

  • 定义音频流的路由配置,确保信号正确传输。

4. I2S 接口配置

I2S 是音频数据的传输协议,文件中的配置定义了如何连接 I2S 接口:

复制代码
fragment@3 {
    target = <&hdr40_snd_link_i2s>;
    __overlay__ {
        link-name = "fe-pi-audio-z-v2";
        bitclock-master;
        frame-master;

        codec {
            sound-dai = <&sgtl5000>;
            prefix = "H40-SGTL";
        };
    };
};
  • bitclock-masterframe-master:设置 I2S 总线的时钟源和帧时钟的主控。

  • sound-dai = <&sgtl5000>:指定 SGTL5000 为音频编解码器的 DAI(数字音频接口)。

操作步骤:

  • 配置 I2S 接口作为音频数据的传输通道。

  • 设置 bitclock-masterframe-master,确保时钟和数据帧同步。

5. 引脚复用配置

音频相关的引脚需要配置为 I2S 功能,这通常是通过引脚复用来实现的:

复制代码
fragment@4 {
    target = <&pinmux>;
    __overlay__ {
        pinctrl-names = "default";
        pinctrl-0 = <&jetson_io_pinmux>;

        jetson_io_pinmux: exp-header-pinmux {
            hdr40-pin12 {
                nvidia,pins = HDR40_PIN12;
                nvidia,function = HDR40_I2S;
                nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
            };
            // 更多引脚配置...
        };
    };
};
  • nvidia,function = HDR40_I2S:配置引脚为 I2S 功能。

  • nvidia,pull = <TEGRA_PIN_PULL_DOWN>:设置引脚的下拉电阻。

  • nvidia,enable-input = <TEGRA_PIN_ENABLE>:使能输入。

操作步骤:

  • 配置 I2S 数据线和时钟线的引脚复用。

  • 确保所有相关引脚的方向和电气特性设置正确。

6. 音频端点配置

最后,配置音频数据端点,建立与编解码器的连接:

复制代码
fragment@6 {
    target = <&hdr40_snd_i2s_dap_ep>;
    __overlay__ {
        bitclock-master;
        frame-master;
        remote-endpoint = <&sgtl5000_ep>;
    };
};
  • remote-endpoint = <&sgtl5000_ep>:定义 I2S 数据端点连接到 SGTL5000。

操作步骤:

  • 设置端点连接,确保数据流在设备之间正确传输。

总结与步骤:

  1. 配置时钟源,确保音频编解码器获得正确的时钟信号。

  2. 设置 I2C 接口与音频编解码器的通信,确保正确的地址和时钟源配置。

  3. 配置音频卡的音频流和路由,定义音频输入输出。

  4. 配置 I2S 接口的音频数据传输路径。

  5. 配置引脚复用以支持 I2S 信号。

  6. 配置音频端点,建立与编解码器的音频流连接。

这些步骤基本涵盖了音频开发中 Device Tree 配置的关键部分。

老徐,2026 0123

相关推荐
HalvmånEver2 小时前
Linux:信号捕捉上(信号三)
linux·运维·服务器
HIT_Weston2 小时前
108、【Ubuntu】【Hugo】搭建私人博客:搜索引擎
linux·ubuntu·搜索引擎
很㗊2 小时前
奇技淫巧之花里胡哨的VIM---插件的添加与美化
linux·ubuntu·vim
Java后端的Ai之路2 小时前
【Python小知识】-self是什么?
linux·python··self
kaoa0002 小时前
Linux入门攻坚——63、tcpdump、nc/ncat、nmap等工具的使用
linux·运维·tcpdump
CAU界编程小白2 小时前
Linux系统编程系列之进程信号
linux·信号
开开心心就好2 小时前
卸载工具清理残留,检测垃圾颜色标识状态
linux·运维·服务器·python·安全·tornado·1024程序员节
小舞O_o2 小时前
gitlab文件上传
linux·服务器·git·python·目标检测·机器学习·gitlab
HalvmånEver2 小时前
Linux:信号捕捉下(信号四)
linux·运维·数据库