rk3568点亮E-ink

news2025/1/22 19:10:45

rk3568 Android11/12 适配 E-ink

“EINK”是英语ElectronicInk的缩写。翻译成中文为“电子墨水”。电子墨水由数百万个微胶囊(Microcapsules)所构成,微胶囊的大小约等同于人类头发的直径。每个微胶囊里含有电泳粒子──带负电荷的白色以及带正电荷的黑色粒子,悬浮于透明液体中。利用正负相吸的原理,当电场接通时,该区块对应的黑或白粒子会移动至微胶囊的顶端,使用者在该区块上,就能看见白色或黑色。
在这里插入图片描述


提示:E-ink 编译固件时需要匹配对应的源码中 ebook 工程。

文章目录

  • rk3568 Android11/12 适配 E-ink
  • 圈重点 看想学
  • 1. rk3568适配 E-ink屏
    • 1.1 核查原理图,适配 E-ink屏
    • 1.2 E-ink其它分辨率适配
  • 1.3 waveform.img 和 vcom
  • 2 E-ink 开机相关
    • 2.1 开机过程logo相关图片
    • 2.2 E-ink 刷新模式
  • Tips
  • 总结


圈重点 看想学

a) rk3568 适配 E-ink屏
b) 适配 E-ink屏问题


1. rk3568适配 E-ink屏

E-ink与LCD差别非常大,从显示原理到刷新机制,再到色彩范围应用场景;注定它是特殊领域的专用产品。

1.1 核查原理图,适配 E-ink屏

  • E-ink 屏刷新时需要导入特殊的上电时许,要求比较严苛;需要外挂供电IC tps65185
    在这里插入图片描述
    详细查看原理图,梳理该电源芯片所使用GPIO映射关系如下:
    TPS65185 使用 I2C1;
    IRQ 占用 GPIO3_A7 高电平有效;
    wakeup 占用 GPIO3_C3 高电平有效;
    vcomctl 占用 GPIO4_B2 高电平有效;
    powerup 占用 GPIO4_C5 高电平有效;

  • E-ink 在 rk3568 占用的功能模块
    在这里插入图片描述

  • E-ink排线接口
    在这里插入图片描述

  • E-ink 内核设备树适配 (以6英寸的eink屏为例)

/ {
	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		waveform_reserved: waveform@10800000 {
			reg = <0x0 0x10800000 0x0 0x100000>;
		};

		display_reserved: framebuffer@10900000 {
			reg = <0x0 0x10900000 0x0 0x2c00000>;
		};
	};

	ebc_dev: ebc-dev {
		compatible = "rockchip,ebc-dev";
		ebc_tcon = <&ebc>;
		eink_tcon = <&eink>;
		memory-region = <&display_reserved>;
		waveform-region = <&waveform_reserved>;
		status = "okay";
	};
};

&ebc {
	/* clock rate 1000M/n, (n=1~32) */
	assigned-clocks = <&cru CPLL_333M>, <&cru DCLK_EBC>;
	//assigned-clock-rates = <340000000>, <340000000>;
	assigned-clock-rates = <250000000>, <250000000>;
	//assigned-clock-rates = <100000000>, <100000000>;
	status = "okay";
};

&eink {
	status = "okay";
};

&ebc_dev {
	pmic = <&tps65185>;
	status = "okay";
	/* ED060XCD */
	panel,width = <1024>;
	panel,height = <758>;
	panel,vir_width = <1024>;
	panel,vir_height = <758>;
	panel,sdck = <20000000>;
	panel,lsl = <6>;
	panel,lbl = <6>;
	panel,ldl = <256>;
	panel,lel = <38>;
	panel,gdck-sta = <4>;
	panel,lgonl = <262>;
	panel,fsl = <2>;
	panel,fbl = <4>;
	panel,fdl = <758>;
	panel,fel = <5>;
	panel,mirror = <0>;
	panel,panel_16bit = <0>;
	panel,panel_color = <0>;
	panel,width-mm = <90>;
	panel,height-mm = <122>;
};

&i2c1 {
	status = "okay";

	tps65185: tps65185@68 {
		status = "okay";
		compatible = "ti,tps65185";
		reg = <0x68>;
		pinctrl-names = "default";
		pinctrl-0 = <&tps65185_gpio>;
		int-gpios = <&gpio3 RK_PA7 GPIO_ACTIVE_HIGH>;
		wakeup-gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_HIGH>;
		vcomctl-gpios = <&gpio4 RK_PB2 GPIO_ACTIVE_HIGH>;
		powerup-gpios = <&gpio4 RK_PC5 GPIO_ACTIVE_HIGH>;
	};
};

&pinctrl {
	tps_pmic {
		tps65185_gpio: tps65185-gpio {
				rockchip,pins =
						<4 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>,
						<4 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>,
						<3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>,
						<3 RK_PC3 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};
};

1.2 E-ink其它分辨率适配

硬件EBC所用接口相同,根据 DTS 规则只需要覆写分辨率属性即可。

  • 9.7英寸 1200x825分辨 E-ink
&ebc_dev {
	pmic = <&tps65185>;
	status = "okay";

	/* ED097TC2U1 */
	panel,width = <1200>;
	panel,height = <825>;
	panel,vir_width = <1200>;
	panel,vir_height = <825>;
	panel,sdck = <25000000>;
	panel,lsl = <4>;
	panel,lbl = <4>;
	panel,ldl = <300>;
	panel,lel = <36>;
	panel,gdck-sta = <18>;
	panel,lgonl = <265>;
	panel,fsl = <2>;
	panel,fbl = <4>;
	panel,fdl = <825>;
	panel,fel = <24>;
	panel,mirror = <0>;
	panel,panel_16bit = <0>;
	panel,panel_color = <0>;
	panel,width-mm = <203>;
	panel,height-mm = <140>;
  • 10.3英寸 1872x1404分辨 E-ink
&ebc_dev {
	pmic = <&tps65185>;
	status = "okay";

	/* ES103TC1 */
	panel,width = <1872>;
	panel,height = <1404>;
	panel,vir_width = <1872>;
	panel,vir_height = <1404>;
	panel,sdck = <33300000>;
	panel,lsl = <18>;
	panel,lbl = <17>;
	panel,ldl = <234>;
	panel,lel = <7>;
	panel,gdck-sta = <34>;
	panel,lgonl = <192>;
	panel,fsl = <1>;
	panel,fbl = <4>;
	panel,fdl = <1404>;
	panel,fel = <12>;
	panel,mirror = <0>;
	panel,panel_16bit = <1>;
	panel,panel_color = <0>;
	panel,width-mm = <157>;
	panel,height-mm = <210>;
  • 13.3英寸 2208x1650分辨 E-ink
&ebc_dev {
	pmic = <&tps65185>;
	status = "okay";

	/* ES133TC1 */
	panel,width = <2200>;
	panel,height = <1650>;
	panel,vir_width = <2208>;
	panel,vir_height = <1650>;
	panel,sdck = <37500000>;
	panel,lsl = <4>;
	panel,lbl = <8>;
	panel,ldl = <275>;
	panel,lel = <14>;
	panel,gdck-sta = <34>;
	panel,lgonl = <217>;
	panel,fsl = <1>;
	panel,fbl = <4>;
	panel,fdl = <1650>;
	panel,fel = <6>;
	panel,mirror = <0>;
	panel,panel_16bit = <1>;
	panel,panel_color = <0>;
	panel,width-mm = <157>;
	panel,height-mm = <210>;
  • 14英寸 2240x1680分辨 E-ink
&ebc_dev {
	pmic = <&tps65185>;
	status = "okay";

	panel,width = <2232>;
	panel,height = <1680>;
	panel,vir_width = <2240>;
	panel,vir_height = <1680>;
	panel,sdck = <33300000>;
	panel,lsl = <4>;
	panel,lbl = <8>;
	panel,ldl = <279>;
	panel,lel = <14>;
	panel,gdck-sta = <34>;
	panel,lgonl = <217>;
	panel,fsl = <1>;
	panel,fbl = <4>;
	panel,fdl = <1680>;
	panel,fel = <6>;
	panel,mirror = <0>;
	panel,panel_16bit = <1>;
	panel,panel_color = <0>;
	panel,width-mm = <157>;
	panel,height-mm = <210>;
};

ebc clk配置说明: 不同的屏,只需根据屏幕sdclk的值计算出ebc的clk rates填写到ebc节点中即可,16位屏计算公式ebc_dclk = sdclk * 8; 8位屏计算公式ebc_dclk = sdclk * 4; 以ES103TC1为例ebc_dclk= 33300000 * 8 = 266400000; 实际需求是266.4M,受限于其父时钟1000M,实际最多只能分配到250M,如下dts配置:

/* ES103TC1 */
&ebc {
	/* clock rate 1000M/n, (n=1~32) */
	assigned-clocks = <&cru CPLL_333M>, <&cru DCLK_EBC>;
	assigned-clock-rates = <250000000>, <250000000>;
	status = "okay";
};

1.3 waveform.img 和 vcom

刷写固件时需要烧录正确的 waveform.img 镜像,否则屏幕显示乱码或显示乱码。
除此之外,还有另一个参数vcom电压,每个屏幕都有一个对应的参数—vcom电压;这个数值与屏幕中标签相匹配,切忌刷入正确数值。

  • vcom 电压确认
    可查看/sys/devices/platform/ebcdev/pmic_vcom确认是否正确。
# 查看vcom电压值,单位mV
cat /sys/devices/platform/ebcdev/pmic_vcom
1890
# 屏对标程vcom电压 -1.980V,写入方法如下
echo 1890 > /sys/devices/platform/ebcdev/pmic_vcom
  • 波形文件确认
# 查看当前使用波形文件版本
cat /sys/devices/platform/ebc-dev/waveform_version

至此 E-ink屏内核适配基本完成。

2 E-ink 开机相关

2.1 开机过程logo相关图片

logo支持uboot kernel 阶段显示,充电动画和 logo所使用格式要求为bmp,并且要求该格式的图片分辨率与屏的分辨率一致,否则无法显示;系统在执行./mkimage.sh时会自动转换bmp格式的图片为灰度图。如果客户需要替换相关图片,请根据目录提示更新相关资源。在源码中对应文件夹:device/rockchip/rk356x/rk3566_eink/eink_logo

eink_logo/
├── android_logo
│   └── bootanimation.zip #Android 开机动画
├── kernel_logo
│   └── kernel.bmp # kernel logo
├── poweroff_logo
│   ├── poweroff_nopower.png # 低电量关机显示图片
│   └── poweroff.png # 关机显示图片
├── standby_logo
│   ├── standby_charge.png #充电休眠显示图片
│   ├── standby_lowpower.png #低电量休显示眠图片
│   └── standby.png #休眠显示图片
└── uboot_logo
    ├── battery_0.bmp # 电量 ≥0% 且 < 20%
    ├── battery_1.bmp # 电量 ≥2% 且 < 40%
    ├── battery_2.bmp # 电量 ≥40% 且 < 60%
    ├── battery_3.bmp # 电量 ≥60% 且 < 80%
    ├── battery_4.bmp # 电量 ≥80% 且 < 100%
    ├── battery_5.bmp # 电量 100%
    ├── battery_fail.bmp # uboot阶段电量过低,无法开机
    ├── poweroff.bmp # uboot阶段关机显示图片
    └── uboot.bmp # uboot logo图片

以上为Android上层预置的待机、关机等相关图片资源,源码编译完成后会预置到板载系统的/vendor/media/。系统支持动态待机,关机图片,用户可以把相关图片存放到/data/misc/,系统优先加载该路径下的图片资源。如果用户资源图片不存在,则使用系统图片。用户预置资源图片格式为png,且分辨率与屏幕分辨率一致,否则显示异常(显示不全或乱码)。

用户关机图片 "/data/misc/poweroff.png"
用户低电关机显示图片 "/data/misc/poweroff_nopower.png"
用户待机显示图片 "/data/misc/standby.png"
用户待机低电显示图片 "/data/misc/standby_lowpower.png"
用户待机充电显示图片 "/data/misc/standby_charge.png"
系统关机显示图片 "/vendor/media/poweroff.png"
系统关机低电显示图片 "/vendor/media/poweroff_nopower.png"
系统待机显示图片 "/vendor/media/standby.png"
系统待机低电显示图片 "/vendor/media/standby_lowpower.png"
系统待机充电显示图片 "/vendor/media/standby_charge.png"

2.2 E-ink 刷新模式

E-ink 刷新模式可参考源码文档 RKDocs/common/Ebook/Rockchip_RK3566_Introduction_EBOOK_Display_Mode_CN.pdf

Tips

  1. rk3568 没有对应的工程示例,可参考rk3566_eink 和 rk3566_einkw6。
  2. TPS658185 使用频繁,为避免受影响建议单独总线。
  3. 电磁笔和触屏使用总线数据量比较庞大,建议分开且不与 tps65185共用。

总结

活学活用,做个合格的搬运工。

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

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

相关文章

Ubuntu 交叉编译Windows 版本的ffmpeg最佳实践

之前介绍在Windows上采用msys2+minGW或者cygwin在Windows编译方法。很多读者觉得在Windows搭建一个类Linux比较麻烦或者说方法不够通用,本文就介绍在流行的Linux发行版Ubuntu上编译window版本的ffmpeg。即介绍一种通用办法来编译Windows版本ffmpeg,该方法可以推广到android,…

算法 贪心4 || 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 很简单的一题&#xff0c;完全是常识题 class Solution { public:bool lemonadeChange(vector<int>& bills) {unordered_map<int,int> map;for(int i 0; i < bills.size(); i){map[bills[i]];if(bills[i] ! 5){if(map[5] 0) return fals…

【Linux】程序中获取和设置cpu和mem相关信息

这里是目录一、CPU和MEM信息1.1、CPU信息1.1.1、CPU核心数1.1.2、CPU频率读取和调整1.1.3、CPU温度1.2、MEM信息二、C程序读取CPU和MEM信息三、测试写在前面&#xff1a; 记录一下日常&#xff0c;之前有做过相关工作&#xff0c;但是没有记录下来&#xff0c;因此写一写文章。…

使用hbuilder连接夜神模拟器调试app

1. Hbuilder设置 这里端口号随便用一个没有被占用的&#xff1b; 路径夜神模拟器的安装路径下的nox_adb.exe的路径。 2. 夜神模拟器设置 设置如下&#xff1a; 工具&#xff0c;设置&#xff0c;关于平板电脑&#xff08;这里应该没有开发者模式选项&#xff0c;这是我配好之…

【LeetCode】剑指 Offer 53. 在排序数组中查找数字 p263 -- Java Version

1. 题目介绍&#xff08;53. 在排序数组中查找数字&#xff09; 面试题53&#xff1a;在排序数组中查找数字 一共分为三小题&#xff1a; 题目一&#xff1a;数字在排序数组中出现的次数题目二&#xff1a;0 ~ n-1 中缺失的数字题目三&#xff1a;数组中数值和下标相等的元素 2…

【创作赢红包】面向对象基础概念

什么是面向对象 面向对象&#xff08;Object Oriented&#xff09;是软件开发方法&#xff0c;一种编程范式&#xff0c;它是一种对现实世界理解和抽象的方法&#xff0c;是计算机编程技术发展到一定阶段后的产物。 早期的计算机编程是基于面向过程的方法&#xff0c;如实现算…

前端工程化:环境准备—NodeJs安装-Vue项目开发流程

一、前端工程化-Yapi 介绍&#xff1a;YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务 地址&#xff1a; http://yapi.smart-xwork.cn/ 具体操作步骤&#xff1a; 1、添加项目 2、添加接口&#xff1a;根据ID查…

技术分享 | observer 资源水位介绍

作者&#xff1a;郭斌斌 爱可生 DBA 团队成员&#xff0c;负责项目日常问题处理及公司平台问题排查。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 OceanBase 集群界面会展示 Observer …

MATLAB绘制柱状/饼图填充图

MATLAB绘制柱状填充图方法1&#xff1a;hatchfill2工具1.1 案例1&#xff1a;柱状图填充1.2 案例2&#xff1a;饼图填充方法2&#xff1a;applyhatch函数2.1 案例1&#xff1a;柱状图填充2.2 案例2&#xff1a;饼图填充方法3&#xff1a; applyhatch_plusC函数3.1 案例1&#x…

Python 小型项目大全 31~35

三十一、猜数字 原文&#xff1a;http://inventwithpython.com/bigbookpython/project31.html 猜数字是初学者练习基本编程技术的经典游戏。在这个游戏中&#xff0c;电脑会想到一个介于 1 到 100 之间的随机数。玩家有 10 次机会猜出数字。每次猜中后&#xff0c;电脑会告诉玩…

Java实现ArrayList和底层源码讲解

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

Centos7安装MySQL5.7.30

文章目录1. 环境准备1.1 卸载mariadb1.2 下载MySQL 5.7.301.3 安装MySQL依赖项1.4 创建目录1.5 创建用户和用户组1.6 修改Mysql用户权限2. 安装MySQL2.1 解压2.2 修改解压目录名称2.3 初始化2.4 添加my.cnf异常找不到Sock文件2.5 启动MySQL服务2.5.1 建立软连接2.5.2 启动2.6 设…

TCP协议工作机制二(滑动窗口,流量控制,拥塞控制,延时应答,捎带应答等)

目录 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 面向字节流 异常情况 UDP和TCP对比 滑动窗口 由于TCP是可靠传输,有确认应答,超时重传,连接管理等机制,发送消息时需要等待接收方返回的ack.因此会消耗大量等待ack的时间,我们引入滑动窗口的机制来竭尽可能提高TCP的…

基于支持向量机的Digits手写数字识别

基于支持向量机的Digits手写数字识别 描述 支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;模型既可以用于分类也可以用于回归。手写数字识别是一个多分类问题&#xff08;判断一张手写数字图片是0~9中的哪一个&#xff09;&#xff0c;数据集…

图片英文翻译成中文转换器-中文翻译英文软件

您正在准备一份重要的英文资料或文件&#xff0c;但是您还不是很熟练地掌握英文&#xff0c;需要翻译才能完成您的任务吗&#xff1f;哪个软件能够免费把英文文档翻译成中文&#xff1f;让我们带您了解如何使用我们的翻译软件来免费翻译英文文档为中文。 我们的翻译软件是一款功…

C风格的字符串赋值方式

文章目录&#xff08;1&#xff09;C语言中&#xff0c;没有字符串类型但可以用字符数组模拟字符串。&#xff08;2&#xff09;C语言中&#xff0c;字符串是以’\0’作结尾字符。&#xff08;3&#xff09;C语言中&#xff0c;字符串常量本质上是一个无名的字符数组。C风格的字…

使用Spring JDBC中的JdbcTemplate对数据进行增删改查操作教程~

jdbcTemplate实现添加数据功能&#xff1a; spring框架对jdbc框架进行封装&#xff0c;使用jdbcTemplate方便实现对数据库的操作 数据库准备工作&#xff1a; 在已有数据库中创建新的表&#xff1a; create table t_user (id int,username varchar(20),password varchar(20…

搜索词分析工具-网站关键词挖掘

怎么能找到行业的关键词 以下是如何找到行业关键词的建议&#xff1a; 了解行业&#xff1a;要找到与行业相关的关键词&#xff0c;首先需要了解行业。了解行业以及核心目标&#xff0c;从而更好地理解行业中的主题和词汇。 找到竞争对手网站&#xff1a;搜索竞争对手的网站&…

k8s部署Dashboard

k8s和Dashboard的版本对应关系可以到Dashbord的对应版本里看&#xff0c;比如这里&#xff1a; https://github.com/kubernetes/dashboard/releases/tag/v2.7.0 以下步骤都是在master上执行的。 1. 部署步骤 1. 获取Dashbord的yaml文件 wget https://raw.githubusercontent…

【Git】—— 如何安装Git及简单使用

Git是一个开源的分布式版本控制工具&#xff0c;可以更好地管理你的项目。 一、Linux操作系统 如果用的是Ubuntu系统&#xff0c;只需打开shell界面&#xff0c;输入&#xff1a; sudo apt-get install git-core 按下回车即可完成安装。 二、Windows操作系统 Windows操作系统不…