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年,遂觉遥远,而又是立志我学习的起点,至今还在校园,又觉就…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
