
超低成本多功能1080P带触摸HDMI蓝牙WIFI的电脑副屏
简介
这是上个工程的更新,由于上次的屏幕缺货,这次更新适配了新型号 H546DAN07 面板并修复了之前的大量的遗留问题
简介:这是上个工程的更新,由于上次的屏幕缺货,这次更新适配了新型号 H546DAN07 面板并修复了之前的大量的遗留问题开源协议
:CC BY-NC-SA 4.0
描述
前言
这是之前的工程:66元5.5寸1080P触摸HDMI蓝牙WIFI的多功能电脑副屏更新版本(如果没看过的可以返回去看看),在之前的工程中,使用的某宝上的TM055VDXP35屏幕缺货,老板找到我问能不能适配帮忙适配他们家新款的H546DAN07屏幕,于是五一期间又爆肝了很多天,终于把新款屏幕调通。同时修复了之前大量的遗留问题,砍掉了一些冗余部件,并增加了一些新功能,只算物料成本的话保守估计应该能压到70元以内,核心元件MCU,RK628D,屏这三样50元以内可以拿下,以下是主要更新内容。

更新内容
硬件方面
-
i2c拆分成硬件i2c和软件i2c,触摸和RK628d不再共用,删除了复杂的复用逻辑,减小了冲突带来的触摸卡顿
-
优化SMT贴片,重复元器件取相近的进行聚合,大量替换基础库原件,统一优化了封装,原件进行了重新编号
-
删除掉没有用到的AC7916 RTC时钟部分,但是保留焊盘,以便后续有需要了再恢复
-
优化AC7916A走线,移除了多余的飞线
-
增加LED指示灯,支持快闪,慢闪,呼吸灯等多种状态
-
RK628改为使用AC7916的引脚提供的时钟,节省了一个晶振
-
修复MIC偏置问题,增加了一个板载mic
-
使用更加稳定的电平转换电路替代之前的分压电阻方案
-
修改电源IC为更好焊接的SGM3851,适配新屏幕 H546DAN07
-
由于屏幕连接方式改变,触摸排线又不够长,要使用之前的触摸方案话必须加延长线,于是设计板子中扣出来一块小板作为触摸转接板,可以焊接0.5mm 7P软排线进行延长转接
软件部分
屏幕部分
相比于上块屏幕,这款屏幕要相对更高级,也更复杂一些
-
当前屏幕运行在CMD模式,理论上属于是动态/可变刷新率的范畴,但是RK628目前并不支持,所以当前还是使用固定刷新率,锁60帧。
-
当前屏幕使用了三路主供电(VELVDD,VLEVSS,VAVDD),两路辅助供电(LCD_3V0,LCD_1V8),并且使用了动态功耗控制,电源ic输出的不再是固定电压,而是跟随屏幕功耗自动调整
-
TE引脚配置,由于RK628完全没有提到CMD模式和TE引脚应该怎么配置,并且通过后续调试发现RK628的CMD模式走的eDPI模式,在时序稳定,帧数稳定的情况下不会产生撕裂问题,所以暂时未使用TE引脚
-
屏幕供电IC的使能理论上是交由屏幕自行控制,但是不同三供电IC存在调压范围不一致的问题,所以预留了MCU直调供电的接口
-
当前屏幕调光使用的屏幕内置的MIPI指令调光,还有 HBM(高亮度模式),涉及到写多个参数,并且有需要计算的部分,总体来说比之前的简单PWM调光复杂了一个数量级,当前实现还是简化版
我会在文末附上一份主线内核支持的驱动代码,需要单独驱动屏幕的可以参考,这不是本篇重点就不详细赘述了。

I2S音频部分
本来以为很简单,线接上就完事了,然而后续逐渐发现,在RK628没有详细寄存器参数资料的情况下,i2s部分真的很难调。
首先是接收端实现,参考MCU的代码文档说明,这方面也是含糊其辞, 只提到配一个:
static const struct iis_platform_data iis0_data = {
.channel_in = BIT(0), //通道0输入
.channel_out = 0,
.port_sel = IIS_PORTA,
.data_width = 0,
.mclk_output = 0,
.slave_mode = 1, //从机模式
.dump_points_num = 320,
};
然后?然后就没有然后了,根本没有提到如何对接到DAC。于是我只能去SDK的示例代码库中找相关例程,找到最接近需求的是一个录音机的demo,里面有MIC直通DAC的例子,并且我看到I2S在代码中也被算做是一个录音源,我想当然以为可以直通,但是实际操作过后发现并不行,于是只能换一种方式操作。
既然里面没有写,那我就找里面已经写了的功能进行组合试试,结果还真是这样,要先使用Audio Server将音频数据编码为PCM,再使用vfs,在I2S和DAC中搭了一座桥,实现一有数据,就触发回调,将解码后的数据送入DAC进行播放。
AC7916 MCU部分的异常都排查完后,发现还是无声,但是当时设计板子的时候又没有留i2s测试口,无奈只能刮开板子做针线活,线真的太细了,都还没有一根头发丝粗,普通的杜邦线线根本飞不了,只能从电感中拆了一个0.1mm漆包线,好说歹说终于飞了SCLK,LRCK,CH0这三根线出来,接上逻辑分析仪,发现数据明显有问题,都是些什么乱糟糟的东西,打通断档测通断,线路是通的,再三确认线没接错后,将飞线接入示波器查看波形,发现都是一些杂波,
事实上i2s根本就没有正常输出,那只能说明在软件方面还是存在着问题。
对照着之前的RK628d网络资料和porting guide查I2S的相关说明

这里说的无需配置可能指的就是他们自家平台无需配置吧,对我无用,继续往下查,发现里面有一段关于I2S无输出的说明,其中明确提到了写三个寄存器,

0x155c155c这个寄存器是有写的,但是其他两个找不到,这才发现我当前从网上搜到的这套rk628资料有问题的,音频部分实现是不完整,而且版本太老了,好在github有rk系列soc最新的bsp源代码,其中merge了rk628的实现,如这一个nanopi6的内核中就有rk628的驱动
https://github.com/friendlyarm/kernel-rockchip/tree/nanopi6-v6.1.y/drivers/media/i2c/rk628
我也是随便搜了一个最新的,搬了一部分音频实现之后,i2s终于有输出了,见下图:


但是这波形一看就不对劲,再接到示波器上测,发现时钟输出100多Mhz的正弦波,LRCK输出2.5Mhz方波,CH0输出杂波,这时候再看音频部分,已经与上游基本一致了,如果再一步一步查其他的寄存器,这部分有上万行代码,看着太头疼,工作量太大了,想着既然都搬了,不如将新版代码整体移植过来吧,批量换一下接口相对来说还是比较简单的。
于是工作又转向了整体迁移,但是由于平台差异过大,我又在其中添加了很多屏幕相关的调试功能,还要考虑到当前SDK时序问题,迁移过程相当漫长,这部分中AI起到了非常大的帮助,将蛛网一样的复杂关系梳理得非常清楚,但是即使动用AI,硬件问题AI也不好处理,连改带测也花了我好几天时间,一顿折腾,迁移完成之后,终于能看到一个漂亮的波形了:

这时候兴冲冲地插上耳机,结局却令人失望,音频放半秒卡5s,这不对啊,我各种逻辑都尽量跟官方对齐的啊,理论上不应该出现这种问题。
遇到这种问题,我也很无奈。只能是打上日志去复查执行流程,发现原版的音频执行链路是并行的,而我的只是单线程轮询,会受到其他任务的影响,拖慢整体执行流程。
知道问题接下来就好办了,先清掉各种延时操作,然后给音频增加一个独立轮询链路,保证每1s准时调用一次,这一步做完之后,音频连续性有了很大的改善
但是还是播1s卡1s,远远达不到流畅播放的程度,只能找搬来AI对项目进行整体分析,给出一个结论,架构不同导致的时序问题,因为官方使用的全中断模式,而当前平台是中断轮询复合使用,导致音频链路的执行时序还是和官方不一样。
由于不可能完全复刻官方的时序,只能是让AI给我解释这条链路的大概的工作逻辑,寄存器是怎么设置的,剩下的只能靠自己慢慢调参了。
就这样反复调试,反复修改,慢慢地把延迟一点一点压下来,但是最后一点延迟始终是压不动,又折腾了很久,才发现我忽视了一个极其简单的问题,调试输出本身也会占用时间,导致本该稳定的音频时钟校对出现微小的误差导致卡顿。
至此,I2S部分的调试完美结束。
补充:为什么RK628的I2S要不断的去轮询?
RK628内部有一个FIFO音频帧缓冲队列,因为RK628 的 HDMI RX 音频时钟不是完全硬件自稳的。软件需要持续观察 HDMI 源端送来的 CTS/N、FIFO 填充量、上下溢状态,再在“初始化、采样率变化、FIFO上/下溢出”这几类时机重新把 CGU_CLK_HDMIRX_AUD 拉回正确频点,否则运行久了就会发生时钟偏移并累积,偏差不大的时候就是变调,偏差大的时候直接就崩溃了
FIDO2 USB Key部分
当前在AC7916A上使用官方的硬件加密,通过USB otg实现了FIDO2硬件安全密钥的功能。
FIDO2 USB Key 是一把插上就能用的硬件级免密码安全密钥,用来替代或减少密码输入。登录时,把它插入电脑,输入 PIN 码或轻触确认,就能完成身份验证。
无需安装软件,无需安装驱动。支持 FIDO2 / Passkey / 安全密钥的电脑和手机通常都可以直接识别 USB Key。
首次使用时,在账号或系统中添加安全钥匙,之后登录时:
选择账号 → 插入 USB Key → 按键确认 → 登录成功
不需要反复输入复杂密码,也不用等待短信验证码。
常用场景
-
Windows 系统登录
在设置中配置USB安全密钥之后,插入当前设备,按下按钮即可快速登录,不再依赖传统密码。 -
浏览器账号登录
在 Chrome、Edge、Firefox、Safari 等主流浏览器中,可用于支持 Passkey / FIDO2 的网站账号登录,例如 Microsoft、Google、GitHub、企业 SSO、密码管理器、云服务后台等。 -
SSH 登录
开发者和运维人员可以把 FIDO2 USB Key 用作 SSH 登录凭证。连接服务器、Git 仓库或远程环境时,需要插入钥匙并触摸确认,避免 SSH 私钥被复制或滥用。
固件和上位机使用说明
当前无论是上位机还是下位机程序都还在测试阶段,当前版本对比之前的内部开发测试版本已经稳定了很多了,但是还是不可避免的存在大量的未测试到的bug,想要更加稳定的运行的话缺少不了长期的维护与大家的反馈,如果在使用或者复刻的时候遇到问题,可以在下方留言反馈,我一有空就会及时去解决。
上位机软件
当前上位机软件只适配了Windows,且只支持Windows10及以上版本。
到附件处下载PanelManagerSetup.zip安装包,解压后按照提示安装运行即可,安装包中附带了一份程序源代码,用于内置AI的自我迭代使用,另外有能力的也可以尝试将源代码移植到其他平台使用。
由于程序本身底层就是跨平台架构的,移植要修改的地方不多,主要缺的是测试和维护。
下位机固件
理论上打好板子,硬件焊接无问题的情况下,进入设备管理器的磁盘驱动器分支下应该会出现

这样的一个设备,这样基本说明你的板子焊接的没问题,可以开始下载固件。
当前上位机程序已经集成固件写入功能,无需杰理官方烧录工具,首先下载好sdk.elf固件,然后进入上位机的设置->更新->手动固件更新,按住SPI_FLASH上方的进入升级模式的按钮不放(如果你是空片,不按也会直接进入烧录模式),插入USB,选择之前下载的固件刷入即可。
需要注意的是,当前Type-C USB接口在烧录模式下是区分正反插的,如果出现识别错误导致烧录失败就换一面插,刷入的耗时较久,请耐心等待刷入成功的提示出现,不要提前关闭窗口。

结语
暂时先写到这里吧,时间已经很晚了,项目还要大量测试和bug修复工作要做,如有错误和遗漏,欢迎各位大佬们批评指正。
后续补充说明
关于RK628的改进型号,新款的确优化了挺多问题,但是价格也接近翻倍了,而且很多用不到的功能,所以当前适配的还是老款RK628D

板子连接HDMI 5v和USB 5v的开关默认不贴也不使用,这个设计是用只HDMI单供电的尝试,这不是一个标准的做法,不推荐使用,因为根据HDMI的规范,默认HDMI需要保证5v引脚输出50ma的电流即可,板子的供电要求远大于这个规范,所以不保证可用,为什么某些情况下会可用?可能是因为某些板子的HDMI 5v直连了5v供电,所以继承了大电流的输出能力。
关于屏幕连接方式,之前的版本屏幕是放在没有原件的那一面,排线通过挖槽穿过来,当前版本则是屏幕放在有元件这一面,排线直连。

当前USB type-c是分面的,正反插目前来说对主要功能没有影响,但是有一面是高速的,使用高速面理论上触摸延迟和音质都要好一些,可以通过在设备管理器识别出的音频名称区分,低速是USB Audio 1.0,高速是2.0,互相切换可能会遭遇Windows 会按同 VID/PID/bcdDevice/序列号复用旧缓存,导致杂音的问题,这时候可以去系统声音输出设置随便切一个采样率和位数就正常了。

SPI FLASH目前需要升级到16MB(128Mbit)及其以上的容量,当前版本开启了双备份(类似Android 的A/B分区),并且增加了很多新功能,以及单独的用户存储分区,加密存储分区,之前版本使用的8MB(64Mbit) SPI FLASH 已经不能满足要求了
5/28补充更新
固件和上位机app我重新上传了,又修复了一批BUG,能想起来的有:
- 修复FIDO2导致USB崩溃的问题
- 大幅压缩安装包体积,减小组件与环境的依赖
- 电源IC控制切换到屏幕自行控制(请确保CTRL和ENVO3的两个0欧电阻贴好,否则背光不会亮)
- 上位机增加DAC的I2S,UAC输入切换,蓝牙I2S,UAC输入切换功能
- 优化触摸校准流程,屏蔽未完成触摸校准时的错误输入
- 优化下位机连接时序,避免某些特定情况下的反复报错重连
- 优化部分用户交互逻辑和体验(如连接设备后自动全屏,断联后自动退出全屏,烧录固件时增加确认提示,避免点一下进入烧录模式屏幕黑屏了看不到界面给人造成困惑,类似的问题还有很多,还需要大量时间和反馈进行打磨)
- 优化调试日志输出,避免太多日志影响运行速度,特别是触摸部分
- 优化固件更新部分,上位机可以控制设备自动进入烧录模式
- 优化I2S链路(PC->RK628->MCU->DAC多重链路)导致的音量偏低问题
6/6补充更新
- 修复某些情况下由于EDID导致的HDMI握手失败的问题
- 修复由于HDMI输出非RGB导致的鬼影问题
- 修复FIDO2 Windows登录支持问题
- 修复Type-C USB反面串口连接不上的问题
- 优化串口丢包问题
- 优化休眠唤醒逻辑
- 优化蓝牙,I2S,UAC切换逻辑
- 优化USB延迟启动问题
特别注意
H546DAN07 这款屏幕,初始化序列和亮度调整需要在HS模式下发,部分寄存器读取失败是正常的,但是一定要保证B6寄存器能读出来4字节以上的数据,否则可能无法正常调整ELVSS电压和亮度,这都是踩了很多坑试出来的!!C8寄存器是gamma数据,这个寄存器在某些lane_rate下读不出来,但是读不出来似乎不影响正常显示, H546DAN07这款面板对于时序来说特别敏感,时序稍微差一点,某些寄存器就读不出来,同样的带触摸的那款对时序要求就没那么严格,几乎所有寄存器都可以读取成功。
固件和上位机已经重新上传,当前项目已开源到GitHub,获取实时更新请访问:
https://github.com/git8129/PanelManager
已知问题
- 屏幕时序还有问题,部分情况下显示有异常,不响应调光指令
- 因为底层架构大改,显示配置大部分实时调整屏参的功能暂不能正常使用
- 上下位机通信偶发会出现丢包问题,导致某些指令被截断,应该还是串口收发缓冲区的实现有问题
- USB模块启动偶发延迟/阻塞问题,还没时间去深挖原因
- 其他问题请下方评论区反馈
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论