嵌入式分享#38:踩坑实录!我在 RK3576 HDMI 搭错线嵌入式分享#38:踩坑实录!我在 RK3576 HDMI 搭错线# 嵌入式分享#38:踩坑实录!我在 RK3576 HDMI 搭错线
2020 年 8 月 30 日,一个三岁台湾女童不小心被风筝缠住身体。一阵大风吹来,就飞上了天,至少五层楼高。所幸风筝下落被众人抓住,女童没有大碍。
最近在调试 RK3576 HDMI。了解这块的老铁都知道,HDMI 基本不需要调试。因为 HDMI 是集成在 SOC,所以直接使用原厂的默认配置就能点亮。有问题就是硬件设计问题。
这会还真让我遇到了:使用 HDMI 后系统启动立马挂掉。
经排查硬件发现,HDMI 的硬件设计上使用了普通的 I2C,而不是 HDMI 专用的 I2C 接口。
殊不知,HDMI 的 I2C 是专用的,分别为 HDMI_TX_SCL 与 HDMI_TX_SCA。
虽然改版后 HDMI 显示功能正常,但是存在疑问:为什么硬件设计会踩这样的坑?
了解后发现,硬件同事之前是搞 MCU 裸机的。MCU 通常不直接集成 HDMI 接口,如需使用 HDMI 显示功能一般是通过外挂 HDMI 芯片实现的,顾然 I2C 就没有专用一说。
而 SOC 的 HDMI 接口通常是集成的。基于简化软件驱动以及硬件信号完整性的考虑,I2C 通常是指定专用的。毕竟 SOC 的 IO 资源不差那两根线。
当然这也不能一概而论,I2C 是否需要为专用具体还得看原厂相关的设计指导手册。
在这里分享以及记录一下,希望可以帮助读到这篇文章的老铁避坑。
附:DTS 片段
/{
hdmi_sound: hdmi-sound {
compatible = "rockchip,hdmi";
rockchip,mclk-fs = <128>;
rockchip,card-name = "rockchip-hdmi";
rockchip,cpu = <&sai6>;
rockchip,codec = <&hdmi>;
rockchip,jack-det;
}
};
&hdmi {
status = "okay";
// enable-gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_HIGH>;
rockchip,sda-falling-delay-ns = <360>;
};
&hdmi_in_vp0 {
status = "okay";
};
&hdptxphy_hdmi {
status = "okay";
};
&sai6 {
status = "okay";
};
&route_hdmi {
status = "okay";
connect = <&vp0_out_hdmi>;
};
避坑要点
| 项 | 内容 |
|---|---|
| 现象 | 使用 HDMI 后系统启动立马挂掉 |
| 原因 | 用了普通 I2C,而不是 HDMI 专用 I2C |
| 专用信号 | HDMI_TX_SCL / HDMI_TX_SCA |
| 为什么容易踩 | MCU 裸机时代外挂 HDMI 芯片,I2C 通常不专用 |
| SOC | HDMI 集成,I2C 通常指定专用,以简化驱动并保证信号完整性 |
| 结论 | 是否专用还得看原厂设计指导手册 |
(完)