您尚未登录。

楼主 #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下面
还存在很多问题,但暂时是可以将屏幕初始化了,可以参考一下

离线

楼主 #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)

离线

楼主 #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上

离线

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

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

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

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

smartcar 说:

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

离线

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

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

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

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

离线

页脚

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

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