玩转STM32MP157- 使用fbtft驱动 lcd st7735r
什么是fbtft
fbtft 在 github 中的介绍是“ Linux Framebuffer drivers for small TFT LCD display modules,翻译过来就是支持小型 TFT LCD 显示器的 Linux FrameBuffer 驱动。也就是专门为小型 TFT LCD 所写的 Framebuffer 驱动。
github 地址为:notro/fbtft
wiki 地址为:notro/wiki
从 fbtft 的 github 上看,fbtft 不再更新到 github 了,迁移到了 Linux kernel staging tree。在https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git/tree/drivers/staging/fbtft?h=staging-testing中看到 fbtft 所支持的设备有:
fbtft 在 STM32MP15X 中
在STM32MP15X 的4.19内核源码中,fbtft 源码在内核根目录的:drivers\staging\fbtft。
如何使用
我手上有 st7735r 跟 Ili9341 的屏,看了下 fbtft 里面的源码正好有 st7735r 跟 Ili9341 驱动,先试下 st7735r 的屏,
在文件 drivers\staging\fbtft\fb_st7735r.c 中:
static struct fbtft_display display = {
.regwidth = 8,
.width = 128,
.height = 160,
.init_sequence = default_init_sequence,
.gamma_num = 2,
.gamma_len = 16,
.gamma = DEFAULT_GAMMA,
.fbtftops = {
.set_addr_win = set_addr_win,
.set_var = set_var,
.set_gamma = set_gamma,
},
};
FBTFT_REGISTER_DRIVER(DRVNAME, "sitronix,st7735r", &display);
FBTFT_REGISTER_DRIVER展开后如下:
#define FBTFT_REGISTER_DRIVER(_name, _compatible, _display) \
\
static int fbtft_driver_probe_spi(struct spi_device *spi) \
{ \
return fbtft_probe_common(_display, spi, NULL); \
} \
\
static int fbtft_driver_remove_spi(struct spi_device *spi) \
{ \
struct fb_info *info = spi_get_drvdata(spi); \
\
return fbtft_remove_common(&spi->dev, info); \
} \
\
static int fbtft_driver_probe_pdev(struct platform_device *pdev) \
{ \
return fbtft_probe_common(_display, NULL, pdev); \
} \
\
static int fbtft_driver_remove_pdev(struct platform_device *pdev) \
{ \
struct fb_info *info = platform_get_drvdata(pdev); \
\
return fbtft_remove_common(&pdev->dev, info); \
} \
\
static const struct of_device_id dt_ids[] = { \
{ .compatible = _compatible }, \
{}, \
}; \
\
MODULE_DEVICE_TABLE(of, dt_ids); \
有这么条语句:
MODULE_DEVICE_TABLE(of, dt_ids);
从这看出要使用该设备,需要修改设备树。
修改源码
首先在make menuconfig中把fbtft加上:
1、修改设备树
由于我的屏是接在 STM32MP157c 的 SPI5,所以在设备树中 spi5 下面添加屏的设备数,CS 脚接到 STM32MP157C 的 GPIOF 6,DC 脚接到 GPIOF 3 脚,RESET 脚接到 GPIOD 13,设备数修改为如下:
&spi5 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&spi5_pins_a>;
pinctrl-1 = <&spi5_sleep_pins_a>;
cs-gpios = <&gpiof 6 GPIO_ACTIVE_HIGH>;
status = "okay";
st7735r@0{
compatible = "jianda,jd-t18003-t01", "sitronix,st7735r";
reg = <0>;
spi-max-frequency = <32000000>;
dc-gpios = <&gpiof 3 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;
rotation = <270>;
backlight = &backlight;
};
};
编译并把设备树跟内核更新到板子上,启动,看屏没什么反应,/dev下也没有fb设备,查看spi相关信息:
root@stm32mp1:~# dmesg | grep "spi"
[ 1.543185] spi_stm32 44009000.spi: 8 x 8-bit fifo size
[ 1.543206] spi_stm32 44009000.spi: 16-bit maximum data frame
[ 1.543670] spi_stm32 44009000.spi: registered master spi0
[ 1.543900] spi spi0.0: stm32_spi_setup: set gpio86 output high
[ 1.543943] spi spi0.0: setup mode 0, 8 bits/w, 32000000 Hz max --> 0
[ 1.544232] spi_stm32 44009000.spi: registered child spi0.0
[ 1.544245] spi_stm32 44009000.spi: driver initialized
[ 2.097755] fb_st7735r spi0.0: buswidth is not set
[ 2.102334] fb_st7735r: probe of spi0.0 failed with error -22
有错误,上网查了下资料,觉得可能是没有添加 buswidth,在设备树中把 buswitch 加上:
&spi5 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&spi5_pins_a>;
pinctrl-1 = <&spi5_sleep_pins_a>;
cs-gpios = <&gpiof 6 GPIO_ACTIVE_HIGH>;
status = "okay";
st7735r@0{
compatible = "jianda,jd-t18003-t01", "sitronix,st7735r";
reg = <0>;
buswidth = <8>;
spi-max-frequency = <32000000>;
dc-gpios = <&gpiof 3 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpiod 13 GPIO_ACTIVE_HIGH>;
rotation = <270>;
backlight = &backlight;
};
};
重新更新板子上的设备树,上电,可以看到屏幕有白色变黑色,应该是可以了,看下 /dev 目录,下图中上部分是修改前的,下部分是修改后的,可以看到修改后的在/dev下可以看到多了个fb设备:
测试
在屏上显示随机数:
cat /dev/urandom > /dev/fb0
玩转STM32MP157- 使用fbtft驱动 lcd st7735r的更多相关文章
- 玩转STM32MP157- 使用fbtft驱动 lcd ili9341
之前使用了 fbtft 成功驱动了lcd st7735r,现在尝试下驱动 ili9341, 配置 跟之前用 fbtft 驱动 st7735r 一样,先用 make menuconfig 配置内核,添加 ...
- 用普通IO驱动LCD的控制方法-松瀚汇编源程序
/*************************************** 本例程为IO直接驱动LCD的方法 以下是松瀚MCU汇编源程序 **************************** ...
- 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...
- STM32驱动LCD原理
TFTLCD即薄膜晶体管液晶显示器.它与无源TN-LCD.STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性 ...
- STM32驱动LCD实战
前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文章,本文将对STM32驱动LCD进行实战应用.LCD是深圳市拓普微科技开发有限公司的LMT028 ...
- 基于V7的emWin多屏显示方案模板,同时驱动LCD和OLED例程
说明: 1.多屏驱动跟多图层驱动是类似的,可以使用函数GUI_SelectLayer做切换选择. 2.为了避免OLED闪烁问题,创建一个128*64bit的显存空间,然后使用emWin的GUI_TIM ...
- FPGA驱动LCD显示红绿蓝彩条
实验目的:先简单熟悉LCD灯的驱动和时序图的代码实现.设计功能是让LCD显示红绿蓝三种颜色,即三个彩带.本次实验比较容易实现,主要是对LCD驱动时序图的理解和时序参数的配置. 实验条件:1.LCD原理 ...
- 创龙DSP6748开发板驱动LCD屏
1. DSP6748内部有2个LCD控制器,Raster Controller 光栅控制器和the LCD Interface Display Driver (LIDD) controller 控制器 ...
- MSP430常见问题之LCD 显示驱动类
Q1:晶体一般都是接32768,然后使用液晶很正常.我打算将晶体接6M的替换32768,那么液晶还能正常显示吗A1:看你所用的LCM 模块时序极限是多少HZ,然后看6M情况下,MSP430去驱动LCM ...
随机推荐
- git取消更改 恢复版本命令
#删除远程的xxx分支 git push origin :xxx #取消对文件的修改.还原到最近的版本,废弃本地做的修改. git checkout -- <file> #取消已经 ...
- .Net Core导入千万级数据至Mysql
最近在工作中,涉及到一个数据迁移功能,从一个txt文本文件导入到MySQL功能. 数据迁移,在互联网企业可以说经常碰到,而且涉及到千万级.亿级的数据量是很常见的.大数据量迁移,这里面就涉及到一个问题 ...
- Docker网络,手把手教你如何实现容器网络相关知识
Docker网络 理解Docker0 清空所有环境 测试 三个网络 #问题:docker 是如何处理容器网络访问的? [root@hsStudy /]# docker run -d -P --name ...
- 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]
博客园 首页 新随笔 联系 订阅 管理 随笔 - 322 文章 - 0 评论 - 19 Linux命令-自动挂载文件/etc/fstab功能详解[转] 一./etc/fstab文件的作用 ...
- zabbix官方源替换为阿里云的zabbix源,一键脚本。(安装zabbix报错curl#18 - "transfer closed with 2988713 bytes remaining to read":15 ETA Trying other mirro)
最近突然安装zabbix总是报错,比如 (24/27): t1lib-5.1.2-14.el7.x86_64.rpm | 166 kB 00:00:00 zabbix-web-4.4.6-1.el7. ...
- gpcj-07.为什么是连锁零售类公司
1.量化分析的真面目 本课的目的: ·理解零售类公司价值分析的逻辑·学会量化分析公司的思路和原理前言的前沿 和大部分投资者不同,我们的投资核心之一,就是从下而上的分析.宏观经济对我们公司分析影响极少. ...
- ms5611-01ba03 气压传感器 中英文 数据手册
中文: https://wenku.baidu.com/view/6f8a861fff00bed5b9f31d53.html 英文: https://wenku.baidu.com/view/fe93 ...
- 『动善时』JMeter基础 — 26、使用txt文件实现JMeter参数化
目录 1.测试计划中的元件 2.数据文件内容 3.线程组元件内容 4.HTTP信息头管理器组件内容 5.CSV数据文件设置组件内容 6.HTTP请求组件内容 7.脚本运行结果 之前我们都是使用.csv ...
- Kubernetes集群搭建 ver1.20.5
目录 部署方式 1. 基础环境准备 1.1 基础初始化 1.2 安装docker 2. 部署harbor及haproxy高可用反向代理 2.1 镜像加速配置 2.2 高可用master可配置 3. 初 ...
- 一探即将到来的 C# 10
前言 本来因为懒不想写这篇文章,但是不少人表示有兴趣,于是最后决定还是写一下. .NET 6 最近几个预览版一直都在开发体验(如 hot reload.linker 等).平台支持(如 Android ...