从EEPROM读取EDID

时间:2011-02-21 11:03:29

标签: linux embedded

从链接:http://en.wikipedia.org/wiki/Extended_display_identification_data

“EDID通常存储在称为串行PROM(可编程只读存储器)或EEPROM(电可擦除PROM)的存储器设备中,可通过地址为0x50的I²C总线访问。[1] EDID即使显示器本身已关闭,PROM通常也可由主机PC读取。“

但我不知道,如何阅读这些信息。

有人在这方面帮助我吗?

萨蒂什南比亚

3 个答案:

答案 0 :(得分:2)

使用Linux软件包monitor-edid,您可以阅读edid数据。

默认情况下不安装,也不包含在标准存储库中(CentOS 6)。要安装仓库(如果不是分销的回购的一部分)

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release*rpm

然后你可以安装monitor-edid

yum install monitor-edid

使用该命令的典型方法是通过解析器

管道原始edid数据
monitor-get-edid | monitor-parse-edid

,您的输出将如下所示:

Name: SyncMaster
EISA ID: SAM049b
EDID version: 1.3
EDID extension blocks: 0
Screen size: 47.7 cm x 26.8 cm (21.54 inches, aspect ratio 16/9 = 1.78)
Gamma: 2.2
Digital signal
Max video bandwidth: 170 MHz

        HorizSync 30-75
        VertRefresh 56-61

        # Monitor preferred modeline (59.9 Hz vsync, 66.6 kHz hsync, ratio 16/9, 102 dpi)
        ModeLine "1920x1080" 138.5 1920 1968 2000 2080 1080 1083 1088 1111 -hsync +vsync

答案 1 :(得分:1)

如果此问题仍然存在,请尝试使用以下程序read-edid-i2c。它扫描i2c总线并从中读取EDID数据。您可以选择给它一个总线号码进行检查,因为它在找到的第一个EDID处停止(如果是多显示器设置)。您可能想要修改相关的i2c驱动程序,如i2c-dev。

答案 2 :(得分:0)

完全匹配你所引用的内容如下 - 使用i2c接口实现EDID读取(0x80字节)的Linux内核源代码。

的驱动/ GPU / DRM / drm_edid.c:

/**
 * drm_get_edid - get EDID data, if available
 * @connector: connector we're probing
 * @adapter: i2c adapter to use for DDC
 *
 * Poke the given i2c channel to grab EDID data if possible.  If found,
 * attach it to the connector.
 *
 * Return edid data or NULL if we couldn't find any.
 */
struct edid *drm_get_edid(struct drm_connector *connector,
                          struct i2c_adapter *adapter)
{
    struct edid *edid = NULL;

    if (drm_probe_ddc(adapter))
            edid = (struct edid *)drm_do_get_edid(connector, adapter);

    connector->display_info.raw_edid = (char *)edid;

    return edid;
}