You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Raspbian将ADC的SPI输入识别为声卡

适配SPI MCP3008为Raspbian ALSA声卡的设备树覆盖层配置说明

你需要基于Linux ASoC(音频系统芯片)框架的simple-audio-card通用驱动编写覆盖层,配合内核已有的mcp3008 IIO驱动、asoc-codec-iio虚拟codec驱动实现SPI ADC到声卡的映射,需要定义的节点和属性如下:

1. 基础头与公共配置

首先声明覆盖层的兼容范围、启用SPI控制器:

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/spi/spi.h>
#include <dt-bindings/iio/iio.h>

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2711"; /* 匹配树莓派4的Bcm2711 SOC */
};

/* 启用SPI0控制器 */
&spi0 {
    status = "okay";
    #address-cells = <1>;
    #size-cells = <0>;
};

2. SPI总线下的MCP3008硬件节点

在&spi0节点下新增MCP3008的设备描述,匹配内核原生IIO驱动:

&spi0 {
    /* 此处接上面spi0的已有配置 */
    mcp3008: adc@0 {
        compatible = "microchip,mcp3008";
        reg = <0>; /* 对应SPI0的CE0片选引脚,接CE1则改为<1> */
        spi-max-frequency = <1000000>; /* MCP3008支持的最高SPI时钟为1MHz */
        #io-channel-cells = <1>;
        status = "okay";
    };
};

3. 虚拟音频Codec节点

在根节点下新增ASoC虚拟Codec节点,把MCP3008的IIO采样通道映射为音频输入源:

/ {
    /* 此处接上面根节点的已有配置 */
    mcp3008_codec: codec@0 {
        compatible = "asoc-codec-iio";
        io-channels = <&mcp3008 0>; /* 0表示使用MCP3008的CH0通道,多通道采样可新增对应配置 */
        io-channel-names = "adc";
        #sound-dai-cells = <0>;
        status = "okay";
    };
};

4. 简单声卡绑定节点

在根节点下新增simple-audio-card节点,把虚拟Codec绑定为标准ALSA声卡:

/ {
    /* 此处接上面根节点的已有配置 */
    sound_mcp3008: sound@0 {
        compatible = "simple-audio-card";
        simple-audio-card,name = "MCP3008-Audio"; /* 声卡显示名称,ODAS可直接通过该名称调用 */
        simple-audio-card,format = "pdm";
        simple-audio-card,bitclock-master = <&mcp3008_codec>;
        simple-audio-card,frame-master = <&mcp3008_codec>;
        /* 配置采样参数,适配ODAS默认的16kHz采样要求 */
        simple-audio-card,rates = <16000>;
        simple-audio-card,formats = <S16_LE>;

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

        simple-audio-card,codec {
            sound-dai = <&mcp3008_codec>;
        };
    };
};

生效验证步骤

  • 编写完成后用dtc -I dts -O dtbo -o mcp3008-audio.dtbo mcp3008-audio.dts命令编译覆盖层
  • 将编译得到的.dtbo文件放入/boot/firmware/overlays/(Raspbian Bookworm)或/boot/overlays/(旧版系统)目录
  • 在/boot/firmware/config.txt末尾添加两行配置:
    dtparam=spi=on
    dtoverlay=mcp3008-audio
    
  • 重启后执行arecord -l即可看到识别到的MCP3008声卡,直接在ODAS配置中指定该声卡作为输入源即可使用

内容的提问来源于stack exchange,提问作者Artem Chepurnoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:24:03