BIOS开发笔记 1 – 显示
前言
UEFI启动流程跑完前三阶段,UEFI环境的准备基本完成,到BDS阶段的任务就是准备引导OS。在此之前还需要使一些必要的输入输出设备工作起来,比如键盘,屏幕等,怎么让屏幕工作呢?这里有两个工作要做,一是UEFI Graphics Driver的初始化,二是平台GPU Driver的初始化。对于UEFI来说,如何去驱动GPU是未知的,因为设计的硬件都是封闭,只能由平台设计方提供相应的驱动,如Intel的GOP Driver,当然该驱动是要符合UEFI驱动模型的,这样UEFI Graphics Driver才能去调用它。
UEFI Graphics Driver与平台Graphics Driver的关系是怎样的呢?
我们可以追踪一下 EFI_GRAPHICS_OUTPUT_PROTOCOL 中 Blt() 函数实现的代码,该函数可在MdeModulePkg\Universal\Console\GraphicsOutputDxe\GraphicsOutput.c中找到原型,最终是将UEFI中需要绘制的图形数据放在一个Graphics Device 的Buffer中,GPU收到该Buffer后便转换成所配置的显示信号并输出该信号,屏幕收到信后后就可以显示了。
显示类型
显示类型是按显示接口来区分的,常见的有VGA,DVI,HDMI,DP,LVDS,MIPI等等。
为什么要设计出如此多种类的接口呢?这是各时期需求差异导致的结果。比如较早出现的VGA,分辨率只支持到1080,而后面出现的DP,HDMI则可以支持更高的分辨率和传输速率,而且还可以传输音频信号,这些也只是暂时的,也许到了未来,随着需求越来越大,可能还会出现功能更加强大的接口。
线路
对于集成显卡,不同平台的做法都有所不同,拿Intel带有集成显卡的CPU来说,Intel CPU的集显接口使用的是DDI(Digital Display Interface),其内部有个显示信号处理电路,如下图:
从这个DDI出来的信号可以配置成HDMI或DP,中间无需其它转换线路。看一下CPU的DDI信号:
一组DDI信号包含视频和音频信号,如果要设计成DP接口,则需要加上一组AUX(Auxiliary)辅助信号,AUX的用途包括读取扩展显示识别数据(EDID),以确保DP信号的正确传输、读取显示器所支持的DP接口的信息,如主要通道的数量和DP信号的传输速率、进行各种显示组态暂存器的设定、读取显示器状态暂存器。此外,HPD热插拔检测信号也是需要的。
若设计成HDMI接口,需要把DP中用到的AUX换成DDC(Digital Display Channel),也可以说是一组I2C信号,它是由PCH出来的,作用与AUX也是类似,用于与屏幕之间的数据通信,如获取屏幕EDID数据,屏幕亮度控制等。下图是一个DP和HDMI一体的接口,展示了两种信号的设计方案。
那要设计一个VGA接口的线路又是怎样的呢?DDI出来的信号是DP或HDMI,要变成VGA信号则需要经过转换,转换的芯片很多,下图是使用IT6516B将DP转为VGA的线路:
要使VGA能正常使用,配置VBIOS或VBT的时候需要将该DDI信号配置成DP信号。
再看下EDP接口,EDP接口常用于笔记本的屏幕显示,Intel的CPU是有EDP信号出来的,所以也不需要转换可以直接拉出来使用。EDP的信号如下:
eDP屏有两个信号需要注意,PWM跟Backlight Enable Pin,前者用于控制背光,后者是背光使能,背光使能需要Enable,否则会黑屏。大部分情况下这俩个信号是接到桥片或CPU上的,但也有的平台可能没有PWM或其它原因,会接到EC,由EC去控制屏幕背光。
还有一种特别为Mobile设备(手机,平板)制定的接口MIPI,MIPI接口可以作为摄像头接口CSI、显示接口DSI、射频接口DigRF、麦克风/喇叭接口SLIMbus等,这里只讨论显示接口DSI。从线路信号来看,MIPI DSI的跟EDP很相似,但是驱动方式有些差异。MIPI显示屏的初始化是需要一组命令来完成的。命令主要有几个部分:
1.上电时序
2.背光开关
3.Reset控制
4.VDD控制
由于MIPI DSI比较特殊,是否能够使用还是需要查阅平台手册的。
-------
显示部分到处结束,后续再写写如何配置VBT,BIOS笔记序列是讨论原理性的文章。。
版权声明:
作者:bin
链接:https://ay123.net/mystudy/1127/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
kvm
bin@kvm