当前位置: 首页 > news >正文

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

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

总结

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

相关文章:

rk3568点亮E-ink

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

如何将Springboot项目通过IDEA打包成jar包,并且转换成可执行文件

首先在IDEA打开你的项目&#xff0c;需要确认项目可以正常运行&#xff0c;然后点击页面右侧的Maven,运行Lifecycle下的package, 此时在项目的target目录下就可以看到一个jar包 这个时候你可以在jar包所在目录下执行cmd窗口&#xff0c;运行 java -jar campus-market-0.0.1-S…...

总结:网卡

一、背景 经常听到eth0&#xff0c;bond0这些概念&#xff0c;好奇他们的区别&#xff0c;于是有了此篇文章记录下。 二、介绍 网卡&#xff1a;即网络接口板&#xff0c;又称网络适配器或NIC (网络接口控制器)&#xff0c;是一块被设计用来允许计算机在计算机网络上进行通讯…...

Java这么卷,还有前景吗?

“Java很卷”、“大家不要再卷Java了”&#xff0c;经常听到同学这样抱怨。但同时&#xff0c;Java的高薪也在吸引越来越多的同学。不少同学开始疑惑&#xff1a;既然Java这么卷&#xff0c;还值得我入行吗&#xff1f; 首先先给你吃一颗定心丸&#xff1a;现在选择Java依然有…...

后端简易定时任务框架选择(Python/Go)--gocron

文章目录前言实现后语前言 在使用Python的web框架中&#xff0c;包括flask/Django&#xff0c;其中大量用到celery&#xff1b;celery作为异步任务使用的多&#xff0c;同时也会用celery来跑些定时任务&#xff0c;比如每晚定时跑脚本、跑数据统计等闲时任务。但随着任务量的增…...

【GStreamer学习】之GStreamer基础教程

目标 没有什么比在屏幕上打印出“Hello World”更能获得对软件库的第一印象了&#xff01; 但是由于我们正在学习多媒体框架&#xff0c;所以我们将输出“Hello World&#xff01;”改为播放视频。 不要被下面的代码量吓到&#xff1a;只有 4 行是真正需要的&#xff0c; 其…...

各类Round-Robin总结,含Verilog实现

1. Fixed Priority Arbitrary 固定优先级就是指每个req的优先级是不变的,即优先级高的先被处理,优先级低的必须是在没有更高优先级的req的时候才会被处理。所以转化为数学模型就是找出req序列中第一个为1的位置,然后将其转换为onehot。 例如: req[3:0] = 4b1100 ==> g…...

《软件设计师-知识点》

1、指令流水线 &#xff08;一&#xff09;一条指令的执行过程可分为三个阶段&#xff1a;取指、分析、执行。 取指&#xff1a;根据PC&#xff08;程序计数器&#xff09;内容访问主存储器&#xff0c;取出一条指令送到IR&#xff08;指令寄存器&#xff09;中。 分析&…...

mysql 同义词_数据库中的同义词synonym

一、Oracle数据只有一个实例(简单理解就是Oracle 只能建立一个数据库&#xff0c;不像MySQL&#xff0c;它下面可以创建N个库)&#xff0c;那么Oracle是根据用户灵活去管理的&#xff1b;这点读起来、理解 起来也不那么难&#xff0c;但是除非自己亲自实现一把才理解深入点&…...

Nacos共享配置

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

数据结构——排序(4)

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

C++13:搜索二叉树

目录 搜索二叉树概念 模拟实现搜索二叉树 插入函数实现 插入函数实现&#xff08;递归&#xff09; 查找函数实现 删除函数实现 删除函数实现&#xff08;递归&#xff09; 中序遍历实现 拷贝构造函数实现 析构函数实现 赋值重载 我们在最开始学习二叉树的时候&#xff0c;…...

【从零开始学Skynet】基础篇(五):简易聊天室

在游戏中各玩家之间都可以进行聊天之类的交互&#xff0c;在这一篇中&#xff0c;我们就来实现一个简易的聊天室功能&#xff0c;这在上一篇代码的基础上很容易就能实现。1、功能需求 客户端发送一条消息&#xff0c;经由服务端转发&#xff0c;所有在线客户端都能收到&#xf…...

HDU - 2089 不要62(数位DP)

题目如下&#xff1a; 杭州人称那些傻乎乎粘嗒嗒的人为 626262&#xff08;音&#xff1a;laoer&#xff09;。 杭州交通管理局经常会扩充一些的士车牌照&#xff0c;新近出来一个好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的数字了&#xff0c;这样一来&#x…...

网络安全与防御

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

【DT】蒸脱机的结构和工作原理

DT蒸脱机的结构和工作原理什么是DTDT结构图工作过程什么是DT DT 蒸脱机&#xff08;DesolventazationerToaster&#xff09;&#xff0c;根据英文名可以看出来&#xff0c;他的作用是脱溶、烘烤。用于蒸脱湿豆粕中的溶剂。 大豆油生产工艺有2种&#xff1a;压榨油的加工工艺是…...

Docker管理软件

下面是一些常见的Docker管理软件 Portainer Portainer是一个轻量级的Docker管理界面&#xff0c;可以以用户友好的方式显示Docker环境的状态。它提供了仪表板、容器、镜像、卷、网络等功能。 Rancher Rancher是一个开源的Docker容器管理平台&#xff0c;支持多个主机和集群…...

关于运行时内存数据区的一些扩展概念

栈顶缓存技术&#xff08;Top-of-Stack Cashing&#xff09; 前面提过&#xff0c;基于栈式架构的虚拟机所使用的零地址指令更加紧凑&#xff0c;但完成一项操作的时候必然需要使用更多的入栈和出栈指令&#xff0c;这同时也就意味着将需要更多的指令分派(instruction dispatc…...

计算机组成原理第二章数据的表示与运算(中)

提示&#xff1a;且行且忘且随风&#xff0c;且行且看且从容 文章目录前言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…...

我的第一台电脑的故事

第一台电脑啊&#xff0c;多么遥远的故事了&#xff0c;又似乎就在眼前。今天重回往事&#xff0c;就简单记录一下吧。 &#x1f331;缘起 那是初一&#xff0c;至今已13年&#xff0c;遂觉遥远&#xff0c;而又是立志我学习的起点&#xff0c;至今还在校园&#xff0c;又觉就…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; 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远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启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 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

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

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

HashMap中的put方法执行流程(流程图)

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

C++:多态机制详解

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