首页 > 系统相关 >Linux 添加SPI显示屏并取消闪烁光标

Linux 添加SPI显示屏并取消闪烁光标

时间:2023-10-25 13:34:09浏览次数:31  
标签:par struct int dev fbtft SPI Linux gpio 光标

1、修改设备树(sun8i-h3-nanopi-m1.dts添加内容,确保SPI接口硬件上拉)

&spi0 {
  status="okay";
  st7735s@0 {
    status = "okay";
    compatible = "sitronix,st7735s";
    reg = <0>;
    spi-max-frequency =<32000000>; //SPI时钟32M
    rotate =<270>; //屏幕旋转270度
    spi-cpol;
    spi-cpha;
    rgb; //颜色格式RGB
    fps =<30>; //刷新30帧率
    buswidth =<8>; //总线宽度8
    reset =<&pio 0 20 GPIO_ACTIVE_LOW>; //PA20
    dc =<&pio 0 21 GPIO_ACTIVE_LOW>; //PA21
    debug =<0>; //不开启调试
  };
};

2、修改驱动文件(linux-5.10.172/drivers/staging/fbtft/fb_st7735r.c)

  2.1、拷贝linux-5.10.172/drivers/staging/fbtft/fb_st7735r.c为linux-5.10.172/drivers/staging/fbtft/fb_st7735s.c

  2.2、修改相关名称内容。一定要修改compatible属性与设备树一致。

  FBTFT_REGISTER_DRIVER(DRVNAME, "sitronix,st7735s", &display);

  2.3、显示不全修改显示代码(fb_st7735s.c)添加偏移量

  static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
  {
    write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,xs >> 8, xs & 0xFF, xe >> 8, xe & 0xFF);
    write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,(ys+24) >> 8, (ys+24) & 0xFF, (ye+24) >> 8, (ye+24) & 0xFF);
    //write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,ys >> 8, ys & 0xFF, ye >> 8, ye & 0xFF);
    write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
  }

  2.3、在同目录Kconfig、Makefile中添加编译选项。

  2.4、修改fbtft-core.c文件中的fbtft_request_one_gpio、fbtft_reset函数

  static int fbtft_request_one_gpio(struct fbtft_par *par,const char *name, int index,struct gpio_desc **gpiop)
  {
    struct device *dev = par->info->device;
    struct device_node *node = dev->of_node;
    int gpio, flags, ret = 0;
    enum of_gpio_flags of_flags;

    if (of_find_property(node, name, NULL)) {
      gpio = of_get_named_gpio_flags(node, name, index, &of_flags);
      if (gpio == -ENOENT)
        return 0;
      if (gpio == -EPROBE_DEFER)
        return gpio;
      if (gpio < 0) {
        dev_err(dev,"failed to get '%s' from DT\n", name);
        return gpio;
      }

      //active low translates to initially low
      flags = (of_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW :GPIOF_OUT_INIT_HIGH;
      ret = devm_gpio_request_one(dev, gpio, flags,
      dev->driver->name);
      if (ret) {
        dev_err(dev,"gpio_request_one('%s'=%d) failed with %d\n",name, gpio, ret);
        return ret;
      }

      *gpiop = gpio_to_desc(gpio);
      fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%d\n",__func__, name, gpio);
    }

    return ret;
  }

  static void fbtft_reset(struct fbtft_par *par)
  {
    if (!par->gpio.reset)
      return;
    fbtft_par_dbg(DEBUG_RESET, par, "%s()\n", __func__);
    gpiod_set_value_cansleep(par->gpio.reset, 1);
    msleep(10);
    gpiod_set_value_cansleep(par->gpio.reset, 0);
    msleep(200);
    gpiod_set_value_cansleep(par->gpio.reset, 1);
    msleep(10);
  }

3、Linux显示屏取消闪烁光标

  将linux-5.10.172/drivers/video/fbdev/core/softcursor.c文件里的int soft_cursor(struct fb_info *info, struct fb_cursor *cursor);函数置为空即可。

标签:par,struct,int,dev,fbtft,SPI,Linux,gpio,光标
From: https://www.cnblogs.com/linux-learn/p/17786933.html

相关文章

  • linux获取文件或者是进程精确时间的方法
    linux获取文件或者是进程精确时间的方法背景很多时候需要精确知道文件的具体时间.也需要知道进程的开始的精确时间.便于进行一些计算的处理.其实linux里面有很多方式进行文件属性的查看.这里简单总结一下.文件系统时间查看ls以及ll命令可以查看文件的一些简要信息但......
  • [linux] 自定义触摸板功能
    现在ubuntu最新版本使用wayland管理输入。而不是x11了,网上有很多教程建议使用的软件都不能用,搞不好还就把原来系统内置的一些东西搞坏了。在x11(xorg)下可以使用touchegg搭配touche使用,但是在wayland下不行。这里发一个目前实测可以用的自定义触摸板功能的软件叫fusumahttps://githu......
  • linux中执行uefi runtime service call的内存上下文切换
    当linuxkernel从UEFI启动之后尽管bootservice退出了但是仍然可以使用runtimeservice。这就引发了一个问题:存在于uefi内存空间的code如何被kernel调用。首先找一个调用efiruntimeservice的例子:staticvoidefi_call_rts(structwork_struct*work){...switch(e......
  • linux 内存盘的使用方式与验证
    linux内存盘的使用方式与验证背景某些情况下,硬盘的写入是一个很大的瓶颈使用内存文件系统的方式应该能够极大的提高IO的速度.内存盘的优点是比较快,缺点就是数据不是持久化的.其实还是有很多可以持续优化的方式与方法的.可以最大化的磁盘的IO速度等.内存盘的多种模......
  • Linux安全加固
    1、设置复杂密码  :服务器设置大写、小写、特殊字符、数字组成的12-16位的复杂密码2、设置密码策略   :修改文件/etc/login.defs     PASS_MAX_DAYS99999   密码的有效期:99999基本上表示永久有效    PASS_MIN_DAYS0     表示自上次修改密......
  • bilibili B站:makefile 编译Linux C/C++项目快速入门
    视频摘自:https://www.bilibili.com/video/BV1vg41177zT    ......
  • 详解Linux中FTP命令 (ftp命令 linux)
    Linux中FTP命令详解FTP(FileTransferProtocol)是一种用于在网络上传输文件的标准协议。在Linux操作系统中,可以使用FTP命令进行文件的上传和下载,而无需使用第三方工具。本文将详细介绍Linux中FTP命令的使用方法和相关技巧。一、FTP命令概述FTP命令是Linux中自带的命令之一,用于连......
  • Linux下更新curl版本教程!
    在Linux下更新curl版本,您可以按照以下步骤进行操作:1、检查当前curl版本:首先,您需要确定当前系统中安装的curl版本。打开终端,并执行以下命令:curl--version 该命令将显示当前curl的版本信息。1、确认可用的curl版本:在更新curl之前,您需要确定可用的最新版本。您可以......
  • MCP2515国产替代兼容方案DPC15完全PIN对PIN支持spi通信的CAN总线控制芯片
    说明DPC15是一款独立控制器局域网络(ControllerAreaNetwork,CAN)协议控制器,完全支持CANV2.0B技术规范。该器件能发送和接收标准和扩展数据顿以及远程帧。MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。DPC15......
  • win10_Git基于WSL(Linux子系统)统计代码行数命令
    win10_Git基于WSL(Linux子系统)统计代码行数命令一、引言找到的基于git统计代码行数的命令,一般都是基于linux系统的shell命令。在使用mac电脑或者linux系统开发时,执行这些命令比较方便。但是还有大部分人是使用windows做开发,这时就遇到麻烦了,因为基于shell的统计命令不能在windows系......