一,EDID是什么? EDID的全称是Extended Display Identification Data(扩展显示标识数据),共有128字节。 形象地说,EDID就是显示器的身份证、户口本、技能证书等证件的集合,目的就是告诉别人我是谁,我从哪来,我能干什么。 二,为什么要使用EDID? 为了能让PC或其他的图像输出设备更好的识别显示器属性。 三,EDID的组成 EDID 由128个字节组成,大致划分如下 0-7 :头信息 ,8个字节,由00 FF FF FF FF FF FF 00 组成 8-9:厂商ID 10-11: 产品ID 12-15 所存储的值是从下列公式得出的1990年多出的年份: 储存值=生产的年份-1990; 3, EDID 版本 18-19 字节: EDID 版本。存储适当的版本和修订编号。 126字节: 扩展标志位,EDID-1.3版本需要忽略,设置为0。可选项。 127字节: 求和验证值。编程该字节使得128字节的全部edid的1字节校验和等于00h。
但实际上仍会有一些与 EDID 相关的问题存在。通常显示设备会有很多不同的 EDID 实现,这有时会导致源和显示器的不兼容。 由于存在这种不兼容性,当源接收到新的 EDID 时,显示器有很大的可能会无法显示。 EDID 存在的问题 图中展示的是,当电视机(显示器)与笔记本电脑(源)连接时,电视机正常显示。 EDID 模拟器 这时我们需要调整 EDID ,事实上我们可以用 EDID 模拟器来解决这个问题。从图中可以看到,EDID 模拟器负责解决 EDID 协商修复问题。 使用者可以通过 EDID 模拟器选择显示器支持的视频模式(内省的)。如果使用者知道台式电脑支持的格式,那么他甚至可以在 EDID 传输到源之前对 EDID 进行编辑。 这些问题并不是 EDID 旨在解决的,但确是我们在组播的世界中不得不考虑的。 总结一下我们需要解决的问题: 用于组播流的“智能” EDID 管理。
故事的背景我在一个双屏设备上,我想要获取每个显示器屏幕对应的 EDID 信息。 我在一台麒麟系统的设备上,通过 RandR 的方式获取 EDID 信息,进而读取屏幕物理设备信息 我需要获取准确的显示器屏幕关联的设备信息,在屏幕对应的 Edid 信息里面记录了我需要的物理设备信息。 我尝试通过 /sys/class/drm/ 路径读取,但遇到了关联问题,不知道哪个 Edid 文件应该对应哪个屏幕。 解析逻辑 通过 XRRListOutputProperties 方法读取 Outputs 里面的每一项,如果某一项中读取到的属性包含了 EDID Atom 内容,则证明当前项就是 EDID 信息 其代码如下 此时的 edid 二进制信息还需要进一步的解析才能获取内容。如何解析 edid 就不在本文范围内了,大家可以使用自己喜欢的方式进行解析。本文这里只是做了简单的内容解析,解析出了屏幕的物理尺寸信息。
这与设置以下参数相同: hdmi_ignore_edid 如果您的显示器没有准确的EDID,则设置hdmi_ignore_edid为0xa5000080可以忽略EDID /显示数据。 hdmi_edid_file 设置hdmi_edid_file为1将会导致GPU从edid.dat引导分区中的文件中读取EDID数据,而不是从监视器中读取。可在此处获得更多信息。 这也需要hdmi_edid_file=1启用EDID文件。 例如: hdmi_edid_file=1 hdmi_edid_filename:0=FileForPortZero.edid hdmi_edid_filename:1=FileForPortOne.edid hdmi_force_edid_3d 设置hdmi_force_edid_3d为1假装所有CEA模式都支持3D,即使EDID并不表示支持该功能。
& DDC sink设备在ROM中存放EDID信息,source在收到HPD后会通过DDC通道读取EDID得到显示设备的属性。 EDID包含两部分,前128字节符合EDID1.3数据结构,128字节的扩展EDID,符合CEA extension verison3。CEA extension verison3如下图所示。 图1 31 CEA extension verison3 HDMI VSDB HDMI sink设备在第一个扩展EDID中包含HDMI VSDB,source在读取EDID后会根据是否有此block Hotplug source会监测HPD pin的状态,当source和sink连接后,如果HPD为高电平,说明sink设备正常可以工作,source可通过DDC读取EDID,如果为低电平,说明sink sink可通过拉低HPD超过100ms来向source表明EDID发生了变化,此时source会重新读取EDID。 1.4 基于FPGA的720P HDMI显示 ? 未完待续
之前我不知道有这样的设计,导致了我大量逻辑判断文件长度为 0 就不执行,从而让运行结果不符合预期 逻辑非常简单,本文将使用读取 edid 文件作为例子,以下是我的 edid 文件所在的路径 /sys/class /drm/card0-DP-2/edid 使用 ls -lh 命令获取 /sys/class/drm/card0-DP-2 文件夹里面的所有文件,可以看到大概如下的输出内容 lrwxrwxrwx 1 root /card0 -r--r--r-- 1 root root 4.0K 4月 22 09:58 dpms -r--r--r-- 1 root root 0 4月 22 09:58 edid -r cat 等工具查看,是可以获取到 edid 文件内容的 相应的,在 dotnet 这边,使用以下代码尝试获取的 FileStream 的 Length 属性也是 0 长度 var file = "/sys/class/drm/card0-DP-2/edid"; var fileStream = File.OpenRead(file); Console.WriteLine($
8 tmatsuya i2c_edid ❝https://github.com/tmatsuya/i2c_edid 用于 EDID(扩展显示识别数据)IP CORE 的 I2C ROM 说明 该项目是使用 适用于 HDMI 相机捕获设备或视频切换器开发人员 特点 支持 I2C 从机协议和 EDID(扩展显示识别数据)ROM 8 位寻址(最大 256 字节) 目录结构 /boards/ 顶层设计文件、约束文件和 后面几个项目针对EDID、EEPROM特殊场景的项目,经过上面一些项目的介绍,相信大家对于FPGA实现I2C应该更有信心吧。 最后,还是感谢各个大佬开源的项目,让我们受益匪浅。
vmware高 官方参考文档:https://www.qemu.org/docs/master/system/introduction.html kvm,轻量级虚拟机,可以加速qemu的执行 qemu-edid ,显示器edid(扩展显示id) qemu-ga,Qemu Guest Agent运行在虚拟机内部的监控程序 qemu-img,管理磁盘镜像,镜像格式转换等 qemu-io,执行io命令工具 qemu-nbd
Manager GEM - Graphics Execution Manager KMS - Kernel Mode Setting GFX - Graphics Force Express EDID
EDID(Extended display identification data) 延伸显示能力识别, 是显示设备与信号源设备通讯时表明自身性能的一种标准化方法. 目前很多电视机都将EDID直接写到软件代码中, 直接固化在FLASH中. 目前电视机中有VGA和HDMI端口使用到EDID, 且每个相同的端口都需要在EDID中写明该端口与OSD上所显示的端口对应的序号.
DDC通路,大致是个IIC接口,读取上游器件的EDID或者E-EDID数据; 就是沟通显示器的样子 和IIC的区别 协议的定义 是否打开自动读取的功能 终止功能的原因 CEC的功能,62 这个是CEC结构的一个封装 对一些宏的保护,写了这个 一些要使用的变量 DDC是读取哪个显示器的信息 CEC的信息结构体长这样 cec读取到的位置,就是这里面的一个 还有128位的EDID
hhhh,还看不了,有兄弟有的,给我看看 系统框图 对了这个东西还支持EDID WIKI的说法 关于具体这个芯片的控制,后面会给资料,300多页的寄存器。 HDMI 通过广播它可以支持的所有模式的EDID的接收设备来协商分辨率。内核驱动程序不知道您希望接收的分辨率、帧速率或格式,因此由用户提供合适的文件。 这是通过 VIDIOC_S_EDID ioctl 完成的,(里面都是系统级别的配置,具体使用需要查文档)或者更容易使用v4l2-ctl --fix-edid-checksums --set-edid=file
本次我们处理EDID的数据,客户给的EDID数据是txt文件,格式如下: 原始数据: 然后我们想处理为如下的格式来使用,处理后的格式: 撸代码前,我们先思考一下如何做,一般格式化数据,可以简单的分为三个步骤
hhhh,还看不了,有兄弟有的,给我看看 系统框图 对了这个东西还支持EDID WIKI的说法 关于具体这个芯片的控制,后面会给资料,300多页的寄存器。 HDMI 通过广播它可以支持的所有模式的EDID的接收设备来协商分辨率。内核驱动程序不知道您希望接收的分辨率、帧速率或格式,因此由用户提供合适的文件。 这是通过 VIDIOC_S_EDID ioctl 完成的,(里面都是系统级别的配置,具体使用需要查文档)或者更容易使用v4l2-ctl --fix-edid-checksums --set-edid=file
EDID注入 EFI下面有一个config.split文件,需要替换成自己电脑的edid(替换方法自行百度),这个文件是clover引导的配置文件,至关重要。
开启强制HDMI输出 (不接显示器的话可以跳过此处) 打开boot分区下的config.txt 修改如下行 hdmi_safe=1 config_hdmi_boost=4 hdmi_ignore_edid hdmi_mode=82 参数说明 参数 说明 hdmi_safe=1 安全启动HDMI config_hdmi_boost=4 开启热插拔 hdmi_group=1 CEA电视显示器 hdmi_ignore_edid
类型,可用空间和总空间) 9、磁盘驱动器(型号,序列号,大小)和分区 10、网络接口(IP,带宽输入 / 输出) 11、电池状态(电量百分比,剩余时间,电量使用情况统计信息) 12、连接的显示器(带有 EDID
这里推荐两篇博文:Ubuntu添加自定义VGA输出;EDID信息。
EDID:扩展显示标识数据。 五、时序与硬件 时序分析: ? 硬件分析: ? 和HDMI_SDA_LS是HDMI接口的显示数据通道(DDS,Display Data Channel),用于HDMI发送端和接收端之间交换一些配置信息,通过I2C协议通信,读取保存在EEPROM中的EDID
从以上几点可以简单推导一下DP协议的特点: 1、DP是一个协议,肯定也是会参考OSI参考模型的,即会采用分层结构,最低层肯定是物理层; DP标准的文章标题 协议(标准)、总线、接口区别 2、DP的EDID 连接时序 整个过程和HDMI类似:1、先是检查HPD信号;2、读取EDID(通过AUX通道,不是DDC);3、Link Training(DPCD)(确认链路的参数,如lane的数目、链接速率、电压摆幅