首页/新闻资讯/正文详情

RK3399+LT9211 MIPI转LVDS屏调试实战:解决唤醒慢与条纹闪烁

发布时间:2026/9/25 8:16:23 来源:云帆数科 栏目:资讯中心
RK3399+LT9211 MIPI转LVDS屏调试实战:解决唤醒慢与条纹闪烁
搞嵌入式显示调试的人基本都跟“屏点不亮、亮得慢、画面闪”这老三样打过交道。这次的项目用的是RK3399做主控外挂一颗LT9211做MIPI转LVDS桥接芯片驱动一块工业级的10.1寸LVDS屏。本来以为只是按部就班配置一下设备树就能亮结果实际调下来唤醒慢、条纹闪烁这两个问题前前后后折腾了将近两周。这篇就把整个调试过程、根因分析、关键配置和避坑记录整理出来给正在跟RK3399LT9211或者其他MIPI转LVDS方案较劲的朋友一个参考。只要你的硬件链路里出现了“主控MIPI DSI → 转接芯片 → LVDS屏”这种结构不管是LT9211还是别的型号这篇文章里的排查思路和调试方法基本都能直接用。1. 项目背景与整体链路设计1.1 为什么是RK3399 LT9211这个组合RK3399这块主控在商显、工业HMI、自助设备里用得非常多双A72四A53的算力足够接口也齐全。但有个尴尬的地方它原生的显示输出路数多LVDS支持却很弱板级设计上往往只引出MIPI DSI或eDP。而市面上大量工业屏、工控屏仍然是LVDS接口尤其是10.1寸、15.6寸这一类经典尺寸很多项目就是“手里有一批库存LVDS屏又想换新一代主控”。两个选择摆在面前要么重新画板子换LVDS转接方案的接口要么直接用一颗桥接芯片把MIPI信号转成LVDS。前者周期太长后者改动最小所以我选了LT9211。这颗芯片是龙讯的经典桥接方案支持MIPI DSI输入、LVDS/RGB输出也支持MIPI DSI转双通道LVDS最大能带1080P60Hz正好覆盖我手头这批屏的需求。LT9211和RK3399的搭配在硬件上其实就是一条很清晰的链路RK3399的MIPI DSI 4-lane输出 → LT9211接收并解析MIPI信号 → LT9211重新打包成LVDS差分信号 → 送到屏幕的LVDS接收端。主控侧不用关心屏到底是JEIDA还是VESA格式反正这些映射关系都在LT9211寄存器里配。1.2 信号链路与电源域的搭建要点这个项目里我用了RK3399的DSI0通道4条数据lane加1条时钟lane接到LT9211的MIPI RX端。LT9211这边外接了一颗26MHz晶振作为参考时钟LVDS输出按单通道8bit配置驱动1024x600的10.1寸工业屏。电源这部分踩过坑值得单独说。LT9211内部有数字核、模拟IO、PLL等多个电源域分别是1.2V、3.3V、2.5VPLL供电单独从AVDD走。如果不把PLLVDD和IO供电分开滤波后续条纹闪烁问题会非常难查。我的做法是PLLVDD用磁珠加一级大电容再进芯片引脚AVDD和PLLVDD之间再并一个100nF高频去耦。另外要注意LT9211的I2C地址。这颗芯片的从机地址并不固定手册上默认常见是0x2D或者0x6A具体取决于外部引脚或芯片版本。我第一次i2cdetect扫设备的时候扫到了地址0x6A还以为是接了别的设备差点调错总线。调试前先用i2cdetect把总线上挂的设备扫一遍确认LT9211的实际地址这是最基础的一步。1.3 LT9211的寄存器组织结构LT9211的寄存器配置方式跟很多桥接芯片一样用“页(page)”来组织。通过往0xFF寄存器写页号切换到不同功能区块的寄存器页比如系统控制页、MIPI RX配置页、LVDS TX配置页、PLL配置页等。驱动初始化的核心工作就是把每个页里跟当前模式相关的寄存器逐项写对。实际调试的时候我建议不要一上来就抱着手册从头逐页读那样效率太低。先把驱动里现成的初始化序列跑起来确认点亮再逐个页去调有问题的参数。比如画面闪烁优先看LVDS TX配置页和PLL配置页唤醒慢优先看系统控制页和MIPI RX页。这种“先跑通再精调”的思路比从零开始啃300页datasheet靠谱得多。2. 唤醒慢的根因分析与解决2.1 唤醒慢的现象与时间量化这个项目最初的问题是系统从休眠状态唤醒后屏幕要黑屏很久才亮整体耗时甚至超过8秒。用户侧的感官就是“按一下唤醒等半天画面才出来”这在工业设备上非常掉链子。要解决这种问题第一步不是猜而是先把时间都量化出来。我在内核里临时加了一堆printk带时间戳分别记录这些节点suspend调用入口、resume调用入口、DRM CRTC开始enable、panel驱动prepare、panel驱动enable、背光PWM打开、首次刷帧完成。通过串口日志看时间差问题很快就暴露了。实测数据大概是这样的从resume入口到DRM开始恢复显示花掉了将近2秒这部分是系统组件逐步唤醒的正常开销再到panel的prepare完成又花了1秒左右然后LT9211重新初始化和PLL锁定花了80ms最后背光打开又延迟了大几百毫秒。背光和DRM调度这两块是最大的时间黑洞LT9211反而不是主要瓶颈。2.2 根因一LT9211在suspend/resume中的状态没管理好第一个真正需要动手改的根因是LT9211在suspend时没有彻底断电也没做完整复位导致resume后芯片处于一个“半清醒”的混乱状态。表现为寄存器部分丢失、PLL重新锁定时间变长、输出端偶发无时钟。我把驱动流程改成了“suspend时拉低LT9211的reset脚并关闭其IO供电resume时先上电、延迟、再拉高reset、延迟、然后重新灌全量寄存器”。这里的关键是reset后必须等待芯片内部LDO稳定我根据自己的板子实测从拉高reset到能正常响应I2C至少要等10ms以上我最终留了20ms稳妥起见。还有一个很容易忽略的坑有的驱动为了省事在resume里只恢复部分寄存器觉得“之前配过的就不用再发了”。但LT9211这类桥接芯片一旦发生电源域掉电或reset内部状态全部回到默认只恢复几个关键寄存器根本不顶用必须全量重灌。我把初始化序列封装成一个函数resume直接调用问题明显改善。2.3 根因二背光使能时机和显示输出时机没对齐第二个根因出在背光控制上。原驱动在panel enable后立即拉高背光PWM但此时LT9211可能还没完全输出稳定画面甚至还在切换分辨率或同步信号结果就是用户看到“黑屏中突然闪了一帧花屏然后才正常”。为了避开这种闪白、闪花我在背光开启之前加了延迟。这里的经验值是panel enable完成后先等LT9211的PLL锁定并输出稳定时钟再延迟100~200ms最后才开背光。我实测取120ms效果就不错既不会让用户明显感到迟钝也能完全遮住上电瞬间的错误画面。需要注意的是延迟不是越长越好唤醒速度本身就是体验指标这个值要平衡。我最终的做法是在设备树的backlight节点里把enable延迟设成了120ms同时DPMS ON流程里保证先enable显示Controller再enable背光。这套顺序调整之后唤醒到画面正常显示的时间压缩到3秒左右跟主控本身的resume开销基本持平了。2.4 设备树中影响唤醒速度的配置细节在RK3399的DSI相关设备树配置里panel节点有几个属性直接影响唤醒体验prepare-delay、enable-delay、unprepare-delay、disable-delay。这些值不是随便填的它们对应的是panel驱动在挂起和恢复流程里主动sleep的时间。我把prepare-delay设成了和LT9211初始化时间匹配的值enable-delay设成背光延迟整体链路就顺畅了。另外还要注意RK3399的“route”配置比如route_dsi它控制显示链路是否参与系统suspend的关断流程。如果route配置不对显示控制器在唤醒时重新enable的顺序会和LT9211的设定冲突。我在调试中发现只有把route_dsi的status设为okay同时DSI控制器和rootfs里的DRM驱动配合好唤醒时DSI PHY才能按预期顺序重新初始化不然LT9211就算寄存器全灌对了主控的MIPI信号也是乱的。3. 条纹闪烁问题的分析与排查3.1 先看条纹形态再决定查哪个方向唤醒慢解决之后紧接着就是条纹闪烁这个问题的迷惑性更大。我的经验是不管屏幕表现多诡异先仔细观察条纹的形态它能直接告诉你该往哪个方向排查。如果是水平方向的滚动条纹或者位置不断变化的水波纹基本可以锁定在时钟领域要么是像素时钟频率不干净要么是LVDS输出端的时钟同步有问题再不然就是电源纹波灌进了PLL。如果是竖直条纹或斜纹优先怀疑数据映射错误JEIDA和VESA格式选错、LVDS通道映射接错、bit位序不对。如果是雪花点或者像噪点一样的颗粒闪烁大概率是差分信号质量太差比如走线不等长、排线屏蔽差、端接电阻不匹配。我用这个“先定性再定量”的思路很快就排除掉了一大半可能性。条纹方向优先怀疑方向快速验证手段水平滚动/水波纹时钟抖动、PLL纹波、SSC干扰用纯色画面看是否稳定示波器看LVDS时钟波形竖直斜纹数据映射、JEIDA/VESA格式错切换寄存器映射位对比灰阶条雪花噪点差分信号质量差、排线屏蔽差换屏、换线、降速、加串阻整屏规律亮暗纹背光PWM与刷新频率干扰调背光PWM频率避开刷新率倍数3.2 关键点一JEIDA/VESA格式与通道映射LT9211在LVDS端最核心的配置就是数据映射格式。LVDS标准里有两种常见映射VESA和JEIDA它们在信号线里摆放RGB数据的位置不一样。屏幕端的LVDS接收器必须和发送端保持一致否则画面出现诡异条纹或颜色错乱。我在调试中就遇到了典型的“红色偏色细斜纹”现象一开始还以为是屏坏了后来用另一块屏测试发现正常才想到是映射格式不对。在LT9211的LVDS配置页里把映射位从默认值切换成屏幕规格要求的格式后斜纹立刻消失。这个操作在驱动里只是一个bit的事但不知道的时候能卡你半天。通道数也要注意。如果屏是8bit单通道LVDS而LT9211被配成了双通道模式画面会直接撕裂、错位反过来屏是双通道芯片只发单通道则是屏幕半边正常半边黑。这个低级错误我见过很多次排查时先确认硬件接线的link模式再确认驱动里的channel mode配置两者必须一致。3.3 关键点二电源纹波对PLL的干扰这个项目里最隐蔽的条纹来源是LT9211的PLL供电纹波。现象非常典型显示纯灰阶画面时屏幕上有缓慢流动的细横纹亮度越高的画面越明显全黑画面看不见。用示波器去量LT9211的PLLVDD引脚发现上有大约50mV左右的纹波频率在几百kHz跟DC-DC开关频率对得上。这个纹波直接耦合进PLL导致LVDS输出的像素时钟产生了周期性抖动反映到屏幕上就是横纹流动。解决手段是两招并用一是在PLL供电入口加一颗磁珠型号我用了600Ω100MHz的规格二是在磁珠后面并联一组电容10uF100nF1nF组合。这样处理后纹波降到10mV以内横纹肉眼不可见。如果你板子上已经LAYOUT完成不方便改版也可以在芯片供电引脚飞线加电容虽然不美观但至少能帮你判断问题性质。这里多说一句主控侧的DSI电源同样会影响画面。RK3399的MIPI PHY供电如果纹波大信号本身就不干净LT9211再怎么调也无济于事。排查的时候把主控端和桥接芯片端的电源都量一遍分清纹波源头到底在哪一侧能省很多时间。3.4 关键点三差分走线、屏线与SSC扩频如果是自己设计的板子LVDS差分对一定要遵循等长和差分阻抗控制100Ω差分组。但很多项目用的是现成核心板加转接板layout已经固定这时候只能从外部想办法。我这次就在LT9211输出端串了22Ω的电阻置于差分对靠近源端的位置目的是吸收反射、改善信号边缘。实测对轻微条纹有一定改善但不能治本信号质量太差时串阻反而会把眼图搞得含糊。所以这个方法只适合小幅优化不要指望它能救回来一条严重未等长的走线。屏线的影响在这个项目里也很大。最初用的40pin软排线材质偏软、屏蔽层覆盖不完整在屏线靠近电机和电源线时画面明显增加噪点闪烁。换了一根带完整屏蔽层、双绞结构的LVDS线后同样配置下画面干净很多。如果你的设备内部有强干扰源这一步几乎是必须做的。还有一个容易被忽略的点SSC扩频时钟。部分主控或桥接芯片为了降低EMI会默认开启扩频让时钟频率周期性微调。这个功能在某些对时钟敏感的LVDS屏上反而会引发闪烁。LT9211和RK3399的DSI端都可能有相关配置如果条纹表现为“画面整体轻微闪动、频率不高”可以尝试关闭SSC对比效果。我这套配置里关掉SSC后闪烁就没有了代价是EMI稍高一点但在工业设备里完全可接受。3.5 实测对比一组寄存器配置调整的效果整理一下我最后调完的寄存器配置思路具体地址因驱动版本而异只描述功能方向实际操作务必以你的datasheet为准系统控制页关闭扩频默认开启全链路PLL自动锁定。LVDS TX页映射格式切到屏幕规格要求单通道8bit通道模式选单link。MIPI RX页lane数设为4lane极性按原理图确认DSI连续时钟模式按需开启。PLL页PLL输入频率参考值设成和DSI时钟实际范围匹配避免分频系数太偏。调整前灰阶画面上有肉眼可见的横纹调整后用放大镜贴近屏幕都看不到明显闪烁色彩和灰阶层次也都正常。整个过程就是从信号源头到端接再到映射格式一层一层剥洋葱。4. 调试工具与方法论4.1 用i2c-tools直接撸寄存器是最快的验证路径调试LT9211这类I2C控制的桥接芯片我最推荐的方式不是反复编译内核、烧录固件而是直接挂载i2c-dev在shell里读写寄存器。这样改一次寄存器配置只需要几秒钟比每次都好几分钟的编译烧录快一个数量级。几个实用的指令模板# 扫描总线设备确认LT9211地址 i2cdetect -y 0 i2cdetect -y 1 i2cdetect -y 2 # 读一个寄存器注意LT9211需要先切换页码 i2cset -f -y 2 0x6a 0xff 0x01 i2cget -f -y 2 0x6a 0x10 # 写一个寄存器 i2cset -f -y 2 0x6a 0xff 0x01 i2cset -f -y 2 0x6a 0x10 0x80我这里总线的编号和地址只是示例实际要以你的硬件为准。关键是思路在用i2cset折腾完所有可疑寄存器、确认最佳配置之后再把这些值固化到内核驱动里这样提交的代码基本一次就能打对。我之前习惯改完dts就重新编译一上午只能试三四次换成这套I2C直调流程后半小时能试几十种组合效率完全不一样。如果你不会写复杂的shell循环也没关系。可以先手动i2cget/set验证个十几次找到稳定配置后写个简单的bash脚本把整个寄存器序列顺序执行一遍再把同样的寄存器序列翻译成C代码放进驱动。这个方法几乎没有理解门槛但非常实用。4.2 示波器和逻辑分析仪的联合调试软件层面把寄存器调到看似合理后最终还是得回到物理层来验证。LVDS信号本身就适合用示波器看重点测量三件事差分信号的摆幅、共模电压、以及时钟频率是否稳定。正常的LVDS差分对单端电压大约在1.2V左右差分摆幅在250mV到450mV之间。如果测出来摆幅明显偏低多半是端接电阻或链路衰减问题。时钟频率用示波器的频率计功能看如果数值在屏幕规格附近跳来跳去那说明PLL锁定不干净回过去查电源纹波。逻辑分析仪在这个项目里用在了两部分一是抓LT9211的I2C通信时序确认驱动写入的寄存器值确实到位二是抓主控的MIPI DSI时钟和数据line的活动状态确认MIPI链路是否正常进入HS模式。MIPI信号速率高普通逻辑分析仪可能采样不过来但抓HS/LP模式切换和时钟有无还是没有问题的。4.3 测试画面的选择很讲究很多人调试屏幕时习惯随便放一张照片或者桌面壁纸这是大忌。照片里内容太复杂条纹、偏色、雪花点都不容易看出来。我一直用三张标准测试图纯红、纯绿、纯蓝另有灰阶渐变图。纯色图能快速暴露数据映射错误和像素级异常灰阶渐变图对时钟抖动类问题最敏感。在RK3399平台上可以通过weston或直接写framebuffer来输出测试画面。简单的办法是用Linux的fh可以从文件读入原始RGB数据并写入/dev/fb0验证。也可以用weston跑一个GTK全屏窗口用程序填充纯色。实测下来纯色画面下条纹是否消失跟寄存器调整有非常直接的对应关系推荐大家都养成这个习惯。5. 常见问题速查表与避坑实录5.1 问题速查表症状常见原因排查/解决手段唤醒后花屏几秒再正常LT9211未全量重灌或时序不对resume时整颗复位并全量初始化唤醒很久才亮背光使能太晚/DRM恢复慢打印时间戳定位调整enable延迟水平横纹流动PLL供电纹波大磁珠多级电容滤波闪烁但有完整图像映射格式错或通道不匹配确认JEIDA/VESA、单双通道雪花噪点严重差分信号质量差换屏蔽线、加串阻、检查端接背光亮但完全无图LVDS时钟没输出示波器量时钟线检查PLL锁定颜色偏色数据映射位配置错切换映射格式对比5.2 换屏验证永远不要跳过的基础操作在LT9211上折腾了半天之后我最想强调的第一条经验是遇到任何显示异常先把怀疑对象从桥接芯片切换到屏本身。我手头备了一块接口完全一致、但来源可靠的LVDS屏每次遇到诡异现象先换上它看一眼。如果问题依旧那基本排除了屏本体故障专心查LT9211和主控链路如果问题消失那就回去翻屏的规格书确认它的LVDS格式、通道数、时序参数是不是和配置匹配。这块屏在调试过程中帮我至少省了两天时间强烈建议你也准备一块“标准屏”等于给自己的系统留了锚点。5.3 I2C地址冲突和多总线踩坑还有一个非常容易踩的坑就是总线上挂了多个I2C设备地址发生冲突。LT9211地址不唯一有的版本还允许通过外部引脚修改地址。如果你的核心板上同时挂了其他I2C设备刚好和LT9211撞了地址表现就是寄存器读写时而成功时而失败画面也会随机花掉。排查方法就是一开始把总线上所有设备挨个扫一遍记录每个地址对应什么设备。如果发现冲突可以调整设备树里I2C的使能顺序或者通过外部电阻修改LT9211的地址引脚。这个工作看起来不起眼但能避免后面一连串莫名其妙的问题。5.4 不要把初始化全部塞给内核最后一条经验是系统层面的如果产品对开机速度和唤醒速度都有要求尽量不要把LT9211的初始化完全依赖内核DRM驱动的加载流程。内核从启动到DRM probe再到panel enable中间要经过文件系统挂载、服务启动等很多步骤时间不可控。更稳妥的做法是在uboot阶段就把LT9211初始化好让屏在bootloader里就能点亮然后内核启动后只需要做最小配置保持输出不中断。这样开机到出画面的时间可以压缩到非常短。我在后续版本里就是把LT9211初始化脚本移植到了uboot效果立竿见影。前提是uboot里I2C驱动和延迟函数要可用RK3399在这方面支持不错。写在最后的一点体会整个项目调下来最深的感受是这类“主控桥接芯片LVDS屏”的调试表面上看是寄存器配置问题本质上是时序和信号质量问题。唤醒慢先查时序先后和状态管理条纹闪烁先量波形、看纹波、关SSC、换线换屏一步步缩小范围。不要迷信某个寄存器的“经验值”每一块屏、每一块板子的情况都不一样只有掌握排查方法才能以不变应万变。如果后续你还遇到低温环境下显示异常、或者长时间运行后画面劣化思路也是一样的从供电、时序、信号完整性三个维度去查基本不会偏。这套方法论换个桥接芯片型号照样适用。

相关推荐

资源收藏总吃灰?三步法把网站清单整理成高效工具库
资源收藏总吃灰?三步法把网站清单整理成高效工具库

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 8:16:23

STM32控制AD5522实战:SPI时序与电源管理避坑指南
STM32控制AD5522实战:SPI时序与电源管理避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 8:16:17

标准类文章写作规范与技术要点解析
标准类文章写作规范与技术要点解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 8:16:11

多目标点击率预测实战:七种用户行为建模与shared-bottom方案
多目标点击率预测实战:七种用户行为建模与shared-bottom方案

简介:面向微信视频号场景下的用户互动行为预测,这份2021年微信大数据挑战赛多目标预测方案聚焦读评论、点赞、点击头像、收藏、转发、发表评论、关注七种行为,构建基于用户行为数据的点击率预测模型,适合备赛学生、推荐系统学习者… · 2026/9/25 8:52:55

ISO 13485:2016设计开发程序落地指南:从标准条款到飞检证据链
ISO 13485:2016设计开发程序落地指南:从标准条款到飞检证据链

简介:本资源是一份严格依据ISO 13485:2016标准编制的《产品设计与开发控制程序》实务文件,面向医疗器械企业质量管理人员、研发工程师及体系内审员,解决设计开发流程不规范、职责不清、跨部门协作低效等常见合规痛点。文件为单页PDF格式&… · 2026/9/25 8:52:55

声光效应与布喇格衍射:从晶体张量到声光调制器选型
声光效应与布喇格衍射:从晶体张量到声光调制器选型

简介:这份关于晶体光波传播的课程演示文稿,以北京理工大学《导波光学基础》教学内容为蓝本,面向光电、光学工程及相关专业学生与科研人员,系统梳理了光波在晶体中传播的核心概念与关键公式。资源包为单个PPT文件,大小约… · 2026/9/25 8:52:43

Atlas:面向 macOS/Rust 开发者的运行时快照与协作基础设施
Atlas:面向 macOS/Rust 开发者的运行时快照与协作基础设施

1. 项目概述:Atlas 不是“地图集”,而是一套面向现代开发者的开源协作基础设施最近在 Rust 社区和 macOS 开发者圈子里,“atlas”这个词频繁出现在技术讨论、CI/CD 配置片段、本地开发环境脚本甚至团队内部文档里。它既不是地理信息系统里的传… · 2026/9/25 8:52:43

华为IPD与ISO9000融合的研发质量管理方案:从流程框架到落地实践
华为IPD与ISO9000融合的研发质量管理方案:从流程框架到落地实践

简介:本资源为基于华为IPD与质量管理体系融合的研发质量管理方案PPT,面向研发管理者、质量工程师及产品经理,帮助理解IPD主业务流框架与ISO9000质量管理体系的结合路径。内容涵盖IPD核心思想、产品实现流程、管理职责、资源管理、度量分析与改… · 2026/9/25 8:52:37

潮汐表原理与应用:从海洋动力学到渔业实践
潮汐表原理与应用:从海洋动力学到渔业实践

1. 潮汐表查询的核心价值与应用场景潮汐表对于沿海地区的渔民、航海人员、海洋工程从业者以及海钓爱好者而言,就像农民手中的农历节气表一样重要。以乳山口这个典型的黄海海域为例,这里每天会有两次涨潮和两次落潮,潮差能达到3-4米。掌握精确… · 2026/9/25 8:52:30

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码