百问网全志D1h开发板MIPI屏适配

MIPI屏适配

100ASK-D1-H_DualDisplay-DevKit V11

1. 显示适配

1.1 修改设备树

1.1.1 修改内核设备树

进入目录:

cd /home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4

修改board.dts:

&lcd0 {lcd_used            = <1>;lcd_driver_name     = "tft08006";lcd_backlight       = <100>;lcd_if              = <4>;lcd_x               = <480>;lcd_y               = <800>;lcd_width           = <52>;lcd_height          = <52>;lcd_dclk_freq       = <25>;lcd_pwm_used        = <1>;lcd_pwm_ch          = <0>;lcd_pwm_freq        = <1000>;lcd_pwm_pol         = <0>;lcd_pwm_max_limit   = <255>;lcd_hbp             = <10>;lcd_ht              = <515>;lcd_hspw            = <5>;lcd_vbp             = <20>;lcd_vt              = <830>;lcd_vspw            = <5>;lcd_dsi_if          = <0>;lcd_dsi_lane        = <2>;lcd_lvds_if         = <0>;lcd_lvds_colordepth = <0>;lcd_lvds_mode       = <0>;lcd_frm             = <0>;lcd_hv_clk_phase    = <0>;lcd_hv_sync_polarity= <0>;lcd_gamma_en        = <0>;lcd_bright_curve_en = <0>;lcd_cmap_en         = <0>;lcd_fsync_en        = <0>;lcd_fsync_act_time  = <1000>;lcd_fsync_dis_time  = <1000>;lcd_fsync_pol       = <0>;deu_mode            = <0>;lcdgamma4iep        = <22>;smart_color         = <90>;lcd_gpio_0 =  <&pio PG 13 GPIO_ACTIVE_HIGH>;pinctrl-0 = <&dsi4lane_pins_a>;pinctrl-1 = <&dsi4lane_pins_b>;
};

根据原理图:

image-1

可以查看到,mipi屏的pwm通道引脚是PB5,设备树中搜索PB5,发现有I2C设备树节点占用,需要把status位设置为disabled

lcd0设备树节点中的pwm通道是pwm0,即把pwm0设备树节点的引脚改为相应的PB5引脚:

image-3

1.1.2 修改uboot设备树

进入目录:

/home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha

修改uboot-board.dts:

&lcd0 {lcd_used            = <1>;lcd_driver_name     = "tft08006";lcd_backlight       = <100>;lcd_if              = <4>;lcd_x               = <480>;lcd_y               = <800>;lcd_width           = <52>;lcd_height          = <52>;lcd_dclk_freq       = <25>;lcd_pwm_used        = <1>;lcd_pwm_ch          = <0>;lcd_pwm_freq        = <1000>;lcd_pwm_pol         = <0>;lcd_pwm_max_limit   = <255>;lcd_hbp             = <10>;lcd_ht              = <515>;lcd_hspw            = <5>;lcd_vbp             = <20>;lcd_vt              = <830>;lcd_vspw            = <5>;lcd_dsi_if          = <0>;lcd_dsi_lane        = <2>;lcd_lvds_if         = <0>;lcd_lvds_colordepth = <0>;lcd_lvds_mode       = <0>;lcd_frm             = <0>;lcd_hv_clk_phase    = <0>;lcd_hv_sync_polarity= <0>;lcd_io_phase        = <0x0000>;lcd_dsi_te	        = <0>;lcd_gamma_en        = <0>;lcd_bright_curve_en = <0>;lcd_cmap_en         = <0>;lcd_fsync_en        = <0>;lcd_fsync_act_time  = <1000>;lcd_fsync_dis_time  = <1000>;lcd_fsync_pol       = <0>;deu_mode            = <0>;lcdgamma4iep        = <22>;smart_color         = <90>;lcd_gpio_0 =  <&pio PG 13 GPIO_ACTIVE_HIGH>;pinctrl-0 = <&dsi4lane_pins_a>;pinctrl-1 = <&dsi4lane_pins_b>;
};

1.2 内核配置

修改内核驱动:

进入目录:

~/tina-d1-h/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd

在这里100ASK_T113-PRO开发板适配4寸MIPI屏-Tina SDK - Allwinner / T113s3-PRO - 嵌入式开发问答社区可以下载到相应的驱动,替换到TinaSDK里面的tft08006.ctft08006.h

并修改如下:

image-9

执行ckernel,进入内核配置界面:

m kernel_menuconfig

选上屏幕显示驱动TFT08006

image-4

选上支持显示框架驱动:

image-5

"DISP Driver Support"关乎显示驱动框架的整体启用,而"LCD panels select"则专注于在这个框架下选择和配置具体的LCD面板硬件。前者是基础支持层,后者是具体应用层。

1.3 uboot配置

修改uboot下的驱动:

进入目录:

~/tina-d1-h/lichee/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd

在这里100ASK_T113-PRO开发板适配4寸MIPI屏-Tina SDK - Allwinner / T113s3-PRO - 嵌入式开发问答社区可以下载到相应的驱动,替换到TinaSDK里面的tft08006.ctft08006.h

并修改如下:
image-10

执行cboot,进入uboot配置界面:

make menuconfig

选上屏幕显示驱动:

image-6

选上支持显示框架驱动:

image-7

mipi屏幕显示需要先在uboot阶段初始化。

1.4 显示测试

为了方便测试屏幕显示,可以选上TinaSDK自带的lvgl例程。

执行croot,进入配置界面:

make menuconfig

选上lvgl例程:

image-8

编译make,打包pack

烧录到板子后,执行lv_examples 1:

image-11

2. 触摸适配

2.1 修改内核设备树

根据原理图:

image-12

可以查看:

TP_INT→PB6;TP_RESET→PB4;DSI_SCL→PB0;DSI_SDA→PB1;

进入:

vi /home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4/board.dts

image-13

看到PB0、PB1引脚对应的是twi2设备树节点。所以需要在twi2设备树节点中添加触摸屏设备树节点。

&twi2 {clock-frequency = <400000>;pinctrl-0 = <&twi2_pins_a>;pinctrl-1 = <&twi2_pins_b>;pinctrl-names = "default", "sleep";dmas = <&dma 45>, <&dma 45>;dma-names = "tx", "rx";status = "okay";ctp@38 {compatible = "focaltech,fts";reg = <0x38>;status = "okay";interrupt-parent = <&pio>;interrupts = <PB 6 IRQ_TYPE_LEVEL_LOW>;focaltech,reset-gpio = <&pio PB 4 GPIO_ACTIVE_HIGH>;focaltech,irq-gpio = <&pio PB 6 IRQ_TYPE_LEVEL_LOW>;focaltech,max-touch-number = <5>;focaltech,display-coords = <0 0 480 800>;focaltech,reg_vdd = <0x0000001f>;focaltech,reg_avdd = <0x0000001f>;};
};

如果原来有同样地址为0x38的I2C设备和触摸设备的节点时,可以注释或者删除。

2.2 添加触摸驱动

Tina_SDK自带相应的触摸驱动,只需修改内核配置,把驱动编译进系统。

执行ckernel进入内核目录。

执行m kernel_menuconfig,进入内核配置界面,选上Focaltech Touchscreen<span> </span>

image-14

执行croot,进入SDK根目录,执行make menuconfig进入配置界面,把触摸驱动模块添加进文件系统中:

image-15

2.3 修改触摸驱动

在测试过程中,发现触摸点(x,y)不对,需要修改驱动程序。

进入目录:

tina-d1-h/lichee/linux-5.4/drivers/input/touchscreen/focaltech_touch

修改:

vim focaltech_core.c

两处修改:

  • fts_input_dev_report_a函数中修改,找到相应的位置:
#原来的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->au16_x[i]);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->au16_y[i]);#修改的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, -(event->au16_x[i] - 480));
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, -(event->au16_y[i] - 800));
  • fts_input_dev_report_b函数中修改,找到相应的位置:
#原来的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->au16_x[i]);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->au16_y[i]);#修改的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, -(event->au16_x[i] - 480));
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, -(event->au16_y[i] - 800));

2.4 修改lvgl驱动配置文件

如果在lvgl的例程上测试触摸功能,需要进入目录:

cd /home/ubuntu/tina-d1-h/package/gui/littlevgl-8/lv_examples/src

修改:

vim lv_drv_conf.h

image-16

如果之前配置过lvgl例程,需要进入目录:

cd /home/ubuntu/tina-d1-h/out/d1-h-nezha/compile_dir/target

删除lv_examples,再进行编译打包烧录。

开发板上执行lv_examples 0,测试:
image-17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 项目中 history 路由模式的使用

在最近帮客户开发的一个项目中&#xff0c;由于项目的特殊性&#xff0c;需要用到 Vue 中的 history路由模式。该模式使用时会涉及到“上传白屏”和“刷新 404 问题”。在帮助客户解决这两个问题的过程中&#xff0c;总结问题的解决方案并记录下来&#xff0c;希望能够保留这篇…

眼外伤险失明辗转成都爱尔眼科就医保视力,患者复查送锦旗!

近日患者王先生到成都爱尔眼科医院进行硅油取出后的二次复查&#xff08;硅油为眼底病手术中一种“填充物”&#xff09;&#xff0c;他激动地为蔡裕主任献上锦旗&#xff0c;感谢医生的救治避免了失明。 意外发生在半年之前&#xff0c;王先生不慎滑倒右眼磕碰到茶几边缘&…

探索AI艺术的无限可能:SD模型与大模型的融合之美

艺术与科技的结合从未像今天这样紧密。AI绘画技术正以惊人的速度改变着我们创作和欣赏艺术的方式。在这场革命中&#xff0c;Stable Diffusion&#xff08;SD&#xff09;模型扮演了至关重要的角色。 &#x1f31f; SD模型&#xff1a;艺术创作的新维度 SD模型以其生成高质量图…

1.9-改进的CBOW模型的实现

文章目录 0引言1 CBOW模型的重构1.1模型初始化1.2模型的前向计算1.3模型的反向传播 2总结 0引言 前面讲述了对word2vec高速化的改进&#xff1a; 改进输入侧的计算&#xff0c;变成Embedding&#xff0c;即从权重矩阵中选取特定的行&#xff1b;改进输出侧的计算&#xff0c;包…

【C语言】【排序算法】----- 归并排序

由于最近要考试&#xff0c;好久没有发博客了&#xff0c;非常抱歉大家对我的支持。之后我会不断更新博客&#xff0c;继续创作出高质量的文章&#xff0c;希望能帮到大家&#xff01; 文章目录 一、归并排序基本思想二、递归实现三、非递归实现四、效率分析 一、归并排序基本…

KDP数据分析实战:从0到1完成数据实时采集处理到可视化

智领云自主研发的开源轻量级Kubernetes数据平台&#xff0c;即Kubernetes Data Platform (简称KDP)&#xff0c;能够为用户提供在Kubernetes上的一站式云原生数据集成与开发平台。在最新的v1.1.0版本中&#xff0c;用户可借助 KDP 平台上开箱即用的 Airflow、AirByte、Flink、K…

关于原型和原型链的学习和实践

在前端面试中&#xff0c;原型和原型链始终是一个避不开的问题&#xff0c;今天就弄明白! 原型和原型链 对象的创建方式工厂模式构造函数模式原型模式 原型和原型链实践 对象的创建方式 原型和原型链都是关于对象的内容&#xff0c;先来看一下JavaScript中对象的构建方式。 工…

代码随想录(day3)有序数组的平方

暴力求解法&#xff1a; 注意&#xff1a;需要确定范围&#xff0c;比如nums.sort()是在for循环之外&#xff0c;根据函数的功能来确定 return返回的是nums&#xff0c;而不是nums[i]因为返回的是整个数组 class Solution(object):def sortedSquares(self, nums):for i in r…

人话学Python-基础篇-数字计算

一&#xff1a;数字类型 对于最常见的数据类型,数字在Python中分为三类&#xff1a; 整型(int) 表示的是整数类型的所有数字&#xff0c;包括正整数&#xff0c;负整数和0。和C语言不同的是&#xff0c;Python中的int型没有范围的限制&#xff0c;理论上可以从无限小的整数取到…

react基础语法,模板语法,ui渲染,jsx,useState状态管理

创建一个react应用 这里使用create-react-app的脚手架构建项目&#xff08;结构简洁&#xff0c;基于webpack-cli&#xff09;&#xff0c; npx create-react-app [项目名称] 使用其他脚手架构建项目可以参考&#xff1a;react框架&#xff0c;使用vite和nextjs构建react项目…

数学建模国赛入门指南

文章目录 认识数学建模及国赛认识数学建模什么是数学建模&#xff1f;数学建模比赛 国赛参赛规则、评奖原则如何评省、国奖评奖规则如何才能获奖 国赛赛题分类及选题技巧国赛赛题特点赛题分类 国赛历年题型及优秀论文数学建模分工技巧数模必备软件数模资料文献数据收集资料收集…

白蛇插画:成都亚恒丰创教育科技有限公司

白蛇插画&#xff1a;古韵今风&#xff0c;情深意长 在浩瀚的艺术长河中&#xff0c;插画作为一种独特的艺术形式&#xff0c;以其生动形象的画面、丰富多彩的色彩和深邃悠远的意境&#xff0c;成都亚恒丰创教育科技有限公司深受人们喜爱。而“白蛇插画”&#xff0c;作为融合…

bug - while parsing file included at

bug 如下 找到这个对应文件tb_top.sv的对应行&#xff0c;发现是一个 include "inc_tb_tests_xxx.sv" 问题点&#xff1a;头文件&#xff0c;重复定义&#xff0c;那么 解决方法- 在被include的文件首尾加入 ifndef MY_TRANSACTION__SV define MY_TRANSACTION__SV …

GenAI 技术堆栈架构师指南 - 十种工具

这篇文章于 2024 年 6 月 3 日首次出现在 The New Stack 上。 我之前写过关于现代数据湖参考架构的文章&#xff0c;解决了每个企业面临的挑战——更多的数据、老化的Hadoop工具&#xff08;特别是HDFS&#xff09;以及对RESTful API&#xff08;S3&#xff09;和性能的更大需求…

前端--第一个前端程序

第一个前端程序 第一步&#xff1a; 使用记事本&#xff0c;编写代码 在你的一个磁盘里面创建一个文件夹&#xff0c;名为前端&#xff0c;然后在里面新建一个记事本&#xff0c;在里面写如下代码&#xff0c;注意一定要使用英文&#xff0c;然后把后缀名称改为.html。 第二…

你明白C++中的多态吗?(暑假提升-多态专题)

内不欺己&#xff0c;外不欺人。———孔子 有趣的多态 1、前言2、概念3、多态定义与产生条件4、多态的重要组成成员-(虚函数)5、虚函数的重写(覆盖)6、辅助关键字override与final(了解即可)7、重载&#xff0c;重定义(隐藏)&#xff0c;重写(覆盖)8、抽象类9、多态的原理9、1、…

PHP老照片修复文字识别图像去雾一键抠图微信小程序源码

&#x1f50d;解锁复古魅力&#xff0c;微信小程序黑科技大揭秘&#xff01;老照片修复&更多神奇功能等你来试&#xff01; &#x1f4f8; 【老照片修复&#xff0c;时光倒流的美颜术】 你是否珍藏着一堆泛黄的老照片&#xff0c;却因岁月侵蚀而模糊不清&#xff1f;现在…

实验02 黑盒测试(组合测试、场景法)

1. 组合测试用例设计技术 指出等价类划分法和边界值分析法通常假设输入变量相互独立&#xff0c;但实际情况中变量间可能存在关联。全面测试&#xff1a;覆盖所有输入变量的所有可能组合&#xff0c;测试用例数量随输入变量的增加而指数增长。 全面测试需要对所有输入的各个取…

2008年上半年软件设计师【上午题】真题及答案

文章目录 2008年上半年软件设计师上午题--真题2008年上半年软件设计师上午题--答案 2008年上半年软件设计师上午题–真题 2008年上半年软件设计师上午题–答案

按模版批量生成定制合同

提出问题 一个仪器设备采购公司&#xff0c;商品合同采购需要按模版生成的固定的文件&#xff0c;模板是固定的&#xff0c;只是每次需要替换信息&#xff0c;然后打印出来寄给客户。 传统方法 如果手工来做这个事情&#xff0c;准备好数据之后&#xff0c;需要从Excel表格中…