我在嵌入式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>;
};

设备绑定(bind)看起来正确。当我编译内核时,我得到了/dev/spidev1.1。之后,我使用spidev_test.c并通过示波器监视引脚。 SCK和MOSI输出正确,但是,即使在数据传输期间,片选也被设置为逻辑高电平。

有什么方法可以确定为什么在传输过程中spidev不能设置为逻辑低?似乎要么需要在内核上传递其他内容,要么在spidev上存在无法控制芯片选择的问题。我想知道是否需要更改内核的driver/spi目录中的spidev.h或spidev.c?或我该如何解决?

The reference manual用于处理器

最佳答案

我从未使用过设备树,但是无论如何我都会尽力帮助您。

内核创 build 备/dev/spidev1.1,因此spidev连接到SPI总线1,芯片选择1。芯片选择计数从0开始,并且您没有与SPI总线1相关联的任何其他设备。

据我所知reg = <1>告诉SPI内核,spidev已连接到芯片选择1。但是也许您的设备已连接到芯片选择0。所以,reg = <0>

关于linux - spidev无法控制片选信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19417378/

10-11 03:36