【问题标题】:STM32MP157c SPI clock will not idle highSTM32MP157c SPI时钟不会闲置高
【发布时间】:2021-06-22 10:20:24
【问题描述】:

我正在尝试通过 SPI 使用 stm32mpu 运行 crystalfonts lcd cfaf240320a0024sc (https://www.crystalfontz.com/product/cfaf240320a0024sc-240x320-full-color-touchscreen-tft-2-4)。 LCD控制器为ST7789

我使用的是 octavo OSD32MP1-BRK 附带的 STM32MP157c。

OpenSTLinux 内核版本为 5.4

我可以轻松地将 LCD 与 arduino/seduino 连接。但它不适用于八开音。

我使用 Linux 用户空间 spidev 接口编写了 arduino 示例程序 (https://www.crystalfontz.com/products/document/4222/CFAF240320A0-024SC_Arduino_SPI_bring_up.zip) 的克隆。我注意到的一件事是,即使我设置了 CPOL=1,时钟也不会闲置高电平。它总是回到低点。

我正在使用以下设备树块:

    &spi6 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&spi6_pins_mx>;
    pinctrl-1 = <&spi6_sleep_pins_mx>;
    cs-gpios = <&gpioz 3 0>;
    status = "okay";
    spi-cpol = <1>;
    spi-cpha = <0>;

   spidev6: spidev6@0{
    compatible = "rohm,dh2228fv";
    spi-max-frequency = <30000000>;
    reg = <0>;
    spi-cpol = <1>;
    spi-cpha = <0>;
  };
};

我也尝试在 pinconfig 块中提取相关引脚,并尝试不使用它,但没有运气:

    spi6_pins_mx: spi6-0 {
    pins1 {
      pinmux = <STM32_PINMUX('Z', 2, AF8)>; /* SPI6_MOSI */
      bias-disable;
      drive-push-pull;
      slew-rate = <1>;
    };

    pins2 {
      pinmux = <STM32_PINMUX('Z', 1, AF8)>; /* SPI6_MISO */
      bias-disable;
    };

    pins3 {
      pinmux = <STM32_PINMUX('Z', 0, AF8)>; /* SPI6_SCK */
      bias-pull-up;
      slew-rate = <1>;
    };
  };

我什至在 LCD 分离的情况下进行了测试,但它的空闲时间仍然很低。我已通过打开和关闭板载 LED 验证我的设备树更改正在运行。

在 SPI 开始传输之前,它变高,传输完成后,它又变低。这是不可接受的,因为许多便宜的 LCD 没有 CS 引脚,并且它们基于时钟边缘而不是 CS 读取。

在用户空间 spidev 程序中,我也使用相同的 SPI 模式 (2)

这里已经有人问过这个问题:https://electronics.stackexchange.com/q/572302/278129

但该社区没有任何回应

【问题讨论】:

    标签: embedded-linux stm32 spi


    【解决方案1】:

    感谢https://electronics.stackexchange.com/users/289513/thomas-petazzoni

    这里的原始答案:

    https://electronics.stackexchange.com/a/572341/278129

    “spi-stm32 驱动程序使用运行时 PM,当 SPI 控制器不使用时(在一定超时后),它会自动将引脚切换到“睡眠”引脚复用配置。这可能是您所看到的在这里。尝试禁用 SPI 控制器的运行时 PM,或者"

    它将进入“spi6_sleep_pins_mx”引脚配置,其中所有 SCK、MOSI 等引脚都定义为“模拟”。

    如果我们从可能的引脚控制配置中删除“spi6_sleep_pins_mx”,使得只有一个 pinctrl 配置,它就可以工作。

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2020-04-06
      • 2021-04-22
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      相关资源
      最近更新 更多