我有四个相同的 SPI 器件连接到我们定制板上的 DSPI_1。其中 3 个使用原生片选(0、3 和 4),而 1 个使用基于 GPIO 的片选(PC_12)。我在设备树中使用 cs-gpios 指定了所有芯片选择。
但是,只有使用 na
tive chip select 的三个器件才能正常工作。基于 GPIO 的片选器件不返回有效数据。有趣的是,如果我使用 GPIO 命令手动切换 GPIO CS 引脚(在读取前将其拉低,在读取后将其拉高),我可以完成一个事务。但是,我必须为每笔后续交易再次切换密码。
从示波器来看, SPI 控制器似乎根本不驱动 GPIO CS。您知道是否需要任何其他配置才能使 GPIO 芯片选择正常工作?
作为参考,我在下面包含了我的设备树代码段。此外,我在 dmesg 中注意到一条错误消息,但我不确定它是否相关。
[ 0.669149] OF: /soc/spi@401d8000: 无法获取
谢谢
XD
&spi1 { pinctrl-0 = <&dspi1_pins>; pinctrl-names = "default"; status = "okay"; spi-num-chipselects = <5>; cs-gpios = <0>, <&gpio 44 0>, <3>, <4>; tcan1146@0 { status = "okay"; compatible = "rohm,dh2228fv"; spi-max-frequency = <4000000>; reg = <0>; fsl,spi-cs-sck-delay = <100>; fsl,spi-sck-cs-delay = <100>; }; tcan1146@1 { status = "okay"; compatible = "rohm,dh2228fv"; spi-max-frequency = <4000000>; reg = <1>; fsl,spi-cs-sck-delay = <100>; fsl,spi-sck-cs-delay = <100>; }; tcan1146@3 { status = "okay"; compatible = "rohm,dh2228fv"; spi-max-frequency = <4000000>; reg = <3>; fsl,spi-cs-sck-delay = <100>; fsl,spi-sck-cs-delay = <100>; }; tcan1146@4 { status = "okay"; compatible = "rohm,dh2228fv"; spi-max-frequency = <4000000>; reg = <4>; fsl,spi-cs-sck-delay = <100>; fsl,spi-sck-cs-delay = <100>; };};
0