您尚未登录。

楼主 #1 2020-08-02 21:52:47

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

研究了好几天,终于驱动成功了,一堆问题,发个帖子来记录下
spi:使用linux提供的GPIO-based bitbanging SPI Master ,然后在dts文件里添加spi节点
tft:使用的是fbtft提供的屏幕驱动,挂在上面生成的模拟spi下面
还存在很多问题,但暂时是可以将屏幕初始化了,可以参考一下

离线

#2 2020-08-02 22:00:09

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 849
积分: 720

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

如果不考虑移植性,可以不用设备树,现在正好也在研究linux的屏幕驱动,想用tft的并口方式驱动,提高帧率

离线

楼主 #3 2020-08-02 22:02:42

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

首先是gpio模拟spi,在linux的

Device Drivers  --->
    [*] SPI support  ---> 
        <*>   GPIO-based bitbanging SPI Master 

这里开启,然后在设备树的根节点下添加节点

 spi2:spi2{
		compatible = "spi-gpio";
		#address-cells = <0x1>;
        #size-cells = <0>;
		//ranges;
		gpio-miso = <&pio 3 3 1>;
		gpio-mosi = <&pio 3 4 1>;
        gpio-sck  = <&pio 3 5 1>;
		cs-gpios  = <&pio 3 6 1>;
		num-chipselects = <1>;
        
        pinctrl-names = "default";
        pinctrl-0 = <&spi2_pins_a>;
        spidev2 {        
            status="disable";
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "rohm,dh2228fv";
            spi-max-frequency = <20000000>;
            reg = <0>;
           
        };
        

	};

这里添加了一个测试设备,可以用tools/spi里面的测试文件进行测试spi是否配置成功
其中pinctrl是这么配置的

&pio{
    spi2_pins_a: spi2-pins-pc {
				pins = "PD3", "PD4", "PD5", "PD6";
				function = "gpio_out";
                 bias-pull-up;
			};        
};

只在spi2那里面设置引脚是并不能直接使用的,虽然能在系统中找到设备,但是连接miso和mosi后操作spi发送信息并不会收到任何信息,gpio的表现为没有配置,没有任何变化

离线

楼主 #4 2020-08-02 22:16:53

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

最后是fbtft的设置:
内核配置

Device Drivers  --->
    [*] Staging driverst  ---> 
        <*>   Support for small TFT LCD display modules --->
                  <*> FB driver for the ST7789V LCD Controller
                  <*> Generic ....
                  <*> Module .....

把这些都编译进内核,修改dts文件,添加st7789的节点(参考的荔枝派 zero的点屏之SPI屏
根节点下/

spi2:spi2{
		compatible = "spi-gpio";
		#address-cells = <0x1>;
        #size-cells = <0>;
		//ranges;
		gpio-miso = <&pio 3 3 1>;
		gpio-mosi = <&pio 3 4 1>;
        gpio-sck  = <&pio 3 5 1>;
		cs-gpios  = <&pio 3 6 1>;
		num-chipselects = <1>;
        
        pinctrl-names = "default";
        pinctrl-0 = <&spi2_pins_a>;
        spidev2 {        
            status="disable";
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "rohm,dh2228fv";
            spi-max-frequency = <20000000>;
            reg = <0>;
           
        };
        st7789 {
            compatible = "sitronix,st7789v";
            reg = <0>;

            spi-max-frequency = <50000000>;
            rotate = <270>;
            bgr;
            width=<240>;
            height=<240>;
            fps = <30>;
            buswidth = <9>;
            reset-gpios = <&pio 3 0 GPIO_ACTIVE_LOW>;
            //dc-gpios = <&pio 1 5 GPIO_ACTIVE_LOW>;
            debug = <0>;
    };

pio节点里

&pio{

    spi2_pins_a: spi2-pins-pc {
				pins = "PD3", "PD4", "PD5", "PD6";
				function = "gpio_out";
                 bias-pull-up;
			};        
};

可以看这个修改屏幕的一些参数FBTFT devices tree

烧录进去后屏幕会在内核启动时初始化为白色,启动日志中有fb相关的启动

离线

楼主 #5 2020-08-02 22:18:36

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

才学linux几天,驱动还不怎么会写,还在看 tongue

最近编辑记录 lignin (2020-08-02 22:19:45)

离线

#6 2020-08-02 22:28:34

我思故我在
会员
注册时间: 2019-09-03
已发帖子: 244
积分: 243.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

不用GPIO去模拟,太慢了, 可以用硬件SPI, 通过GPIO片选CS#就行, 本站有参考资料.

离线

楼主 #7 2020-08-02 23:16:01

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

开始是因为屏是用9位spi,而f1c100s不支持9位,就没想着去用硬件spi,画板子就直接就近找的引脚,为了方便我就用了模拟spi,不用再跳线

离线

楼主 #8 2020-08-02 23:17:22

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

然后在fbtft的源码里发现可以用8位的spi去模拟,这才明白,下一版就会接到硬件spi上

离线

#9 2020-08-03 07:46:03

longxuekai
会员
注册时间: 2019-11-19
已发帖子: 2
积分: 2

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

好好研究一下,学习学习咯,spi去模拟

离线

#10 2020-08-03 12:26:38

kesion
会员
注册时间: 2020-07-03
已发帖子: 45
积分: 32

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

哪里买来的手表屏,圆的还是方的

离线

#11 2020-08-03 12:32:39

smartcar
会员
注册时间: 2018-02-19
已发帖子: 735
积分: 735

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

lignin 说:

然后在fbtft的源码里发现可以用8位的spi去模拟,这才明白,下一版就会接到硬件spi上

按上面这个配置,驱动9bit st7789成功了吗?

离线

楼主 #12 2020-08-03 18:17:20

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

成功了,现在是成功初始化,显示白色,但是我不会让它显示其他东西,还在学

smartcar 说:

按上面这个配置,驱动9bit st7789成功了吗?

离线

#13 2020-08-03 18:57:52

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,386
积分: 1902
个人网站

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

lignin 说:

成功了,现在是成功初始化,显示白色,但是我不会让它显示其他东西,还在学

cat /dev/urandom > /dev/fb0
cat /dev/zero > /dev/fb0





离线

#14 2020-08-04 11:05:44

pww
会员
注册时间: 2020-07-10
已发帖子: 2
积分: 2

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

板上就一个flash和SD卡插口,不过这个对我这种第一次画的人有很大的借鉴意义,感谢大佬

离线

#15 2020-08-04 12:06:31

gary
会员
注册时间: 2018-05-30
已发帖子: 54
积分: 13.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

接MCU的屏会方便一些吧

离线

楼主 #16 2020-08-05 10:47:28

lignin
会员
注册时间: 2020-03-21
已发帖子: 111
积分: 109.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

没直接插那座子的屏幕。等之后有了在调那边的接口

离线

#17 2021-10-29 19:43:55

HongSang
会员
注册时间: 2021-08-12
已发帖子: 42
积分: 16.5

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

请问根据不同的屏厂,是不是只需要修改fb_st7789.c文件里面的init_display这个屏幕初始化和fbtft_display display 这里面的lcd参数?

离线

#18 2022-06-11 13:53:15

a47885808
会员
注册时间: 2022-06-11
已发帖子: 3
积分: 0

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

没直接插那座子的屏幕。等之后有了在调那边的接口?

离线

#19 2022-11-03 20:34:52

akisasaki
会员
注册时间: 2022-04-27
已发帖子: 12
积分: 7

Re: F1C100 使用GPIO模拟SPI 驱动 st7789手表屏

@lignin
不是很明白,实际上SPI不是有四根线吗,SCK、MOSI、CS三根线可以设置为输出模式,但是实际上MISO不是应该设置为输入模式吗?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn