[全志T113]:ST7701 86屏幕驱动

LCD屏幕调试过程(驱动IC ST7701s) 调试准备工作 1.屏幕开发手册; 2.逻辑分析仪(用来捕获信号,信号是否正确); 3.驱动板,驱动屏幕显示; 屏幕接口 根据手册的说明,可以知道屏幕的一些关键信息,比方说,这里的接口是3位的SPI+18位的RGB接口,这样我们可以配置我的驱动板接口 这里的屏幕是通过SPI进行驱动,需要通过SPI将命令和数据发送给屏幕进行配置(比如使用的接口,RGB前沿、后沿和位数等等); SPI配置代码如下,W_C是发送命令,W_D是发送数据: W_C (0xFF); W_D (0x77.. 阅读详情
AI摘要

博客介绍了全志T113的ST7701 86屏幕驱动添加流程,包括添加驱动源码、配置kconfig和Makefile、修改panels.c和panels.h、修改dts、进行测试等步骤,还提及驱动文件可参考繁花cloud提供的sdk。

[全志T113]:ST7701 86屏幕驱动

添加屏幕驱动流程

1.添加驱动源码

如果要添加lcd驱动,添加位置如下:

/home/ubuntu/Tina-Linux/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2

2.配置kconfig和Makefile

同时配置目录下的Kconfig与Makefile,文件路径分别如下:

/home/ubuntu/Tina-Linux/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd/Kconfig
/home/ubuntu/Tina-Linux/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/Makefile

2.1 kconfig

config LCD_SUPPORT_ST7701_86
        bool "LCD support ST7701_86 panel"
        default y
        ---help---
                If you want to support ST7701_86 panel for display driver, select it.

在这里插入图片描述

2.2 Makefile

disp-$(CONFIG_LCD_SUPPORT_ST7701_86) += lcd/st7701_86.o

在这里插入图片描述

2.3 built-in.a

这个文件需要添加我们刚才编译完的.o文件

lcd/st7701_86.o/

在这里插入图片描述

3.修改panels.c和panels.h

/home/ubuntu/Tina-Linux/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd/panels.c
/home/ubuntu/Tina-Linux/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd/panels.h
#ifdef CONFIG_LCD_SUPPORT_ST7701_86
extern struct __lcd_panel st7701_86_panel;
#endif

在这里插入图片描述
在这里插入图片描述

4.修改dts

&lcd0 {
/* part 1 */
	lcd_used            = <1>;
	lcd_driver_name     = "st7701_86";
	lcd_backlight	    = <255>;

	/* part 2 */
	lcd_if = <0>;
	lcd_hv_if = <0>;
	
	/* part 3 */
	lcd_x               = <480>;
	lcd_y               = <480>;
	lcd_width           = <71>;
	lcd_height          = <71>;
	lcd_dclk_freq       = <16>;

	lcd_hbp             = <20>;
	lcd_ht              = <526>;
	lcd_hspw            = <6>;

	lcd_vbp             = <10>;
	lcd_vt              = <510>;
	lcd_vspw            = <4>;
		
	lcd_pwm_used        = <1>;
	lcd_pwm_ch          = <7>;
	lcd_pwm_freq        = <5000>;
	lcd_pwm_pol         = <0>;

	/* part 5 */
	lcd_frm = <1>;
	lcd_io_phase = <0x0000>;
	lcd_gamma_en = <0>;
	lcd_cmap_en = <0>;
	lcd_hv_clk_phase = <0>;
	lcd_hv_sync_polarity= <0>;

	// reset
	lcd_gpio_0 = <&pio PB 4 GPIO_ACTIVE_HIGH>;
	// cs
	lcd_gpio_1 = <&pio PB 7 GPIO_ACTIVE_HIGH>;
	// sda
	lcd_gpio_2 = <&pio PB 5 GPIO_ACTIVE_HIGH>;
	// sck
	lcd_gpio_3 = <&pio PB 6 GPIO_ACTIVE_HIGH>;

	//bl
	lcd_bl_en = <&pio PD 22 GPIO_ACTIVE_HIGH>;

	/* part 6 */
	lcd_power = "vcc-lcd";
	lcd_pin_power = "vcc-pd";
	pinctrl-0 = <&rgb18_pins_a>;
	pinctrl-1 = <&rgb18_pins_b>;
};
&disp {
	disp_init_enable         = <1>;
	disp_mode                = <0>;

	screen0_output_type      = <1>;
	screen0_output_mode      = <4>;

	screen1_output_type      = <3>;
	screen1_output_mode      = <10>;

	screen1_output_format    = <0>;
	screen1_output_bits      = <0>;
	screen1_output_eotf      = <4>;
	screen1_output_cs        = <257>;
	screen1_output_dvi_hdmi  = <2>;
	screen1_output_range     = <2>;
	screen1_output_scan      = <0>;
	screen1_output_aspect_ratio = <8>;

	dev0_output_type         = <1>;
	dev0_output_mode         = <4>;
	dev0_screen_id           = <0>;
	dev0_do_hpd              = <0>;

	dev1_output_type         = <4>;
	dev1_output_mode         = <10>;
	dev1_screen_id           = <1>;
	dev1_do_hpd              = <1>;

	def_output_dev           = <0>;
	hdmi_mode_check          = <1>;

	fb0_format               = <0>;
	fb0_width                = <0>;
	fb0_height               = <0>;

	fb1_format               = <0>;
	fb1_width                = <0>;
	fb1_height               = <0>;
	chn_cfg_mode             = <1>;

	disp_para_zone           = <1>;
	/*VCC-LCD*/
/*	dc1sw-supply = <&reg_pio3_3>;*/
	/*VCC-DSI*/
/*	eldo3-supply = <&reg_eldo3>;*/
	/*VCC-PD*/
/*	dcdc1-supply = <&reg_pio3_3>;*/
};

5.测试

root@TinaLinux:/# cat /dev/urandom > /dev/fb0
root@TinaLinux:/# echo 8 > /sys/class/disp/disp/attr/colorbar

在这里插入图片描述

6.驱动文件

驱动文件参考繁花cloud提供的sdk

st7701_86.c

/*
 * drivers/video/fbdev/sunxi/disp2/disp/lcd/st7701_86/st7701_86.c
 *
 * Copyright (c) 2007-2018 Allwinnertech Co., Ltd.
 * Author: zhengxiaobin <zhengxiaobin@allwinnertech.com>
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
[lcd0]
lcd_used            = 1
lcd_driver_name     = "st7701_86"
lcd_x               = 480
lcd_y               = 480
lcd_width           = 71
lcd_height          = 71
lcd_dclk_freq       = 30
lcd_pwm_used        = 1
lcd_pwm_ch          = 8
lcd_pwm_freq        = 50000
lcd_pwm_pol         = 0
lcd_pwm_max_limit   = 255
lcd_hbp             = 120
;10 + 20 + 10 + 240*3 = 760  real set 1000
lcd_ht              = 850
lcd_hspw            = 2
lcd_vbp             = 13
lcd_vt              = 373
lcd_vspw            = 2
lcd_frm             = 1
lcd_if              = 0
lcd_hv_if			= 8
lcd_hv_clk_phase    = 0
lcd_hv_sync_polarity   = 0
lcd_hv_srgb_seq		= 0
lcd_io_phase        = 0x0000
lcd_gamma_en        = 0
lcd_bright_curve_en = 1
lcd_cmap_en         = 0
lcd_rb_swap	= 0
deu_mode            = 0
lcdgamma4iep        = 22
smart_color         = 90
;lcd_bl_en           = port:PB03<1><0><default><1>
lcd_power           = "vcc-lcd"
lcd_pin_power           = "vcc-pd"
;reset
lcd_gpio_0          = port:PD09<1><0><default><1>
;cs
lcd_gpio_1          = port:PD10<1><0><default><0>
;sda
lcd_gpio_2          = port:PD13<1><0><default><0>
;sck
lcd_gpio_3          = port:PD12<1><0><default><0>
lcdd5                = port:PD03<2><0><2><default>
lcdd6                = port:PD04<2><0><2><default>
lcdd7                = port:PD05<2><0><2><default>
lcdd10               = port:PD06<2><0><2><default>
lcdd11               = port:PD07<2><0><2><default>
lcdd12               = port:PD08<2><0><2><default>
lcdclk              = port:PD18<2><0><3><default>
lcdde               = port:PD19<2><0><3><default>
lcdhsync            = port:PD20<2><0><3><default>
lcdvsync            = port:PD21<2><0><3><default>
[lcd0_suspend]
lcdd5                = port:PD03<7><0><2><default>
lcdd6                = port:PD04<7><0><2><default>
lcdd7                = port:PD05<7><0><2><default>
lcdd10               = port:PD06<7><0><2><default>
lcdd11               = port:PD07<7><0><2><default>
lcdd12               = port:PD08<7><0><2><default>
lcdclk              = port:PD18<7><0><3><default>
lcdde               = port:PD19<7><0><3><default>
lcdhsync            = port:PD20<7><0><3><default>
lcdvsync            = port:PD21<7><0><3><default>
 */
#include "st7701_86.h"

#define spi_scl_1 sunxi_lcd_gpio_set_value(0, 3, 1)
#define spi_scl_0 sunxi_lcd_gpio_set_value(0, 3, 0)
#define spi_sdi_1 sunxi_lcd_gpio_set_value(0, 2, 1)
#define spi_sdi_0 sunxi_lcd_gpio_set_value(0, 2, 0)
#define spi_cs_1 sunxi_lcd_gpio_set_value(0, 1, 1)
#define spi_cs_0 sunxi_lcd_gpio_set_value(0, 1, 0)

static void lcd_panel_st7701_86_init(void);
static void LCD_power_on(u32 sel);
static void LCD_power_off(u32 sel);
static void LCD_bl_open(u32 sel);
static void LCD_bl_close(u32 sel);

static void LCD_panel_init(u32 sel);
static void LCD_panel_exit(u32 sel);

static void LCD_cfg_panel_info(struct panel_extend_para *info)
{
   
   
	u32 i = 0, j = 0;
	u32 items;
	u8 lcd_gamma_tbl[][2] = {
   
   
	    /* {input value, corrected value} */
	    {
   
   0, 0},     {
   
   15, 15},   {
   
   30, 30},   {
   
   45, 45},   {
   
   60, 60},
	    {
   
   75, 75},   {
   
   90, 90},   {
   
   105, 105}, {
   
   120, 120}, {
   
   135, 135},
	    {
   
   150, 150}, {
   
   165, 165}, {
   
   180, 180}, {
   
   195, 195}, {
   
   210, 210},
	    {
   
   225, 225}, {
   
   240, 240}, {
   
   255, 255},
	};

	u32 lcd_cmap_tbl[2][3][4] = {
   
   
	    {
   
   
		{
   
   LCD_CMAP_G0, LCD_CMAP_B1, LCD_CMAP_G2, LCD_CMAP_B3},
		{
   
   LCD_CMAP_B0, LCD_CMAP_R1, LCD_CMAP_B2, LCD_CMAP_R3},
		{
   
   LCD_CMAP_R0, LCD_CMAP_G1, LCD_CMAP_R2, LCD_CMAP_G3},
	    },
	    {
   
   
		{
   
   
全志T113-S3驱动ST7701 MIPI长条屏调试实战 MIPI DSI是嵌入式显示系统中常用的高速串行接口,负责主控与LCD面板之间的图像数据传输。正确配置设备树中的时序参数、初始化序列及链路时钟,是屏幕正常点亮的基石。本文从显示通路的基本原理出发,解析全志T113-S3平台下ST7701驱动IC的适配过程,涵盖U-Boot与内核阶段的初始化流程、常见白屏花屏问题的定位思路,并附带解决交叉编译Qt应用时qmake路径异常的实用技巧。这些经验适用于智能家居面板、工控HMI等需要快速点亮MIPI屏的场景,帮助嵌入式开发者系统化梳理LCD调试链路,提升排障效率。 阅读详情

相关推荐

立创开源:基于全志T113-S3双核A7的智能家居86屏硬件设计与Tina Linux量产指南

本文详细介绍了基于全志T113-S3双核A7处理器的智能家居86屏硬件设计与量产指南。项目开源了从核心板设计、物料选型到Tina Linux SDK环境搭建、固件编译与烧录的全流程,重点解析了低成本实现触控显示、Wi-Fi连接及系统启动的关键技术,为开发者提供了完整的嵌入式智能设备解决方案。

weixin_29940495的博客 307

基于ST7701S/ST7701的嵌入式JPEG图像播放器项目实战

是最佳实践方案。

weixin_35835030的博客 1775

ST7701s, 双通道MIPI接口 初始化代码

ST7701S MIPI 2通道 初始化代码 屏幕分辨率为480x480, 双通道MIPI 废话不多说,直接上代码 ////////// LCD init code /////////////////// //PAGE1 DataType(0x29) WriteAddr(0xFF); WriteData(0x77); WriteData(0x01); WriteData(0x00); WriteData(0x00); WriteData(0x10); DataType(0x29) Writ

my的博客 9252

ST7701规格书 ST7701_SPEC_V1.1

ST7701规格书 ST7701_SPEC_V1.1,ST7701S是一款16.7M色系统级芯片(SOC)驱动器LSI,专为中小尺寸TFT LCD显示器而设计。

ST7701 的 datasheet 和 初始化代码

ST7701 的 datasheet 和 初始化代码。压缩包内包含一份ST7701的手册(datasheet)和一份初始化代码文件 。

ST7701S_480*480_mipi屏 完整代码

* Resolution : 480x480 * Color format : RGB565 * LCD interface : 24-bits /* Porch : HT = 610, HBP = 60, VT=534, HFP=60, HST=10, vbp=25, VST=4, vfp=25 */ /* Line Time : 32us */ /* Frame Rate : 60hz Data Lane :D0, D1

ST7701S_SPEC_ V1.1.pdf

ST77701S 转换芯片规格书

ESP ST7701驱动代码

ESP ST7701驱动代码

ST7701驱动_ST7701S_ST7701_st7701s驱动

嵌入式显示屏st7701s驱动,适合各大Linux系统平台,移植简单

ST7701驱动,st7701s驱动程序,C/C++

嵌入式显示屏st7701s驱动,适合各大Linux系统平台,移植简单

抖音小游戏(IAA)巨量引擎投放指南

摘要:本文详细介绍了在巨量引擎平台投放小游戏广告的完整流程,包括五个关键步骤:1)添加小游戏资产,填写ID等信息并等待审核;2)添加事件管理,配置激活和关键行为事件;3)通过橙子建站创建落地页,设置跳转链接;4)新建广告项目,选择小程序推广目标;5)完成广告创建。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 4504

Keil调试技巧:3种方法查看Cortex-M4的SCB寄存器(含CPUID内存映射解析)

本文详细介绍了在Keil MDK中查看Cortex-M4内核SCB寄存器的三种实战方法:使用Watch窗口进行符号化观察、通过Memory窗口直接查看物理内存映射,以及利用SFR寄存器浏览器解析位域信息。文章重点解析了CPUID寄存器的内存映射地址(0xE000ED00)及其位域含义,帮助开发者深入理解处理器身份识别与底层调试技巧,提升嵌入式系统调试效率。

h6i7j8的博客 571

嵌入式Linux网络调试踩坑记:YT8531/YT8521 PHY驱动移植与设备树配置实战

本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的实战经验。从网络不通的常见现象入手,详细介绍了驱动移植关键点、设备树配置详解及常见问题排查技巧,帮助开发者快速解决RGMII接口调试难题,提升嵌入式网络开发效率。

weixin_42525328的博客 446

AMBA-CHI协议详解(一)

CHI体系结构是一种可扩展、一致性的集线器接口和片上互联,可由多个组件使用。CHI体系结构允许根据性能、功耗和面积系统要求灵活地进行组件连接拓扑。硬件一致性使系统组件能够共享内存,而无需维护软件缓存以保持一致性。如果两个组件对同一存储器位置的写入可被所有组件以相同的顺序观察到,则存储器区域是一致的。

Crazzy_M的博客 1万+

基于STM32、HAL库、I2C接口的姿态传感器/陀螺仪之ICM-42670-P驱动 C语言程序设计

/ 设置加速度计和陀螺仪的工作模式。// 读取加速度计和陀螺仪数据。

corlin6688的博客 1181

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 470

使用 Python 爬虫获取中国证券市场公司公告数据

本文详细介绍了如何使用 Python 爬虫技术从中国证券市场(如巨潮资讯网)爬取公司公告数据。通过分析网页结构,编写爬虫脚本,抓取并存储公告信息,我们实现了从网页抓取数据的全过程。此外,本文还展示了如何应对反爬虫机制,并介绍了数据分析与可视化的基本方法。未来,我们可以通过机器学习等技术进一步挖掘公告中的潜在信息,例如,通过情感分析对公告内容进行情绪分类,或者预测某些公告类型对股市走势的影响等。希望本文能帮助你理解如何使用 Python 爬虫技术获取和处理证券市场的数据,并为你的数据分析项目提供帮助。

2201_76125261的博客 1888

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

【代码】DeepSeek R1-32B医疗大模型的完整微调实战指南(全码版)

AllenLV的博客 5103

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: [ESP32]:TFLite Micro推理CIFAR10模型
下一篇: [T113]:新建板级支持包
YAN_KEEE
博客等级 码龄9年 287粉丝 41原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值