rk3568点亮E-ink
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
- rk3568 没有对应的工程示例,可参考rk3566_eink 和 rk3566_einkw6。
- TPS658185 使用频繁,为避免受影响建议单独总线。
- 电磁笔和触屏使用总线数据量比较庞大,建议分开且不与 tps65185共用。
总结
活学活用,做个合格的搬运工。
相关文章:

rk3568点亮E-ink
rk3568 Android11/12 适配 E-ink “EINK”是英语ElectronicInk的缩写。翻译成中文为“电子墨水”。电子墨水由数百万个微胶囊(Microcapsules)所构成,微胶囊的大小约等同于人类头发的直径。每个微胶囊里含有电泳粒子──带负电荷的白色以及带正电荷的黑色粒子&#…...

如何将Springboot项目通过IDEA打包成jar包,并且转换成可执行文件
首先在IDEA打开你的项目,需要确认项目可以正常运行,然后点击页面右侧的Maven,运行Lifecycle下的package, 此时在项目的target目录下就可以看到一个jar包 这个时候你可以在jar包所在目录下执行cmd窗口,运行 java -jar campus-market-0.0.1-S…...

总结:网卡
一、背景 经常听到eth0,bond0这些概念,好奇他们的区别,于是有了此篇文章记录下。 二、介绍 网卡:即网络接口板,又称网络适配器或NIC (网络接口控制器),是一块被设计用来允许计算机在计算机网络上进行通讯…...
Java这么卷,还有前景吗?
“Java很卷”、“大家不要再卷Java了”,经常听到同学这样抱怨。但同时,Java的高薪也在吸引越来越多的同学。不少同学开始疑惑:既然Java这么卷,还值得我入行吗? 首先先给你吃一颗定心丸:现在选择Java依然有…...
后端简易定时任务框架选择(Python/Go)--gocron
文章目录前言实现后语前言 在使用Python的web框架中,包括flask/Django,其中大量用到celery;celery作为异步任务使用的多,同时也会用celery来跑些定时任务,比如每晚定时跑脚本、跑数据统计等闲时任务。但随着任务量的增…...
【GStreamer学习】之GStreamer基础教程
目标 没有什么比在屏幕上打印出“Hello World”更能获得对软件库的第一印象了! 但是由于我们正在学习多媒体框架,所以我们将输出“Hello World!”改为播放视频。 不要被下面的代码量吓到:只有 4 行是真正需要的, 其…...
各类Round-Robin总结,含Verilog实现
1. Fixed Priority Arbitrary 固定优先级就是指每个req的优先级是不变的,即优先级高的先被处理,优先级低的必须是在没有更高优先级的req的时候才会被处理。所以转化为数学模型就是找出req序列中第一个为1的位置,然后将其转换为onehot。 例如: req[3:0] = 4b1100 ==> g…...
《软件设计师-知识点》
1、指令流水线 (一)一条指令的执行过程可分为三个阶段:取指、分析、执行。 取指:根据PC(程序计数器)内容访问主存储器,取出一条指令送到IR(指令寄存器)中。 分析&…...
mysql 同义词_数据库中的同义词synonym
一、Oracle数据只有一个实例(简单理解就是Oracle 只能建立一个数据库,不像MySQL,它下面可以创建N个库),那么Oracle是根据用户灵活去管理的;这点读起来、理解 起来也不那么难,但是除非自己亲自实现一把才理解深入点&…...

Nacos共享配置
本文介绍一下Nacos作为配置中心时,如何读取共享配置 我的环境 Windows10JDK8SpringCloud:Finchley.RELEASESpringBoot:2.0.4.RELEASEspring-cloud-alibaba-dependencies:0.2.2.RELEASENacos-server:1.0.1 本文的项目…...

数据结构——排序(4)
作者:几冬雪来 时间:2023年4月12日 内容:数据结构排序内容讲解 目录 前言: 1.快速排序中的递归: 2.小区间优化: 3.递归改非递归: 4.归并排序: 5.归并排序的非递归形式&…...

C++13:搜索二叉树
目录 搜索二叉树概念 模拟实现搜索二叉树 插入函数实现 插入函数实现(递归) 查找函数实现 删除函数实现 删除函数实现(递归) 中序遍历实现 拷贝构造函数实现 析构函数实现 赋值重载 我们在最开始学习二叉树的时候,…...

【从零开始学Skynet】基础篇(五):简易聊天室
在游戏中各玩家之间都可以进行聊天之类的交互,在这一篇中,我们就来实现一个简易的聊天室功能,这在上一篇代码的基础上很容易就能实现。1、功能需求 客户端发送一条消息,经由服务端转发,所有在线客户端都能收到…...
HDU - 2089 不要62(数位DP)
题目如下: 杭州人称那些傻乎乎粘嗒嗒的人为 626262(音:laoer)。 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来&#x…...

网络安全与防御
1. 什么是IDS? IDS(入侵检测系统):入侵检测是防火墙的合理补充,帮助系统对付网络攻击,扩展了系统管理员的安全管理能力,提高了信息安全基础结构的完整性。主要针对防火墙涉及不到的部分进行检测。 入侵检测主要面对的…...

【DT】蒸脱机的结构和工作原理
DT蒸脱机的结构和工作原理什么是DTDT结构图工作过程什么是DT DT 蒸脱机(DesolventazationerToaster),根据英文名可以看出来,他的作用是脱溶、烘烤。用于蒸脱湿豆粕中的溶剂。 大豆油生产工艺有2种:压榨油的加工工艺是…...
Docker管理软件
下面是一些常见的Docker管理软件 Portainer Portainer是一个轻量级的Docker管理界面,可以以用户友好的方式显示Docker环境的状态。它提供了仪表板、容器、镜像、卷、网络等功能。 Rancher Rancher是一个开源的Docker容器管理平台,支持多个主机和集群…...

关于运行时内存数据区的一些扩展概念
栈顶缓存技术(Top-of-Stack Cashing) 前面提过,基于栈式架构的虚拟机所使用的零地址指令更加紧凑,但完成一项操作的时候必然需要使用更多的入栈和出栈指令,这同时也就意味着将需要更多的指令分派(instruction dispatc…...

计算机组成原理第二章数据的表示与运算(中)
提示:且行且忘且随风,且行且看且从容 文章目录前言2.2.0 奇偶校验码(大纲已删)2.2.1 电路的基本原理 加法器设计2.2.2 并行进位加法器2.2.3 补码加减运算器2.2.4 标志位的生成2.2.5 定点数的移位运算2.2.62.2.6.1 原码的乘法运算2.2.6.2 补码的乘法运算2…...

我的第一台电脑的故事
第一台电脑啊,多么遥远的故事了,又似乎就在眼前。今天重回往事,就简单记录一下吧。 🌱缘起 那是初一,至今已13年,遂觉遥远,而又是立志我学习的起点,至今还在校园,又觉就…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...