spidev无法控制芯片选择信号。

9

我在嵌入式linux设备(Olimex iMX233 Micro)上使用内核版本为3.12.rc4。我的目标是使用 /dev/spidev 来与另一个spi设备进行通信。

我编辑了 arch/arm/boot/dts/imx23-olinuxino.dts,如下所示:

ssp1: ssp@80034000 {
  #address-cells = <1>;
  #size-cells = <0>;
  compatible = "fsl,imx23-spi";
  pinctrl-names = "default";
  pinctrl-0 = <&spi2_pins_a>;
  clock-frequency = <1000000>;
  status = "okay";

  spidev: spidev@0 {
    compatible = "spidev";
    spi-max-frequency = <1000000>;
    reg = <1>;
  };
};

arch/arm/boot/dts/imx23.dtsi:包含以下配置

spi2_pins_a: spi2@0 {
  reg = <0>;
  fsl,pinmux-ids = <
    0x0182 /* MX23_PAD_GPMI_WRN__SSP2_SCK */
    0x0142 /* MX23_PAD_GPMI_RDY1__SSP2_CMD */
    0x0002 /* MX23_PAD_GPMI_D00__SSP2_DATA0 */
    0x0032 /* MX23_PAD_GPMI_D03__SSP2_DATA3 */
  >;
  fsl,drive-strength = <1>;
  fsl,voltage = <1>;
  fsl,pull-up = <1>;
};

设备绑定看起来正确。当我编译内核时,会得到/dev/spidev1.1。之后,我使用spidev_test.c并通过示波器监视引脚。SCK和MOSI输出信号正确,然而,在数据传输期间片选被设为逻辑高电平。
有没有办法确定为什么spidev在传输期间不能设置为逻辑低电平?似乎需要在内核中传递其他附加信息或者spidev存在无法控制芯片选择的问题。我想知道是否需要更改内核的driver / spi目录下的spidev.h或spidev.c?还是如何解决这个问题?
处理器的参考手册

你确定这不是硬件问题吗?尝试将引脚设置为GPIO并确保它发生变化。 - stdcall
1个回答

6
我从未使用过设备树,但我会尽力帮助你。
内核创建了设备/dev/spidev1.1,因此spidev连接到SPI总线1、片选1。片选编号从0开始,且您没有任何其他设备关联到SPI总线1。
据我所知,reg = <1>告诉SPI核心,spidev连接到片选1。但也有可能您的设备连接到片选0,因此应该是reg = <0>

它没有解决我的问题,但与其浪费100分,还不如把它给别人:) - sven
谢谢 ;) 你检查过芯片选择是否有移动吗? - Federico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接