




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Homlet 显示周景荣2013.11.29Homlet 显示Homlet的显示流程HDMI常见问题以及定位和分析方法TV常见问题以及定位和分析方法Homlet的显示流程boot 阶段kernel阶段android阶段Boot阶段lichee/boot/boot1/driver/drv_de_hdmi DE、HDMI、LCD驱动所在的目录。lichee/boot/boot1/apps/Boot_Android/Board/Board.c 加载驱动drv_hdmi.drv、打开设备。 mon/ui/display_interface/display_interface.cDe_OpenDevic
2、e函数获取配置选项、检测HDMI、TV热插拔状态、配置输出。探测优先级:HDMICVBSVGAYPbPr。 mon/ui/ui.c加载logo图片。Boot阶段A31/A31Slichee/brandy/u-boot-2011.09/drivers/video_sunxi DE、HDMI、LCD驱动所在的目录。lichee/brandy/u-boot-2011.09/arch/arm/lib/board.cboard_init_r函数初始化显示驱动、打开设备。lichee/brandy/u-boot-2011.09/board/sunxi/de.cboard_display_device_op
3、en函数获取boot_disp配置选项、检测HDMI热插拔状态、配置输出。 mon/cmd_sunxi_bmp.csunxi_bmp_display函数加载logo图片。Kernel阶段显示初始化Kernel阶段显示部分主要是显示驱动模块的加载,完成disp、framebuffer、LCD、HDMI设备节点的初始化。显示引擎初始化lcd_module_init:LCD模块加载lcd_initlcd_initDRV_DISP_InitFb_Init(0):0表示来自LCD驱动模块的调用Fb_Init(0)register_framebufferparser_disp_init_para:解析di
4、sp_init配置参数returnhdmi_module_init:HDMI模块加载hdmi_probeHdmi_initFb_Init(1) :1表示来自HDMI驱动模块的调用Fb_Init(1)BSP_disp_hdmi_set_modeBSP_disp_hdmi_openHDMI模块初始化Android阶段Android阶段显示部分主要介绍HDMI、TV的热插拔检测和切换加载第二个logosystem/core/init/init.cconsole_init_action 函数调用下面两个接口init_initdisplay:初始化设备load_argb8888_image:加载logo
5、其中,接口init_initdisplay定义于system/core/init/init_disp.c接口load_argb8888_image定义于system/core/init/logo.cinit_disp热插拔检测system/core/init/init_disp.cinit_initdisplay函数sleep(1)hdmistatus = init_dispgethdmistatus();if (hdmistatus ) init_swtichdisplay:HDMItvstatus = init_dispgettvdacstatus();case DISP_TV_CVBS
6、init_swtichdisplay:CVBScase DISP_TV_YPBPR init_swtichdisplay:VGA或者YPbPr启动动画时的热插拔检测A10S、A20 /android/server/SystemServer.javanew DisplayManagerAw();displayManager.getHdmiHotPlugStatus()displayManager.getTvHotPlugStatus();最后根据获取到的HDMI、TV热插拔状态按照优先级(HDMICVBSVGAYPbPr)和设置中的值,得出最后的设备类型和设备的输出模式并写入文件/data/di
7、splaysetmode。A31/A31S /android/server/display/DisplayManagerService.java获取HDMI的swith状态,如果发现HDMI热插拔状态改变则调用接口notifyDisplayDevicePlugedChangedframeworks/base/core/java/android/hardware/display/DisplayManagerPolicy.java接口notifyDisplayDevicePlugedChanged调用makeDisplaySwitch,然后将最终要输出的设备类型保存在属性“dev.disp_typ
8、e“,输出模式保存在属性”dev.disp_mode”。如果正在运行启动动画,那么在显示结束后由surfaceflinger服务读取这两个属性。如果系统启动已经完成,则调用DisplayManager 中定义的接口“setDisplayOutput”完成输出模式的设置。同样运行中的HDMI热插拔控制也是由这些接口完成。启动动画完成时的显示设置frameworks/native/services/surfaceflinger/SurfaceFlinger.cppA10S/A20获取设备类型和输出模式bootFinished方法读入/data/displaysetmode中的设备类型和输出模式设置
9、设备类型和输出模式setDisplayProp(DISPLAY_CMD_SETDISPPARA,0,outtype,outformat);设置UI图层的工作模式setDisplayProp(DISPLAY_CMD_SETDISPMODE,DISPLAY_MODE_SINGLE_VAR_GPU,0,0);A31/A31S获取设备类型和输出模式bootFinished方法获取属性“dev.disp_type”和dev.disp_mode设置设备类型和输出模式由于A31/A31S不使用GPU进行缩放,而是使用显示引擎进行缩放,所以不设置DISPLAY_MODE_SINGLE_VAR_GPU模式set
10、DisplayParameter(getBuiltInDisplay(0), DISPLAY_CMD_SETOUTPUTMODE, 0, type , mode);运行中的热插拔检测A10/A10S、A20 /android/server/DisplayManagerServiceAw.javaDisplayThread每隔500ms运行一次检测HDMI热插拔状态是否有变化nativeGetHdmiHotPlug();mService.setHdmiHotplugStatussendHdmiIntent();检测TV热插拔状态是否有变化nativeGetTvDacHotPlug();mServ
11、ice.settvHotplugStatussendTvDacIntent();A31/A31SA31/A31S获取HDMI热插拔状态不再使用轮询的方法,而是使用switch通知机制运行中的热插拔控制A10/A10S、A20 /android/systemui/statusbar/policy/DisplayController.javanew HomletHotPlug检测到插入设备,调用以下相应的接口onHdmiPlugInonTvDacCVBSPlugInonTvDacVGAPlugInonTvDacYPBPRPlugIn检测到拔出设备,调用以下相应的接口onHdmiPlugOutonT
12、vDacCVBSPlugOutonTvDacVGAPlugOutonTvDacYPBPRPlugOut切换输出接口:switchDisplayOutputA31/A31Sframeworks/base/core/java/android/hardware/display/DisplayManagerPolicy.java检测到插入或者拔出设备调用的接口:notifyDisplayDevicePlugedChanged切换输出接口:makeDisplaySwitch设置中的显示部分A10/A10S、A20 /android/settingsA31/A31S /android/settings亮度
13、A10/A10S:BrightnessPreference.javaA20 、A31/A31S: TVBrightnessPreference.java对比度ContrastPreference.java饱和度SaturationPreference.java屏幕切边A10/A10S、A20:DisplayTrimmingPreference.javaA31/A31S:DisplayPercentPreference.java显示输出模式DisplaySettings.javaHDMI常见问题以及定位和分析方法2022/9/1HDMI/DVI相关HDMIHDMI(High Definition
14、 Multimedia Interface)高清晰度多媒体接口,是一种数字化视频/音频接口技术,可以同时传送音频和视频信号(色彩空间为YUV或者RGB)。DVIDVI(Digital Visual Interface),即数字视频接口。只能传输数字信号(色彩空间为RGB),不能传输音频信号。HPDHPD(Hot lug etection)热插拔检测。当主机上的显卡检测到HDMI/DVI接口HPD引脚电压大于2V时(HPD上拉供电3.3V),判断为显示器通过HDMI/DVI接口与主机连接;当检测到HPD引脚电压小于0.8V时,则判断为显示器与主机之间的HDMI/DVI连接已经断开。DDCDDC(
15、Display Data Channel)即显示器数据通道。DDC是一个I2C通道,是主机用于访问显示器存储器以获取显示器中EEPROM中的EDID格式数据,确定显示器的显示属性(如分辨率、纵横比等)信息的数据通道。EDIDEDID(Extended Display Identification Data)扩展显示标识数据,是一种VESA 标准数据格式,其中包含有关监视器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串。TMDSTMDS(Transition Minimized Differential Signaling,最小化传
16、输差分信号)是一种微分信号机制,可以将像素数据编码,并通过串行连接传递。主控端产生的数字信号由发送器按照TMDS协议编码后通过TMDS通道发送给接收器,经过解码送给数字显示设备。CECCEC(Consumer Electronics Control)消费电子控制,是建立在HDMI上的一种通信协议。如果通过HDMI连接的设备都支持CEC协议,就可以通过控制只其中一台设备,实现同时控制其他设备。HDCPHDCP(High -bandwidth Digital Content Protection)高带宽数字内容保护。HDCP技术的出现是为了保证HDMI/DVI传输的高清晰信号不会被非法录制,当用户
17、进行非法复制时,该技术会进行干扰,降低复制出来的影像的质量,从而对内容进行保护。HDMI检测不到1.查看内核log打印从内核log中找到 system/core/init/init_disp.c文件init_initdisplay函数检测HDMI热插拔状态后的打印,看获取回来的值,1:检测到HDMI插入,0:检测不到HDMI插入。比如A10/A10S/A20内核启动打印“init: william hdmistatus = 1!”A31/A31S内核启动打印“init: HDMI status = 1, try 1 times!TV status = 0”2.查看android log打印A1
18、0/A10S/A20: /android/server/SystemServer.java中的HDMI、TV热插拔检测会打印出相关的状态信息。 比如“D/SystemServer( 1997): HDMI connect status = true, av connnect status = false, YPbPr connect status = false”A31/A31S: /android/server/display/DisplayManagerService.java有检测到HDMI插拔状态的打印,比如“D/DisplayManagerService( 2049): setHdm
19、iPlugged, plugged = true”3.检查硬件如果以上两处打印都没有探测到HDMI的插入状态,那么就要从硬件方面去检查了。确保HDMI线连接稳定,电视信号源切换到HDMI通道。用万用表量HPD引脚的电平,确保在2V以上。HDMI检测HDMI没有输出确保HDMI检测到,并且显示通道已经切换到HDMI通道。A10/A10S、A20: /android/systemui/statusbar/policy/DisplayController.java中的接收机制接收到HDMI插入信号后会关闭当前正在显示的设备并将显示切换到HDMI通道,最终通过device目录下的display.cpp
20、 disp_setmode方法调用dev/disp节点的ioctl命令DISP_CMD_HDMI_SET_MODE和DISP_CMD_HDMI_ON,完成HDMI输出模式的切换和HDMI设备的打开。如果输出设备是HDMI并且输出模式也没有改变,就不会再次进行设置。执行adb logcat -s display能看到相关的打印。A31/A31S: /android/server/display/DisplayManagerService.java检测到HDMI插入后会调用frameworks/base/core/java/android/hardware/display/DisplayManag
21、erPolicy.java中的notifyDisplayDevicePlugedChanged和makeDisplaySwitch接口将显示切换到HDMI。A31/A31S显示硬件抽象层不开源,只提供相关的动态库。确保HDMI输出设置流程已经执行完成,详细见下图。HDMI没有输出HDMI驱动配置流程2022/9/1设置中将HDMI输出模式设置为1080P或者480P的某个模式,下次开机系统起来后都设置为720P 60HZ可能原因是某个电视的EDID读取不到。可以执行adb shellecho 1 /sys/class/hdmi/hdmi/attr/debugcat /proc/kmsg然后拔掉
22、HDMI线,再插上,看打印出来的log能否正确读到EDID信息。如果没有/sys/class/hdmi/hdmi/attr/debug属性,需要将HDMI驱动中的打印控制宏打开,编译再烧录。HDMI读取不到EDID原因是DDC通信异常,比如SDA、SCL上拉电阻的5V供电没有,或者电视的EDID模块已经损坏,而DDC驱动兼容性方面的问题可能性很小。HDMI切换到1080P后没有显示,而720P显示正常可能原因是该电视不支持HDMI 1080P模式,从电视读取到的EDID信息中可以判断该电视是否支持HDMI 1080P显示。HDMI EDID相关配置选项中的HDMI配置;-;hdmi confi
23、guration;-hdmi_parahdmi_used = 1HDMI/DVI兼容性输出A20及A31源代码中已经有HDMI/DVI兼容性的代码,需要兼容DVI只需要在配置文件sys_config.fex 加下面一行配置。A31:hdmi_para配置项下面加: patibility = 1A20:disp_init配置项下面加: patibility = 1HDMI配置选项debug寄存器读写操作读写一个寄存器adb shellcd /sys/class/misc/sunxi-reg/rw A10/A10S 需要执行insmod /system/vendor/modules/sunxi-r
24、eg.ko或者insmod /system/vendor/modules/sunxi-dbgreg.kocd /sys/class/misc/sunxi-reg/rw A10/A10S:读寄存器TVE_008:echo f1c0a008 address;echo 1 size;cat value写寄存器TVE_008:echo f1c0a008 address;echo 1 size;echo xxx value(xxx是要写进寄存器的值)A20、A31/A31S:读寄存器TVE_008:echo f1c0a008 dump;cat dump写寄存器TVE_008:echo f1c0a008
25、xxx write读取一段寄存器A10/A10S:echo f1c0a008 address;echo xxx size;cat value (xxx是要读取寄存器的个数)A20、A31/A31S:cd /sys/class/sunxi_dump echo f1e609c0,f1e609fc dump;cat dump (读取地址f1e609c0和f1e609fc之间的寄存器值)TV常见问题以及定位和分析方法TV常见问题以及定位和分析方法AV制式AV也叫CVBS(Composite Video Broadcast Signal)复合广播信号或者(Composite Video Blanking
26、 and Sync)复合视频消隐和同步。AV有PAL和NTSC这两种制式。PALPAL(Phase Alteration Line)意思是逐行倒相。PAL制式标准分辨率为720*576,色彩位深为24比特,画面宽高比为4:3。PAL制电视的供电频率为50Hz,场频为每秒50场,帧频为每秒25帧,电视扫描线为625行,采用隔行扫描方式,奇场在前,偶场在后。PAL电视标准用多于中国、欧洲等国家和地区。NTSCNTSC(NTSC是National Television Standards Committee),意思是“(美国)国家电视标准委员会”。NTSC电视标准分辨率为720*480,色彩位深为2
27、4比特,画面宽高比为4:3或16:9。NTSC制式的场频为每秒60场,帧频为每秒29.97帧(简化为30帧),电视扫描线为525线,采用隔行扫描方式,奇场在前,偶场在后。NTSC电视标准多用于美、日等国家和地区。YPbPrYPbPr也叫色差分量接口,采用的是美国电子工业协会EIA-770.2a标准,还有一种接口被称为YCbCr接口,这两者的区别在于YCbCr是隔行扫描色差输出,YPbPr是逐行扫描色差输出。色差输出将S-Video传输的色度信号C/P分解为色差Pr/Cr和Pb/Cb,这样就避免了两路色差混合解码并再次分离的过程,也保持了色度通道的最大带宽。其中,Y是亮度信号。VGAVGA(Vi
28、deo Graphics Array)视频图形阵列。2022/9/1TV常见问题以及定位和分析方法TV检测不到查看内核log打印从内核log中找到 system/core/init/init_disp.c文件init_initdisplay函数检测TV热插拔状态后的打印,看获取回来的值。如果是boot阶段检测不到,而到了init进程启动阶段检测到了,可能是boot1 display_interface.c中检测AV/YPbPr热插拔状态之前的延时太短,可以适当延长。A31/A31S由于采用外接的信号转换芯片,目前不支持热插拔检测。查看android log打印A10/A10S、A20 Syst
29、emServer.java中的TV热插拔检测会打印出相关的状态信息。检查硬件如果以上两处都检测不到AV或者YPbPr线缆的插入或者状态不匹配,那么需要从硬件上检查是否有相互干扰、AV的75下拉电阻是否正确等。确认硬件上无错误后,软件上可以通过直接读取寄存器的方式进行一定的调试。0 x01c0a000是TVE0的物理基地址,而读写寄存器时采用虚拟地址0 xf1c0a000。偏移地址0 x38是TV热插拔状态寄存器,通过读这个寄存器可以知道对应的DAC是否连接负载。通过调整偏移地址0 x8的第18、19位(检测色度负载)和20、21位(检测亮度负载)的组合(分别从00-11),有助于正确检测到插拔
30、状态。此外,调大或者调小偏移地址0 x24寄存器的幅度值,也能起到微调的作用。A20:adb shellcd /sys/class/misc/sunxi-reg/rw读寄存器TVE_008:echo f1c0a008 dump;cat dump写寄存器TVE_008:echo f1c0a008 xxx write(xxx是读取回来修改后需要接入的值)AV没有输出检查的方法和HDMI没有输出类似,确保上层把输出切换到AV通道上去了。YPbPr没有输出 默认检测到YPbPr热插拔的时候会输出到VGA,这时我们要修改代码把输出设置到YPbPr通道。init_disp.cinit_swtichdisp
31、lay(0,DISP_OUTPUT_TYPE_TV,DISP_TV_MOD_720P_60HZ); SystemServer.java privatefinalbooleanmDeviceHasYpbpr = true; DispList.java 删除了VGA显示模式列表,增加了YPbPr显示模式列表DisplayController.java privatefinalbooleanmDeviceHasYpbpr = true; 由设置VGA输出改为设置YPbPr输出TV常见问题以及定位和分析方法2022/9/1TV常见问题以及定位和分析方法TVE输出需要配置的地方配置文件中的设置以A20
32、sys_config.fex为例;-;tv out dac configuration;dacx_src: posite; 1:luma; 2:chroma; 4:Y; 5:Pb; 6: Pr; 7:none;-tv_out_dac_paradac_used = 1dac0_src = 4dac1_src = 5dac2_src = 6dac3_src = 0DAC0DAC3的配置需要根据当前硬件的连接来进行配置,一一对应。A31/A31SA31/A31S TVE输出一般会采用外接AV信号调制芯片gm7121或者gm7122。此时需要在menuconfig中选上gm7121模块的驱动(gm7122与gm7121差别不是很大,可以使用同一个驱动或者添加一个gm7122的驱动)。同时,配置文件sys_config.fex相应的需要加下面的配置项:;-;tv configuration;-tv0_paratv_used = 1tv_module_name = gm7121tv_twi_used = 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年项目负责人b证考试考核题库和答案
- 2025年新能源汽车智能座舱硬件配置在提升品牌形象方面的作用报告
- 云计算资源调度-洞察与解读
- 重难点解析人教版八年级上册物理物态变化《温度》专项练习练习题(含答案详解)
- 2025年低空经济航空产业市场前景预测与市场机遇报告
- 2025年深圳低空经济产业布局与立法支持报告
- 2025年无人机用碳纤维复合材料市场前景与竞争格局分析报告
- 电动重卡应用分析-洞察与解读
- 2025年新能源行业企业数字化转型与业务流程优化国际合作报告
- 考点解析人教版八年级上册物理物态变化《温度》定向练习试题(详解版)
- 最新交管12123学法减分考试题库及答案大全
- 幼儿成长档案电子通用版
- 短视频:策划+拍摄+制作+运营课件(完整版)
- 首都师范大学本科生重修课程自学申请表
- 第四章路面施工.ppt
- mr9270s文件包中文说明书
- 机械制造技术基础-CA6140的传动系统分析
- HIV-1病毒载量测定及质量保证指南
- Wiley数据库使用方法(课堂PPT)
- 蚀刻液周知卡
- 锦屏一级水电站左岸坝肩化学灌浆试验
评论
0/150
提交评论