目录
命令获取EDID信息
主要方便测量信号
两个DDC ,分别为i2c-9和i2c-10,对应两个HDMI 控制器。
i2cdetect -l
i2c-3 i2c rk3x-i2c I2C adapter
i2c-10 i2c ddc I2C adapter
i2c-1 i2c rk3x-i2c I2C adapter
i2c-8 i2c rk3x-i2c I2C adapter
i2c-6 i2c rk3x-i2c I2C adapter
i2c-13 i2c igb BB I2C adapter
i2c-4 i2c rk3x-i2c I2C adapter
i2c-11 i2c igb BB I2C adapter
i2c-2 i2c rk3x-i2c I2C adapter
i2c-0 i2c rk3x-i2c I2C adapter
i2c-9 i2c ddc I2C adapter
i2c-7 i2c rk3x-i2c I2C adapter
i2c-14 i2c igb BB I2C adapter
i2c-12 i2c igb BB I2C adapter
i2cdetect -y 9
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 -- 33 -- 35 -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- 52 -- 54 55 -- 57 -- 59 -- 5b 5c -- 5e --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@kylin:~# i2cdetect -y 10
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 32 33 34 35 36 -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
默认地址0x50
I2C 总线10下的设备不能读到,即存在故障。
i2ctransfer -y 9 w1@0x50 0x00 r128 | edid-decode
i2ctransfer -y 10 w1@0x50 0x00 r128 | edid-decode
Error: Sending messages failed: Input/output error
EDID extract of 'stdin' failed
root@kylin:~# i2ctransfer -y 9 w1@0x50 0x00 r128 | edid-decode
edid-decode (hex):
00 ff ff ff ff ff ff 00 05 e3 79 28 2a 04 00 00
01 1b 01 03 80 3e 22 78 2a 08 a5 a2 57 4f a2 28
0f 50 54 bf ef 00 d1 c0 b3 00 95 00 81 80 81 40
81 c0 01 01 01 01 4d d0 00 a0 f0 70 3e 80 30 20
35 00 6d 55 21 00 00 1a a3 66 00 a0 f0 70 1f 80
30 20 35 00 6d 55 21 00 00 1a 00 00 00 fc 00 55
32 38 37 39 47 36 0a 20 20 20 20 20 00 00 00 fd
00 17 50 1e 8c 3c 00 0a 20 20 20 20 20 20 01 bf
----------------
EDID version: 1.3
Manufacturer: AOC Model 10361 Serial Number 1066
Made in week 1 of 2017
Digital display
Maximum image size: 62 cm x 34 cm
Gamma: 2.20
DPMS levels: Off
RGB color display
First detailed timing is preferred timing
Color Characteristics
Red: 0.6328, 0.3398
Green: 0.3105, 0.6328
Blue: 0.1582, 0.0605
White: 0.3134, 0.3291
Established Timings I & II
720x400 70.082 Hz 9:5 31.467 kHz 28.320 MHz (IBM)
640x480 59.940 Hz 4:3 31.469 kHz 25.175 MHz (DMT)
640x480 66.667 Hz 4:3 35.000 kHz 30.240 MHz (Apple)
640x480 72.809 Hz 4:3 37.861 kHz 31.500 MHz (DMT)
640x480 75.000 Hz 4:3 37.500 kHz 31.500 MHz (DMT)
800x600 56.250 Hz 4:3 35.156 kHz 36.000 MHz (DMT)
800x600 60.317 Hz 4:3 37.879 kHz 40.000 MHz (DMT)
800x600 72.188 Hz 4:3 48.077 kHz 50.000 MHz (DMT)
800x600 75.000 Hz 4:3 46.875 kHz 49.500 MHz (DMT)
832x624 74.551 Hz 4:3 49.726 kHz 57.284 MHz (Apple)
1024x768 60.004 Hz 4:3 48.363 kHz 65.000 MHz (DMT)
1024x768 70.069 Hz 4:3 56.476 kHz 75.000 MHz (DMT)
1024x768 75.029 Hz 4:3 60.023 kHz 78.750 MHz (DMT)
1280x1024 75.025 Hz 5:4 79.976 kHz 135.000 MHz (DMT)
Standard Timings
1920x1080 60.000 Hz 16:9 67.500 kHz 148.500 MHz (DMT)
1680x1050 59.954 Hz 16:10 65.290 kHz 146.250 MHz (DMT)
1440x900 59.887 Hz 16:10 55.935 kHz 106.500 MHz (DMT)
1280x1024 60.020 Hz 5:4 63.981 kHz 108.000 MHz (DMT)
1280x960 60.000 Hz 4:3 60.000 kHz 108.000 MHz (DMT)
1280x720 60.000 Hz 16:9 45.000 kHz 74.250 MHz (DMT)
Detailed mode: Clock 533.250 MHz, 621 mm x 341 mm
3840 3888 3920 4000 ( 48 32 80)
2160 2163 2168 2222 ( 3 5 54)
+hsync -vsync
VertFreq: 59.997 Hz, HorFreq: 133.312 kHz
Detailed mode: Clock 262.750 MHz, 621 mm x 341 mm
3840 3888 3920 4000 ( 48 32 80)
2160 2163 2168 2191 ( 3 5 23)
+hsync -vsync
VertFreq: 29.981 Hz, HorFreq: 65.688 kHz
Display Product Name: U2879G6
Display Range Limits
Monitor ranges (GTF): 23-80 Hz V, 30-140 kHz H, max dotclock 600 MHz
Has 1 extension block
Checksum: 0xbf
I2C 协议分析
正常端口读取0x0
i2ctransfer -y 9 w1@0x50 0x00 r1
0x0

正常端口读取0x50
i2ctransfer -y 9 w1@0x50 0x50 r1
0x30

正常端口读取0x55
i2ctransfer -y 9 w1@0x50 0x55 r1
0x55
从图中可以看出从设备对信号的幅度控制更低。

阶段一:写操作(发送 0x55)
起始条件:SCL 高电平期间,SDA 从高电平跳变到低电平
第 1 个 SCL 周期:SDA 为高电平(地址 bit7 = 1)
第 2 个 SCL 周期:SDA 为低电平(地址 bit6 = 0)
第 3 个 SCL 周期:SDA 为高电平(地址 bit5 = 1)
第 4 个 SCL 周期:SDA 为低电平(地址 bit4 = 0)
第 5 个 SCL 周期:SDA 为低电平(地址 bit3 = 0)
第 6 个 SCL 周期:SDA 为低电平(地址 bit2 = 0)
第 7 个 SCL 周期:SDA 为低电平(地址 bit1 = 0)
第 8 个 SCL 周期:SDA 为低电平(地址 bit0 = 0,此时主设备发送的是 0xA0,即 0x50 地址加写位)
第 9 个 SCL 周期:从设备将 SDA 拉低(ACK 应答)
第 10 个 SCL 周期:SDA 为低电平(数据 bit7 = 0)
第 11 个 SCL 周期:SDA 为高电平(数据 bit6 = 1)
第 12 个 SCL 周期:SDA 为低电平(数据 bit5 = 0)
第 13 个 SCL 周期:SDA 为高电平(数据 bit4 = 1)
第 14 个 SCL 周期:SDA 为低电平(数据 bit3 = 0)
第 15 个 SCL 周期:SDA 为高电平(数据 bit2 = 1)
第 16 个 SCL 周期:SDA 为低电平(数据 bit1 = 0)
第 17 个 SCL 周期:SDA 为高电平(数据 bit0 = 1,主设备发送的数据是 0x55)
第 18 个 SCL 周期:从设备将 SDA 拉低(ACK 应答)
停止条件:SCL 高电平期间,SDA 从低电平跳变到高电平
阶段二:读操作(返回 0x55)
起始条件:SCL 高电平期间,SDA 从高电平跳变到低电平(重复起始)
第 19 个 SCL 周期:SDA 为高电平(地址 bit7 = 1)
第 20 个 SCL 周期:SDA 为低电平(地址 bit6 = 0)
第 21 个 SCL 周期:SDA 为高电平(地址 bit5 = 1)
第 22 个 SCL 周期:SDA 为低电平(地址 bit4 = 0)
第 23 个 SCL 周期:SDA 为低电平(地址 bit3 = 0)
第 24 个 SCL 周期:SDA 为低电平(地址 bit2 = 0)
第 25 个 SCL 周期:SDA 为低电平(地址 bit1 = 0)
第 26 个 SCL 周期:SDA 为高电平(地址 bit0 = 1,此时主设备发送的是 0xA1,即 0x50 地址加读位)
第 27 个 SCL 周期:从设备将 SDA 拉低(ACK 应答)
第 28 个 SCL 周期:从设备将 SDA 拉低(数据 bit7 = 0)
第 29 个 SCL 周期:从设备将 SDA 拉高(数据 bit6 = 1)
第 30 个 SCL 周期:从设备将 SDA 拉低(数据 bit5 = 0)
第 31 个 SCL 周期:从设备将 SDA 拉高(数据 bit4 = 1)
第 32 个 SCL 周期:从设备将 SDA 拉低(数据 bit3 = 0)
第 33 个 SCL 周期:从设备将 SDA 拉高(数据 bit2 = 1)
第 34 个 SCL 周期:从设备将 SDA 拉低(数据 bit1 = 0)
第 35 个 SCL 周期:从设备将 SDA 拉高(数据 bit0 = 1,从设备返回的数据是 0x55)
第 36 个 SCL 周期:主设备将 SDA 拉高(NACK,表示读取结束)
停止条件:SCL 高电平期间,SDA 从低电平跳变到高电平
异常端口读取0x0
i2ctransfer -y 10 w1@0x50 0x00 r1

异常端口读取0x50
i2ctransfer -y 10 w1@0x50 0x50 r1

异常端口读取0x55
i2ctransfer -y 10 w1@0x50 0x55 r1
Error: Sending messages failed: Input/output error

总结
异常端口时,在主发送完设备地址后,没有设备将SDA拉低进行响应。
3588 官方设计参考
3588 IO BANK的工作电压有1.8v、3.3v等。而HDMI I2C工作电源为5V。因而需要电平转换,官方给出的参考设计电路如下。电平转换前后的两个上拉电阻值,分别为10K和1.8K。
2SK3018 MOS管。

单板设计
由于各个单板的接口差异,导致例如3V bank下的IO 管脚不够,进而采用其他电平的,例如1.8V等。这时候参考设计可能真的只能参考不能照抄。
而实际这种情况在各个单板设计都会存在,例如某个器件选型,工作的电流、电压等参数值发生变化,或者电路路径发生变化,参考设计仅仅表示链路这样的,但是具体的阻值、电容容量、数目等需要具体情况具体分析。
结论
I2C 读写不通、拉死等很大比例都和上拉电阻相关。比如有的时候10K可以。有的时候需要改到4.7K才能正常通信。 2.2K的电阻值在很多产品中兼容良好,但只有改到4.7K后才兼容了更多产品。何种场景需要驱动能力强,何种场景需要驱动能力弱,这在硬件设计应该有个基本的套路吧,软件就不深入研究了。回到上述问题,我们在改电阻值的过程中,某些电阻值虽然可以读到EDID,但会报如下错误,此种场景下,换一跟短的HDMI线缆,则不会报如下错误,你觉得这种情况应该如何更改链路设计兼容之前长的HDMI线呢?
dwhdmi-rockchip fdea0000.hdmi: i2c write nack!
dwhdmi-rockchip fdea0000.hdmi: i2c write time out!

1014

被折叠的 条评论
为什么被折叠?



