LVGL显示休眠与恢复:协调背光、面板电源与界面刷新

背光、面板和界面是不同状态

设备空闲后关闭背光,唤醒时背光亮了,画面却空白或停留在旧帧。一个“显示已休眠”布尔变量掩盖了多个独立状态:照明、面板控制器、总线或显示引擎、LVGL刷新,以及业务数据。本文采用LVGL 9.2接口并按v9.2.2核对,面板命令和电气时序必须来自实际控制器与板卡文档。

可以定义活动、收敛、休眠、恢复和等待首帧几个状态。每个状态写清谁可以发起传输,以及什么事件允许继续。成功设置背光GPIO,不证明面板已经退出睡眠,也不证明显存里有有效画面。唤醒完成应由协调条件决定,不能只靠任意延时。

三条泳道协调面板恢复、刷新完成和背光开启;有效首帧完成前保持背光关闭。
原创工程概念图,表达设计依赖,不代表已经实测的实现。

先决定休眠期间保留什么

仅显示休眠时,业务模型、LVGL计时器和唤醒输入可能继续工作;更深的系统睡眠则可能停止时钟或切断面板电源,这是不同契约。如果面板内容保留,完成规定唤醒步骤后恢复刷新可能足够;如果控制器配置或RAM丢失,就必须重新初始化并重绘。

明确动画是继续推进、暂停在当前视觉位置,还是唤醒时直接显示最新业务状态;也要决定传感器数值是否在灭屏期间继续更新。系统睡眠让时基停止时,需要明确时间补偿策略,否则动画和空闲判断可能与真实经过时间不一致。不要让这些选择取决于GUI任务偶然延迟了多久。

传输断电之前,先让刷新收敛

LVGL 9.2显示接口要求驱动正确完成flush。lv_display_flush_ready()必须对应所选驱动路径实际已经结束的传输所有权,不能在DMA仍读取缓冲区时,仅为解除等待就提前报告完成。反过来,若先关闭本应完成传输的中断或时钟,也可能使LVGL永远等待。

建议休眠顺序是:阻止新的显示传输,按产品规则熄灭照明,等待或安全取消已有硬件活动,再执行控制器睡眠及电源步骤。阻止新传输与同步旧传输必须配合。暂停后续刷新并不会完成已经发出的DMA,也不能在等待时阻塞唯一能够处理完成事件的上下文。

只暂停真正需要暂停的刷新源

v9.2.2显示接口提供lv_display_get_refr_timer()。若端口使用该计时器,可把lv_timer_pause()和lv_timer_resume()纳入电源状态协议,接口定义见固定版本计时器头文件。调用前检查有效指针,并确认端口没有替换成自己的事件驱动刷新机制。

v9.2.2默认的LV_EVENT_REFR_REQUEST处理函数会重新恢复显示刷新计时器,因此后续界面更新导致的失效请求,可能撤销之前的一次暂停。暂停计时器只能辅助调度,不能作为持续可靠的休眠门禁。必须由电源状态控制传输准入,并明确休眠期间flush如何完成、唤醒时如何补画,依据见固定版本显示实现。

停止整个lv_timer_handler()循环影响更广,可能同时停止输入处理、动画和应用计时器。特别是需要触摸唤醒时,要确认这种行为确实符合设计。若驱动在休眠状态丢弃flush,也必须规定完成通知和唤醒重绘策略。默默丢像素却报告成功,会让LVGL不知道面板稍后需要完整恢复。

先恢复硬件,再展示首个有效帧

保守的恢复流程包括:恢复电源和时钟,发送控制器要求的复位或唤醒命令,等待规定就绪条件,恢复配置和方向,再重新开放有效传输路径。之后从当前业务状态请求必要重绘。若面板内容已经丢失,应重建整个显示内容,不能认为原有脏矩形仍足以描述需要发送的像素。

对于常规不透明屏幕,对活动屏幕调用lv_obj_invalidate()可以成为重绘请求的一部分;端口特有图层或合成方式可能还需额外处理。发出重绘请求不证明首帧已经到达面板,应等待相应传输或扫描输出完成,再按视觉策略打开背光。不同控制器不能共用未经核实的固定毫秒延时。

处理唤醒手势和失败切换

规定第一次触摸只负责唤醒,还是同时激活下方控件。如果只负责唤醒,应一致消费完整手势,包括释放事件,避免界面收到不匹配的按下和抬起。触摸控制器供电与中断路由也要支持所选睡眠深度。LVGL是否处理输入,与硬件是否能够检测唤醒,是两套机制。

恢复期间再次收到休眠请求,不能与尚未完成的首帧传输竞争。串行化电源切换,必要时给异步完成事件附加代次。面板不就绪或flush不完成时,需要超时及恢复路径,不能无限重试并掩盖断线或电源故障。诊断记录当前状态和失败边界,才能区分硬件唤醒失败与重绘逻辑问题。

同时验证三条时间线

建议覆盖空闲时休眠、flush期间休眠、面板断电后唤醒、快速重复循环、休眠中更新界面并请求失效、按住不放的唤醒触摸,以及恢复中再次请求休眠。共同跟踪背光变化、面板命令、传输起止和首个有效帧。逻辑分析仪或驱动跟踪可以验证顺序,截图本身不能证明缓冲区归还时机正确。

断言传输不会访问已经关闭的总线,每个接受的flush都有完成路径,首个可见画面对应当前模型。更换显示驱动或低功耗模式后重新核对顺序。本文只提供协调设计与来源检查,没有给面板上电、没有测量时序,也不作电流或节能效果声明。

  • 电源状态明确刷新、传输和唤醒输入的拥有者。
  • 完成机制关闭前,所有既有传输已收敛。
  • 首帧可见之前,面板状态已经恢复。
  • 唤醒手势和被打断的切换都有明确策略。

类似文章