【发布时间】: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