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年,遂觉遥远,而又是立志我学习的起点,至今还在校园,又觉就…...

【1041. 困于环中的机器人】
来源:力扣(LeetCode) 描述: 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意: 北方向 是 y 轴的正方向。南方向 是 y 轴的负方向。东方向 是 x 轴的正方向。西方向 是 x 轴的负方向。 机器人可…...

几何算法——4.交线(intersection curve)的表达与参数化、微分性质
几何算法——4.曲面求交的交线(intersection curve)的表达与参数化、微分性质1 关于曲面求交的交线表达2 交线的微分性质3 交线的参数化4 修正弦长参数化的微分性质1 关于曲面求交的交线表达 两个曲面求交,比较经典的方法是用跟踪法…...

【GPT】让你事半功倍特别好用的5个GPT工具
文章目录前言一、现在还能开通ChatGPT4.0吗?二、推荐五款与ChatGPT的相关实用工具1.一款浏览器插件:ChatGPT for Google2.一款生成图片的AI工具:midjourney3.推荐两款AI自动生成PPT:闪击PPT、mindshow4.识别PFD文件内容对话&#…...

人工智能大模型多场景应用原理解析
前言 在上篇文章《人工智能大模型之ChatGPT原理解析》中分享了一些大模型之ChatGPT的核心原理后,收到大量读者的反馈,诸如:在了解了核心原理后想进一步了解未来的发展趋势(比如生成式人工智能和元宇宙能擦出什么样的火花?),大模型…...

SpringBoot默认包扫描机制与默认配置文件
文章目录一、SpringBoot默认包扫描机制 - 示例二、SpringBoot默认扫描包机制 - 原理三、SpringBoot手动扫描包机制 - 原理&示例四、ComponentScan与MapperScan五、SpringBoot默认配置文件一、SpringBoot默认包扫描机制 - 示例 默认情况下,扫描启动类同级及其子…...

RabbitMq 消息可靠性问题(一) --- publisher发送时丢失
前言 消息从生产者发送到exchange, 再到 queue, 再到消费者。这个过程中有哪些有消息丢失的可能性呢? 发送时丢失: 生产者发送的消息未送达 exchange消息到达 exchange 后未到达 queue MQ 宕机,queue将消息丢失consumer 接收到消息后未消费…...

Java初识泛型
目录 一、包装类 1、基本数据类型和对应的包装类 2、装箱和拆箱 3、自动装箱和自动拆箱 二、什么是泛型 三、引出泛型 1、泛型的语法 四、泛型类的使用 1、语法 2、示例 3、类型推导(Type Inference) 六、泛型如何编译的 1、擦除机制 2、为什么不能实例化泛型类…...

寸照换底色技巧大全,超详细图文教程
在日常的设计工作中,我们常常需要将图片的背景色进行修改,以适应不同的场景和需求。其中最常用的方法就是寸照换底色技巧。本文将为大家介绍一些常见的寸照换底色技巧,并提供超详细的图文教程,帮助大家轻松完成这项任务。 一、使…...

这篇文章价值很大:股票历史分时成交数据怎么简单获取?【干货】
文章目录前言一、准备二、使用步骤1.引入库2,使用这个API查询历史分时数据:3.查询完整历史分时数据4.其他查询方法参数格式:[(市场代码, 股票代码), ...]参数:市场代码, 股票代码, 文件名, 起始位置, 数量参数:市场代码…...

muduo源码剖析--Buffer
Buffer类 Buffer类是自定义处理数据输入缓冲的类,底层是vector< char >,通过readIdx和writeIdx将缓冲区分为3个部分,第一部分是预留的8字节已经读出的缓冲区字节数、第二部分是还未读出的部分、第三部分是可写的部分。 Buffer类的设计…...