尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

RK3568刷机与显示适配实战:从MIPI DSI到HDMI输出调试指南

发布时间:2026/9/24 15:37:27

资讯中心
01
ARTICLE

RK3568刷机与显示适配实战:从MIPI DSI到HDMI输出调试指南

RK3568刷机与显示适配实战:从MIPI DSI到HDMI输出调试指南
手里这块RK3568开发板在抽屉里躺了一个多月最近要给一块10.1寸MIPI屏做驱动适配才把刷机和显示输出这条链路整个走了一遍。从固件烧写、MIPI DSI参数调试到后来排线干扰问题太多直接切到HDMI输出做验证中间踩了不少坑写下来给正在折腾RK3568的朋友做个参考。这篇文章适合手上已经拿到RK3568开发板、想快速跑起来一块屏幕或者遇到MIPI屏点不亮、HDMI没输出这类问题的朋友。我尽量把步骤和原理都讲清楚既给“怎么改”也说“为什么这么改”这样后面换屏、换板子也有个思路可以套。1. 刷机前的基础认知板子、固件、工具三件事1.1 RK3568与RK3566的区别选型时最容易忽略的点我在好几个开发交流群里看到有人把RK3568和RK3566当成同一颗芯片用固件通刷结果uboot起不来就想砸板子。这两颗芯片虽然核心架构都是四核Cortex-A55但外设规格差距非常明显刷机之前先确认手上到底是哪一颗。差异主要体现在这几个地方RK3568带PCIe 3.0和SATA接口适合做NAS、边缘服务器这类需要高速存储扩展的设备RK3566砍了PCIe 3.0和SATA显示接口也少了eDP定位更多是低成本人机交互和桌面终端。以太网方面RK3568集成双千兆MACRK3566是单千兆。视频编解码能力两者差别不大都支持4K60fps解码但如果你想做多屏显示RK3568的HDMI加eDP加MIPI DSI组合明显更从容。实际刷机时最大的坑在于RK3568的固件烧进RK3566板子Loader阶段就可能罢工甚至把设备直接带进Maskrom。所以拿到二手板子第一件事就是看PCB丝印和CPU顶标别赌运气。封装上两者都是FCBGA肉眼看区别不大我一般直接对照板子原理图里的型号标注没有原理图就看CPU旁边丝印RK3568顶标带RK3568字样RK3566会明确写RK3566这一点绕不过去。1.2 刷机必备软硬件清单一根线选错就是一夜白忙刷机这件事看着简单但“工具不对、线材不对、固件不对”三座大山压下来能折腾到怀疑人生。我把自己的搭配写出来照着准备就行。软件方面四件套DriverAssitant瑞芯微官方USB驱动Windows下不装它RKDevTool永远识别不到设备。装的时候用管理员身份运行装完最好重启一次电脑。RKDevTool瑞芯微开发工具Windows下最常用版本2.86、2.96我都用过界面差别不大新手选新版本就行。upgrade_toolLinux主机用的烧写工具命令行的功能比RKDevTool简单一些但刷机、救砖都够用。ADB工具可选但强烈建议装一个系统起来后一条adb reboot loader就能进Loader模式比按键法省事太多。硬件方面除了开发板和电源最容易被忽视的是USB线。RK3568烧写口一般是板载的Type-C OTG口这个口需要的是带数据功能的数据线不是手机充电线。我踩过这个坑连上后设备管理器一点反应都没有换了三根线才反应过来是线的问题。电源也建议用原装RK3568开发板一般12V/2A或12V/3A劣质电源会导致烧到一半USB断开然后被迫进Maskrom重烧。显示器、HDMI线、MIPI屏套件这些看你要验证什么就准备什么示波器和万用表在点屏和HDMI排查阶段几乎是刚需。2. 上手烧写Loader模式、Maskrom模式和RKDevTool的正确用法2.1 先搞懂固件分区为什么有人只刷一个boot就够瑞芯微的update.img是一个整包镜像里面打包了多个分区烧录时可以整体烧也可以单独烧某个分区。RKDevTool的“升级固件”页就是整包烧写“烧写分区”页就是单独烧其中一个镜像文件。常见分区和作用如下分区名实际内容作用loaderminiloader一级引导初始化DDR、加载uboot这个坏了最麻烦parameter分区表记录各镜像的起始地址和大小分区布局靠它决定ubootU-Boot引导程序负责启动内核同时处理开机logo显示bootkerneldtbramdisk内核镜像设备树改动就要重新生成bootrootfs根文件系统用户空间的全部内容跑Ubuntu/Debian/Buildroot都在这misc系统标志存放重启命令、恢复模式标记等调试阶段强烈建议用“烧写分区”而不是每次都整包刷。比如你只改了一个设备树文件重新编出boot.img单独烧boot分区几秒钟搞定整包刷可能要几分钟而且还会把rootfs里的配置也一起重置代价很高。我第一次调试时没意识到这点每次改dts都整包重来白白浪费了大量时间在等进度条上。2.2 进入Loader模式和Maskrom模式按键、短接、命令三选一Loader模式是正常刷机用的模式进入方法有三种按键法断电按住板上的RECOVERY键不放接USB线到电脑再上电看到RKDevTool出现Loader设备后松手。这是最通用的方法所有板子基本都适用。命令法系统内执行adb reboot loader或串口里执行reboot loader命令直接重启进入Loader。系统内部重启法Android系统设置里如果开了OEM解锁有的固件也可以通过“恢复模式”跳转。Maskrom模式是应急救砖用的进入条件比Loader严格。Loader模式下至少loader还在系统还能通过USB通信Maskrom模式下USB只提供最基础的传输功能相当于芯片被拉到了最原始的下载状态。进入方式一般是有Maskrom按键的板子断电按住Maskrom键上电即可。没有按键的板子断电后用镊子短接EMMC的CLK引脚和GND上电后松开。具体短接点在板子上通常有丝印标注没有标注就看原理图。判断是否成功的标志很简单RKDevTool设备列表里出现“Maskrom设备”几个字就说明成了。平时刷机用Loader就够Maskrom等方法真的变砖了再用。2.3 RKDevTool从零到一的完整烧写流程我这里写一遍Windows下的标准操作Linux用upgrade_tool的思路一样只是命令换成upgrade_tool uf update.img之类。第一步安装DriverAssitant并重启电脑。第二步解压RKDevTool以管理员身份运行先不接开发板。第三步用USB数据线连接开发板OTG口和电脑开发板上电。第四步用按键法进入Loader模式确认RKDevTool识别到设备。第五步在“升级固件”页选择要烧写的update.img点击“升级”。第六步等待进度条走完提示“固件升级成功”。第七步断电重新上电接上显示器和各种外设验证系统启动。整个过程里最需要注意的就是别在烧写途中碰USB线、别断电。如果是自制固件先在本地确认update.img完整解压能正常打开再烧到板子上。注意如果RKDevTool一直停留在“测试设备失败”或者设备列表空白先检查驱动是否装好、线材是否数据线然后可以尝试进入Maskrom模式再烧loader手动复位后重新升级。3. 让MIPI屏亮起来DSI设备树配置与调试实录3.1 MIPI DSI协议速览Lane数量、时钟频率必须匹配MIPI DSI是面向显示接口的分组协议由1条时钟lane和1到4条数据lane构成每条lane都是差分对结构。RK3568的DSI0和DSI1控制器都支持4 lane常见板子默认只引出DSI0排线插的位置要看原理图确认。很多人点屏前不看屏的规格书上来就复制别人的设备树运气好一次亮运气不好折腾一晚上根源就在于没搞懂MIPI DSI的时钟到底怎么来的。MIPI DSI是高速串行总线它的传输速率必须和面板的像素时序匹配。计算过程分两步第一步算像素时钟PixelClock。公式是PixelClock (hactive hfp hsync hbp) × (vactive vfp vsync vbp) × 刷新率第二步算DSI时钟。DDR双沿采样4 lane传输RGB88824bpp时DSIClock ≈ PixelClock × 24 ÷ lane数 ÷ 2举个实际例子。一块常见的1024×600屏设hactive1024、hfp160、hsync20、hbp160vactive600、vfp23、vsync10、vbp12刷新率60HzPixelClock ≈ (102416020160) × (600231012) × 60 ≈ 1364×645×60 ≈ 52.8MHz按4 lane、24bpp算DSIClock ≈ 52.8×24÷4÷2 ≈ 158.4MHz取整后160MHz左右就是设备树里要填的参考值。这个值不是拍脑袋写的是从时序一路算过来的如果屏幕出现横向滚动、画面撕裂多半就是porch参数和这个时钟值对不上。3.2 设备树panel节点和背光节点怎么改RK3568的设备树文件路径一般在arch/arm64/boot/dts/rockchip/rk3568.dtsi和具体的板级dts里屏幕部分需要在你的板级dts里新增或者修改panel节点。以常见的st7701s屏为例我在板级dts里写的结构大概是这样的dsi0 { status okay; rockchip,lane-rate 420; panel0 { compatible st7701s,default; reg 0; enable-gpios gpio3 RK_PC5 GPIO_ACTIVE_HIGH; reset-gpios gpio3 RK_PC6 GPIO_ACTIVE_LOW; backlight backlight; pinctrl-names default; pinctrl-0 lcd_panel_gpio; port { panel_in_dsi: endpoint { remote-endpoint dsi0_out_panel; }; }; }; }; dsi0_out_panel { remote-endpoint panel_in_dsi; };背光节点常见是PWM背光pwm0 { status okay; }; backlight { status okay; pwms pwm0 0 5000000 0; brightness-levels 0 255; default-brightness-level 200; };这里有几个关键点compatible必须和你内核里panel驱动支持的字符串完全一致st7701s的驱动在drivers/gpu/drm/panel/panel-rocktech-st7701s.c这类文件里如果内核没编进这个驱动屏永远点不亮。enable-gpios和reset-gpios的极性一定要确认有的屏是复位高有效有的是低有效搞反了就是白屏或者不亮。背光节点里pwms的周期要和PWM驱动对应填错了背光会闪烁或者干脆不亮。3.3 屏不亮、花屏、跑偏对照这份排查清单我自己调试MIPI屏时遇到的问题基本都能归到下面几类列成表格方便对照现象可能原因检查方法完全不亮背光也不亮背光电源没供上、enable引脚没拉高万用表量背光LED电压检查enable-gpios白屏但背光已经亮了复位信号没拉起来、初始化序列没有正确执行示波器看RESX波形确认reset-gpios电平极性花屏、颜色错乱lane数量配错、lane极性反了核对设备树lane-number、lane-polarity画面整体偏移、横向条纹hbp/hfp等porch参数不对从屏厂规格书核对时序参数画面闪烁、偶尔黑一下DSI时钟频率不稳、排线干扰示波器测DSI Clock差分对对比频率还有一个特别隐蔽的问题MIPI屏的初始化序列也就是厂商给的寄存器配置数组必须在panel驱动里完整填入。这个序列是屏厂测试过的里面包含伽马校正、电源管理、显示模式的设置任何一个字节错位都可能导致白屏或者显示异常。如果你拿到的屏给的是MCU代码或者瑞芯微规格的初始化代码要手动转成panel驱动里的init数组格式这一步只能细心没有捷径。4. 从MIPI切到HDMI把显示输出整体换过去4.1 我为什么弃用MIPI屏转投HDMIMIPI屏适配到能点亮之后我本想着可以一路调下去了结果排线在桌面环境下问题不断。FFC排线本身是低电压差分信号对干扰非常敏感周围一有电源适配器靠近画面就出现水波纹严重的直接黑屏几秒又恢复。后来我拿示波器量了DSI信号发现眼图质量已经不太行了但根源不在主控而是我用的排线太长、屏端还没有良好的屏蔽接地。这种情况下继续调MIPI屏效率太低我干脆切换思路把系统显示输出改到HDMI用普通显示器做验证。HDMI的好处是信号完整性有明确的标准线材质量可靠电脑显示器支持的时序范围宽而且有EDID机制显示器会把支持的分辨率和刷新率告诉主控不用像MIPI屏那样手填一整套时序参数。这样一来我可以先确认系统、驱动、VOP通路都正常回头再专心对付MIPI屏的物理信号问题。4.2 修改设备树关掉DSI、打开HDMIRK3568的设备树里显示通路是通过route节点来管理的。vopb和vopl是两个显示控制器vopb算主力支持到4K一般接HDMIvopl是副控制器最高2K一般接MIPI DSI或者eDP。我最终在dts里这样改route_dsi0 { status disabled; }; dsi0 { status disabled; }; route_hdmi { status okay; }; hdmi { status okay; };这样做的效果是整个DSI显示链路被关掉HDMI接管显示输出。如果内核启用了多显示模式理论上DSI和HDMI可以同时开但调试阶段强烈建议只保留一个输出否则两个显示设备对VOP的分配可能出现奇怪的现象比如HDMI有声音没画面或者MIPI屏带走了主显示导致HDMI黑屏。这里还要注意一个点uboot阶段和内核阶段的设备树不是同一个东西。开机Logo的输出由uboot里打包的dts决定如果uboot没配HDMI输出你可能在显示器上全程看不到Logo直到内核起来之后画面才出现。所以如果你的目标是完整显示uboot和内核的设备树都要改。我这次是只关注内核驱动就先改了内核dts效果是开机Logo不显示但内核起来后HDMI输出正常。4.3 HDMI接口信号与示波器实测要点HDMI Type-A接口一共有19个引脚调试时重点关注这几个信号pin 1、3、4、6、7、9TMDS Data0/1/2差分对视频数据就走这pin 10、12TMDS Clock差分对视频的像素时钟对应的差分时钟pin 15、16DDC通道SCL和SDA用来读显示器的EDIDpin 185V电源由源端提供pin 19HPD热插拔检测源端通过这个引脚判断显示器是否接入排查HDMI无信号的思路很直接。先用万用表量pin18有没有5V再量pin19有没有HPD信号。HPD没有电平整定说明设备没通知显示器“有信号源接入”这时候要回头查设备树里hdmi节点的hpd相关配置。HPD正常但画面依然没有就看DDC通道能不能读到EDID。显示器识别不到分辨率十有八九是EDID读取失败可以在内核日志里查drm的报错信息。示波器测HDMI信号时最好用差分探头或者用两个单端探头做减法。TMDS差分对阻抗是100Ω探头会加载需要注意衰减。一般情况下只要看到TMDS Clock差分对上有稳定的时钟波形基本就能确认主控已经输出信号了接下来再排查分辨率协商和显示器的输入源选择。这些步骤说起来简单实际调试时一条一条验证能省下大量试错时间。5. 刷机与显示调试中的常见坑weston、EDID、烧砖自救5.1 跑Ubuntu时被weston抢占HDMI输出怎么办刷完固件、接上HDMI显示器结果发现桌面没有出现或者自己写的测试程序打不开显示设备这时候很有可能是weston在捣乱。很多RK3568的Ubuntu固件默认用的是Wayland合成器weston。weston作为DRM master会直接占用显卡的显示输出你的程序如果直接打开/dev/dri/card0去画画面就会遇到权限问题或者EBUSY。我调试的时候习惯先把weston停掉让HDMI输出裸奔给测试程序用。停weston的方法要看固件把它装成了什么形式# 如果weston是systemd服务 sudo systemctl stop weston sudo systemctl disable weston # 如果weston是自动启动脚本拉起来的 sudo systemctl stop weston* sudo systemctl disable weston*如果只是临时测试不用disablestop一次就行重启板子weston还会自动拉起来不影响后续恢复。这个坑在RK3568、RK3576上都一样不只是某一款固件特有的问题。5.2 显示分辨率异常EDID和CEA-861在作怪HDMI没有像MIPI屏那样的手填时序理论上显示器插上就能协商出合适的分辨率但实际中“黑屏”“花屏”“不支持该分辨率”还是会遇到问题往往出在EDID协商和CEA-861扩展块上。EDID是显示器内部存储的一组数据相当于显示器的“自述”里面写了支持的分辨率、刷新率、物理尺寸、厂商信息等。HDMI源端通过DDC通道读取EDID然后按照里面的信息选择输出模式。CEA-861扩展块是EDID的一部分里面定义了各种视频格式对应的VIC码比如1080P60Hz对应VIC 164K30Hz对应VIC 1。如果显示器的EDID里没有声明某个分辨率源端就不会输出这个分辨率强行输出可能导致黑屏。排查方法很简单# 查看HDMI连接状态 cat /sys/class/drm/card0-HDMI-A-1/status # 查看当前支持的模式列表 cat /sys/class/drm/card0-HDMI-A-1/modes # 查看内核里HDMI相关日志 dmesg | grep -i hdmi如果模式列表里没有你预想的分辨率先确认显示器本身支持这个分辨率再用一个已知好的显示器和线材替换测试排除EDID读取异常。调试阶段实在不行可以在内核启动参数里加drm.edid_firmwareHDMI-A-1:edid/1920x1080.bin强制加载EDID固件但这个一般是应急方案正式产品还是要靠正常协商。5.3 从SD卡启动与NFS挂载Ubuntu根文件系统刷机不一定每次都要动EMMC里的固件很多调试场景用SD卡或者网络挂载根文件系统更灵活。RK3568是支持从SD卡启动的把update.img烧到SD卡上按住板子对应的启动拨码开关就能从SD卡启动系统这样EMMC里的系统可以原封不动多系统调试很方便。SD卡启动的固件制作比EMMC整包烧写多一步需要用RKDevTool的SD卡启动制作功能或者专用的sd固件工具把update.img解包后按SD卡的分区布局写入。烧完插上SD卡板卡上电后会自动识别SD卡里的bootloader并启动。更进阶的玩法是NFS挂载根文件系统。我在调试驱动时经常这么干开发板从SD卡启动一个最小的内核rootfs通过网络挂载到电脑上的Ubuntu目录这样改rootfs里的东西不用重新烧写直接在电脑端改完保存就能生效。需要注意内核要开NFS相关配置uboot启动参数里加上root/dev/nfs nfsroot电脑IP:/srv/nfs/rootfs同时还要保证开发板和电脑在同一个网段。5.4 变砖了别慌Maskrom救砖完整流程最后说一个大家迟早会遇到的问题变砖。RK3568变砖的常见场景是uboot刷坏了比如刷了一个不匹配的loader或者uboot开机一直黑屏按键进不了Loader模式。这时候别急着扔板子Maskrom救砖能救回来。完整流程是这样第一步断电找出板子上的Maskrom进入方式一般是短接EMMC的CLK引脚或者按住专门的Maskrom按键。第二步接USB线到电脑上电确认RKDevTool识别到Maskrom设备。第三步先烧loader选择与你当前固件版本匹配的loader文件单独执行“烧写分区”或者用“升级固件”页面加载原厂update.img。第四步loader烧好后紧接着烧parameter、uboot、boot、rootfs或者直接整包升级。第五步等待全部烧写完成断电重新上电验证系统是否恢复。这里最核心的一点就是loader必须选对。不同版本loader对应不同DDR初始化逻辑用错版本会出现烧写正常但上电后依旧黑屏的现象。我个人的习惯是拿到一块新板子时先把原厂完整的update.img备份到电脑里然后拆包把里面的loader和parameter单独存一份后面救砖直接用这一套基本不会出问题。写在最后的几点个人体会这轮从MIPI屏到HDMI输出的折腾最让我意外的不是RK3568本身的问题而是很多故障都出在“物理连接”和“环境干扰”上。信号这种东西差一点点可能就不亮但看起来又不像有什么大毛病。建议大家在遇到疑难杂症时先用排除法把线材、电源、显示器这些外围因素清干净再回到软件和设备树上面找原因。另外还想分享一个习惯每次修改设备树之前先在原dts文件里用git或者手动备份一份记录改了哪几个节点、为什么改。RK3568的设备树节点很多加上不同固件版本之间差异改乱了再想回去会非常痛苦。我自己就在改DSI和HDMI切换时来回改过几轮要是没有备份早就晕头转向了。最后再贡献一个小技巧调试显示问题时内核日志是你的好朋友开机后第一时间看dmesg里面drm、vop、hdmi这几块有没有报错很多问题其实内核已经告诉你了只是没人去看。希望这篇文章能帮你少走点弯路。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。