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

Linux设备树下如何将可选GPIO映射至IIO驱动(AD9850场景)

问题与解决方案

问题概述

在Yocto构建的嵌入式Linux系统(Xilinx Zynq-7020 SoC)中,通过AXI SPI IP核与AD9850 DDS芯片通信时,因SPI核单次事务仅支持32位,而AD9850需40位数据传输,故采用SPI外设负责时钟和数据引脚,GPIO手动控制CS(FQ_UPDATE)引脚。目前SPI信号经逻辑分析仪验证正常,但GPIO控制的CS引脚未达预期效果,问题根源是设备树中GPIO未与IIO驱动正确关联。

核心修改思路

驱动通过devm_gpiod_get_optional(&spi->dev, "adi,fq_update", ...)从SPI设备节点获取GPIO资源,因此需将GPIO属性直接添加到AD9850的SPI子节点下,而非单独创建无关联的GPIO节点。

修改后的设备树片段

&amba_pl {
    // 移除原独立的gpio-dds-cs节点,该节点未与SPI设备绑定,驱动无法识别
};

&dds_spi {
    num-cs = <1>;
    status = "okay";
                   
    dds: ad9850@0 {
        label = "dds";
        compatible = "ad9850";
        reg = <0x0>;
        spi-max-frequency = <1000000>;
        // 关联fq_update GPIO,属性名需与驱动中"adi,fq_update"对应,后缀加"-gpios"
        adi,fq_update-gpios = <&dds_chip_select_gpio 0 1>;
        // 第三个参数1表示GPIO_ACTIVE_LOW,可根据AD9850引脚实际极性调整
    };
};

关键说明

  1. GPIO属性命名规则:Linux GPIO子系统要求设备树中GPIO属性名为[prefix]-gpios,驱动中devm_gpiod_get_optional的字符串参数是prefix,这里对应adi,fq_update,因此属性名必须为adi,fq_update-gpios。
  2. GPIO节点有效性:确保dds_chip_select_gpio节点在设备树中已正确定义且状态为okay,引脚编号和电平极性需与硬件实际连接一致。
  3. 驱动无需调整:当前驱动中devm_gpiod_get_optional的调用逻辑正确,仅需修改设备树即可让驱动成功获取GPIO句柄。

内容的提问来源于stack exchange,提问作者Adam Wilson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:12:39