Platform: RK3399

OS: Android 7.1

Kernel: v4.4.83

驱动文件:

dw-hdmi.c: HDMI驱动,包括内部I2C接口实现。

drm_edid.c: edid相关。

dw_hdmi-rockchip.c: drm框架部分。

探测引脚

HPD(Hotplug Dectect)用于监测HDMI设备是否存在,为high那么可以通过DDC去读EDID,HDMI有规定在HDMI 5vAC断电时source device可以读reciever device的EDID,也就是需要Hotplug为High。其中有两种Hotplug相关的情况会导致HDMI被识别为DVI:

Hotplug为High,不过EDID并没有准备好,那么信号源设备会由于无法读到EDID而认为接收设备为DVI,这样会导致HDMI有图像无声的问题。

Hotplug为Low,也会导致信号源无法读到EDID而认为接收设备为DVI,从而导致HDMI有图无声。

插拔是否成功可以在check_hdmi_irq()@dw-hdmi.c中打印log。

I2C部分:

I2C主要用于读取EDID,内部框图如下:

分内部I2C和普通I2C两种。

普通的I2C可以配置到任何一路,和正常外设使用一样。DTS配置ddc-i2c-bus属性即可:

&hdmi {

status = "okay";

ddc-i2c-bus = ;//选择硬件对应使用的I2C

};

内部的I2C只能使用I2C3, 可以从寄存器文档得知:

对应DTS配置:

hdmi:hdmi@ff940000 {

......

pinctrl-names = "default";

pinctrl-0 = ;

......

}

hdmi {

hdmi_i2c_xfer: hdmi-i2c-xfer {

rockchip,pins =

<4 17 RK_FUNC_3 &pcfg_pull_none>,

<4 16 RK_FUNC_3 &pcfg_pull_none>;

};

};

如果使用了内部I2C,普通的I2C是无法使用的。(被复用了)

如果使用了普通I2C,也需要把pinctrl-0属性给注释掉,否则会导致普通I2C无法正常使用。

代码逻辑上优先使用普通I2C。

不管是内部还是普通I2C,都可以在HDMI的I2C引脚测量到信号。一开始我看框图以为是普通I2C才会有信号。

EDID读取:

rk3399_mid:/sys/class/drm/card0-HDMI-A-1 # cat edid > /data/edid.bin

如果I2C不通,那么读取失败为空,读取成功则是二进制文件。

EDID读取失败之后CPU端无法得知HDMI屏支持的分辨率,默认会选择一组分辨率(当前是1024x768)进行显示。

分辨率:

屏幕支持分辨率读取:

rk3399_mid:/sys/class/drm/card0-HDMI-A-1 # cat modes

1600x900p60

1920x1080p60

1920x1080p60

1920x1080i60

1920x1080i60

1920x1080p50

1920x1080i50

1280x960p60

1360x768p60

1280x800p60

1280x720p60

1280x720p60

1280x720p50

1024x768p75

1024x768p70

1024x768p60

800x600p75

800x600p72

800x600p60

800x600p56

720x576p50

720x576i50

720x480p60

720x480p60

720x480i60

720x480i60

640x480p75

640x480p73

640x480p60

640x480p60

720x400p70

当前分辨率读取:

rk3399_mid:/sys/class/drm/card0-HDMI-A-1 # cat mode

640x480p75

分辨率设置:

通过settings -> display -> HDMI

通过命令行

如:

set persist.sys.resolution.aux 1024x768@60

每次设置完更新 sys.display.timeline(每次加 1)使分辨率生效

setprop sys.display.timeline 1

参考:

https://zh.wikipedia.org/wiki/EDID

HDMI介绍与流程

Rockchip 基于DRM框架的HDMI开发指南 v1.2-20190226.pdf

android 480p分辨率,[RK3399][Android7.1] HDMI显示屏(副屏)调试记录小结相关推荐

  1. Ubuntu18.04外接显示屏副屏只显示鼠标箭头

    1.概述 主机笔记本DELL G3的1920*1080 144Hz,外接显示屏DELL 1600*900 60Hz,使用DP口连接.连接完成之后,副屏只能显示鼠标小箭头,其他内容不能显示. 2.解决 ...

  2. gcc android开发环境,[RK3399][Android7.1]开发环境搭建

    最后还是安装了双系统,在Ubuntu16.04下编译的,以下的解决方法依然后效:/(ㄒoㄒ)/~~ ######################黄金分割线####################### ...

  3. 那些年踩过的坑-之《Android Q-高通平台UAC(USB Audio Class)调试记录》

    uac分为UAC1.0和UAC2.0,由于UAC2.0,在windows上兼容性不好,在产品中,会带来各种坑,所以选择UAC1.0 平台:高通 SDA660,android Q,kernel4.4 一 ...

  4. Android 扩展屏幕 实现主屏副屏同步或者异步显示

    android的扩展屏幕是通过Presentation 类实现的. Presentation继承自  Dialog. 主屏显示的代码 主屏播放一个video3的视频 .video3在项目的 asset ...

  5. android手机底噪,[RK3399][Android7.1] 调试笔记 --- Codec播放音乐会有底噪

    Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83 背景: 移植完Codec RT5640之后,发现播放声音的时候底部有噪声. 用示波器测量到的左右声道波 ...

  6. java获取apk启动activity_[RK3399] android7.1 设置开机启动apk

    平台: RK3399+android7.1 开机启动apk (1)修改类: ./frameworks/base/services/core/java/com/android/server/am/Act ...

  7. Android众说纷纭分辨率

    Andoid最被人诟病的就是显示屏的各种不同尺寸和不同分辨率.由于Android厂商的纷繁多样,导致出现了不同尺寸和不同分辨率的手机,指示开发者需要兼容各种手机屏幕.本文想学习的就是Android的显 ...

  8. Android 系统(40)--Android7.0 PowerManagerService亮灭屏分析(一)

    Android7.0 PowerManagerService亮灭屏分析(一) 可以导致手机亮灭屏的因素有多种,而在本文中主要讲解按power键亮灭屏过程以及来电亮屏.在亮灭屏过程power中主要的实现 ...

  9. xz1推送android9.0,索尼XZ1/XZP港版正式推送Android 9.0更新 搭载4K HDR显示屏

    上周索尼XZ1/XZ1 C台版两款手机终于迎来了Android 9.0的更新,在评论区里,有不少小伙伴抱怨港版的XZ1.XZP手机是"后娘养的",迟迟不给更新. 现在,好消息来了, ...

最新文章

  1. spring java 面试
  2. is_callable — 检测参数是否为合法的可调用结构
  3. 慈溪微生活图标_日常生活中的图标
  4. C#读取Excel 2003/2007的文件(注意连接字符串)
  5. spark集群启动正常,但是提交任务后只有一个节点(slave/worker)参与集群计算
  6. VC++六种Runtime Library
  7. 调用函数,判断一个数是否为素数
  8. 检测前目标跟踪在雷达系统中的应用(一):DBT与TBD
  9. 高老师架构设计思考短句集(2)
  10. 计算机专业考计量经济学,计量经济学期末考试题库(完整版)及答案()(47页)-原创力文档...
  11. stm32f407 休眠模式_STM32进入和退出睡眠模式
  12. 技校可以学计算机平面设计吗,计算机平面设计免费试学服务为先_孙进技校
  13. 好教程推荐系列:《C++新经典》和《Visual C++ 2017从入门到精通》
  14. java判断扑克牌是否为顺子_程序算法设计题,判断扑克牌中的顺子
  15. 实战:k8s之NFS存储-2022.2.22
  16. PHPCMS手机访问,调用手机模板
  17. 中兴网络设备交换机路由器查看ip状态查看IPv4查看IPv6状态命令方法
  18. 地牢围攻2 宽屏补丁 使用说明
  19. 咪咕MGV2000,JZ代工-免拆机-U盘刷机固件及教程
  20. 米兔积木机器人与履带机甲零件差别_米兔积木机器人履带机甲

热门文章

  1. 正则表达式部分总结(待续...........)如有错误,望各位高人指教
  2. 【翻译】在ruby中实现attributes的lazily initialization(惰性初始化)
  3. Dubbo消费者代理的调用
  4. mybatis + spring boot + yml 配置,告别XML
  5. 什么是 JS 原型链?
  6. php类代码中常看到::的操作符
  7. oracle日期与字符串的相互转化
  8. android toolbar区别,Android《ToolBar》
  9. Redis进阶高可用之主从复制
  10. JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误