当前位置: 首页 > 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;又觉就…...

【1041. 困于环中的机器人】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 在无限的平面上&#xff0c;机器人最初位于 (0, 0) 处&#xff0c;面朝北方。注意: 北方向 是 y 轴的正方向。南方向 是 y 轴的负方向。东方向 是 x 轴的正方向。西方向 是 x 轴的负方向。 机器人可…...

几何算法——4.交线(intersection curve)的表达与参数化、微分性质

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

【GPT】让你事半功倍特别好用的5个GPT工具

文章目录前言一、现在还能开通ChatGPT4.0吗&#xff1f;二、推荐五款与ChatGPT的相关实用工具1.一款浏览器插件&#xff1a;ChatGPT for Google2.一款生成图片的AI工具&#xff1a;midjourney3.推荐两款AI自动生成PPT&#xff1a;闪击PPT、mindshow4.识别PFD文件内容对话&#…...

人工智能大模型多场景应用原理解析

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

SpringBoot默认包扫描机制与默认配置文件

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

RabbitMq 消息可靠性问题(一) --- publisher发送时丢失

前言 消息从生产者发送到exchange, 再到 queue, 再到消费者。这个过程中有哪些有消息丢失的可能性呢&#xff1f; 发送时丢失&#xff1a; 生产者发送的消息未送达 exchange消息到达 exchange 后未到达 queue MQ 宕机&#xff0c;queue将消息丢失consumer 接收到消息后未消费…...

Java初识泛型

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

寸照换底色技巧大全,超详细图文教程

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

这篇文章价值很大:股票历史分时成交数据怎么简单获取?【干货】

文章目录前言一、准备二、使用步骤1.引入库2&#xff0c;使用这个API查询历史分时数据&#xff1a;3.查询完整历史分时数据4.其他查询方法参数格式&#xff1a;[(市场代码, 股票代码), ...]参数&#xff1a;市场代码, 股票代码, 文件名, 起始位置, 数量参数&#xff1a;市场代码…...

muduo源码剖析--Buffer

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