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

Linux DTS编译SPI设备时reg属性格式警告问题排查

问题原因及解决方案

警告根源

编译警告的核心原因是spi-gpio节点未显式设置#size-cells = <0>:

  • 你在spi-gpio节点中声明了#address-cells = <1>,但未指定#size-cells。由于添加了ranges属性,设备树会默认继承父节点的#size-cells值(通常为1)。
  • 当#address-cells=1且#size-cells=1时,reg属性要求格式为<地址 大小>(共2个32位值,8字节),但你给从设备的reg只写了芯片选择号(如<0>,仅4字节),长度不符合要求,因此触发reg_format警告。

SPI总线的特性是:从设备通过芯片选择(CS)线寻址,不需要地址空间大小,因此SPI总线节点的#size-cells必须设为0。

修复步骤

在spi-gpio节点中添加#size-cells = <0>,修改后的节点如下:

spi-gpio {
    compatible = "spi-gpio";
    #address-cells = <0x1>;
    #size-cells = <0>;  // 新增这一行
    ranges;
    status = "okay";

    sck-gpios   = <&pio 4 9 GPIO_ACTIVE_HIGH>;  // PE9
    mosi-gpios  = <&pio 4 6 GPIO_ACTIVE_HIGH>;  // PE6
    miso-gpios  = <&pio 4 8 GPIO_ACTIVE_HIGH>;  // PE8
    cs-gpios    = <&pio 4 4 GPIO_ACTIVE_HIGH>,  // PE4
                  <&pio 4 17 GPIO_ACTIVE_HIGH>; // PE17
    num-chipselects = <2>;

    /* Clients */
    m90e32@0 {
        reg = <0>;
        compatible = "atmel,m90e32";
        spi-max-frequency = <1000>;
        reset-gpios = <&pio 4 18 GPIO_ACTIVE_HIGH>; // 注释写的PE17,实际是PE18,建议修正注释
    };

    m90e32@1 {
        reg = <1>;
        compatible = "atmel,m90e32";
        spi-max-frequency = <1000>;
        reset-gpios = <&pio 4 18 GPIO_ACTIVE_HIGH>; // 同样注释与实际GPIO不符,建议修正
    };
};

额外提示

你代码中两个从设备的reset-gpios注释写的是PE17,但实际配置的是&pio 4 18(对应PE18),这属于注释与代码不一致的小问题,建议同步修正,避免后续维护混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:03:16