正点原子嵌入式linux驱动开发——RGB转HDMI

目前大多数的显示器都提供了HDMI接口,HDMI的应用范围也越来越广,但是STM32MP157这颗芯片原生并不支持HDMI显示。可以通过RGB转HDMI芯片将RGB信号转为HDMI信号,这样就可以连接HDMI显示器了。本章就来学习一下如何在正点原子的STM32MP1开发板上实现RGB转HDMI。

RGB转HDMI简介

STM32MP157这颗SOC没有HDMI外设,只有RGB屏幕接口,因此只能通过RGB转HDMI的芯片来实现HDMI连接。效果肯定是没法和原生支持HDMI接口的SOC比,当个玩具来玩一下还是可以的。因此本质上来讲还是RGB驱动,并非原生的HDMI驱动。

正点原子的STM32MP1开发板提供了RGB转HDMI模块,如下图所示:

SiI9022A芯片

这里使用SiI9022A这颗芯片来完成RGB转HDMI。SiI9022A以前是Silicon Image公司出品的,但是Silicon Image后来被Lattice收购了。

SiI9022A是一款HDMI传输芯片,适用于高清便携相机、数字相机和个人移动设备,可以灵活的将其他音视频接口转换为HDMI或者DVI格式。SiI9022A支持预编程HDCP键码,可以完全自动进行HDCP检测和鉴定。SiI9022A是一个视频转换芯片,支持输入视频格式有:xvYCC、BTA-T1004、ITU-R.656,内置DE发生器支持SYNC格式(RGB格式)。输出格式支持:HDMI、HDCP和DVI、最高支持1080P视频输出、支持HDMI A、HDMI C和Micro-D连接器。SiI9022A功能非常多,具体使用什么功能需要进行配置,因此SiI9022A提供了一个I2C接口用于配置

硬件原理图分析

先进行SiI9022A的硬件原理分析,打开开发板底版原理图,原理如下图所示:

SiI9022A原理图

上图就是板载的HDMI接口,在图中可以看出HDMI模块分为4部分:RGB接口、I2C2接口、I2S2音频接口和HDMI_CEC接口。主要还是使用RGB接口引脚获取显示数据,SiI9022A使用I2C来进行配置,这里使用STM32MP1的I2C2接口, 使用到了到PH4和PH5这两个引脚。另外还有一个中断INT一个复位HDMI_RESET分别连接到PH6和PA3引脚上。在本篇笔记里主要是实现HDMI的显示功能,其它接口就不用管它。

实验驱动编写

修改设备树

设置I2C2的pinmux

如果要实现HDMI显示,就要给SiI9022A提供RGB接口和I2C2接口,RGB接口在在之前的LCD屏幕的实验中已经有过学习,这里就不再讲解了。主要看一下I2C2接口的pinmux配置,打开stm32mp15-pinctrl.dtsi文件,然后找到如下内容:

示例代码 42. 3.1.1 I2C2 的 pinmux
1  i2c2_pins_a: i2c2-0 { 
2      pins { 
3          pinmux = <STM32_PINMUX('H', 4, AF4)>, /* I2C2_SCL */ 
4                  <STM32_PINMUX('H', 5, AF4)>; /* I2C2_SDA */ 
5          bias-disable; 
6          drive-open-drain; 
7          slew-rate = <0>; 
8      }; 
9  }; 
10 
11 i2c2_pins_sleep_a: i2c2-1 { 
12     pins {
13         pinmux = <STM32_PINMUX('H', 4, ANALOG)>, /* I2C2_SCL */ 
14                 <STM32_PINMUX('H', 5, ANALOG)>; /* I2C2_SDA */ 
15     }; 
16 };

示例代码42.3.1.1中,定义了I2C2接口的两个pinmux配置分别为:i2c2_pins_a和i2c2_pins_sleep_a。第一个默认的状态下使用,第二个是在sleep状态下使用。

添加HDMI的电源节点

Sii9022A需要一个1.2V电压,这个开发板上已经提供了,原理图上的XC6206P122MR芯片就是1.2V电源芯片。还需要在设备树中添加1.2V电压节点,供Sii9022A驱动程序使用。打开stm32mp157d-atk.dts文件,在根节点下添加如下内容所示:

示例代码 42. 3.1.2 HDMI 的电源节点
1 v1v2_hdmi regulator v1v2 hdmi {
2     compatible "regulator fixed"
3     regulator name "v1v2_
4     regulator min microvolt 1200000
5     regulator max microvolt 1200000
6     regulator always on
7     regulator boot on
8 };

这个就是提供一个简单的电压。

在i2c2节点追加HDMI子节点

在学习LCD驱动就有学到,RGB接口是不用再次修改的,只需要提供一个接口用来接收LTDC数据,HDMI就是用来接收LTDC接口的。在stm32mp157d-atk.dts文件下,用追加节点方式,把i2c2节点追加如下内容:

示例代码 4 2.3.1.3 追加的 I 2C2 节点内容
1  &i2c2 {
2      pinctrl-names = "default", "sleep";
3      pinctrl-0 = <&i2c2_pins_a>;
4      pinctrl-1 = <&i2c2_pins_sleep_a>;
5      status = "okay";
6
7      hdmi: hdmi-transmitter@39 {
8          compatible = "sil,sii9022";
9          reg = <0x39>;
10         iovcc-supply = <&v3v3>;
11         cvcc12-supply = <&v1v2_hdmi>;
12         reset-gpios = <&gpioa 3 GPIO_ACTIVE_LOW>;
13         interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
14         interrupt-parent = <&gpioh>;
15         #sound-dai-cells = <1>;
16         status = "okay";
17
18         ports {
19             #address-cells = <1>;
20             #size-cells =<0>;
21
22             port@0 {
23                 reg = <0>;
24                 sii9022_in: endpoint {
25                     remote-endpoint = <&ltdc_ep0_out>;
26                 };
27             };
28         };
29     };
30 };

第2-4行,配置了I2C2的两个pinmux设置。

第7-29行,就是I2C2下的HDMI子节点,接着就分析这个节点比较重要的属性的作用。第12行,设置复位引脚为PA3,低电压有效。第13-14行,设置中断引脚为PH6,下降沿有效。第22-27行,port节点就是用来接收LTDC数据的接口,第25行就是引用了ltdc_ep0_out节点。

这里只是告诉了HDMI从LTDC接口获取数据,还需要告诉LTDC节点数据输出到HDMI,需要修改ltdc节点,修改完成以后的ltdc节点如下所示:

示例代码 4 2.3.1.4 基于 H DMI 接口的 L TDC
1  &ltdc {
2      pinctrl-names = "default", "sleep";
3      pinctrl-0 = <&ltdc_pins_b>;
4      pinctrl-1 = <&ltdc_pins_sleep_b>;
5      status = "okay";
6
7      port {
8          #address-cells = <1>;
9          #size-cells = <0>;
10
11         ltdc_ep0_out: endpoint@0 {
12             reg = <0>;
13             remote-endpoint = <&sii9022_in>;
14         };
15     };
16 };

第13行,就是告诉LTDC接口,数据输出到HDMI。

注意,需要将panel_rgb节点屏蔽掉,否则编译设备树的时候会如下所示警告:

Warning (graph_endpoint): /panel-rgb/port/endpoint: graph connection to node '/soc/display-controller@5a001000/port/endpoint@0' is not bidirectional

最后执行“make dtbs”命令,重新编译设备树。

使能内核自带sii902x驱动

ST提供的linux内核已经集成了sii902x驱动了同时已经使能了,还是需要看看如何使能这个配置,配置路径如下:

-> Device Drivers
-> Graphics support
-> Display Interface Bridges
-> <*> Silicon Image sii902x RGB/HDMI bridge //选中

将sii902x驱动编译进Linux内核中,如下图所示:

使能sii902x驱动

内核默认已经使能了sii902x驱动,如果没使能的话就按照上述方法使能,然后重新编译内核,得到新的内核和设备树。

RGB转HDMI测试

使用HDMI线将开发板和显示器连接起来,然后使用新编译得到的内核和设备树启动开发板,如果驱动工作正常,那么就会在HDMI显示器上显示信息,如下图所示(屏幕截图):

显示器显示

至此HDMI驱动工作正常,可以使用HDMI显示器来进行Linux下的图形开发,但是本教程后续依旧会使用LCD屏幕,可以根据自己的喜好选择HDMI显示器还是LCD屏幕即可。

总结

这一章比较简单,只要在设备树里面,添加hdmi的电源节点,然后在i2c2节点下追加hdmi子节点,最后在ltdc节点的remote-endpoint修改成hdmi。这样就可以使用HDMI显示屏来进行开发了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《从零开始大模型开发与微调 :基于PyTorch与ChatGLM》简介

内 容 简 介 大模型是深度学习自然语言处理皇冠上的一颗明珠&#xff0c;也是当前AI和NLP研究与产业中最重要的方向之一。本书使用PyTorch 2.0作为学习大模型的基本框架&#xff0c;以ChatGLM为例详细讲解大模型的基本理论、算法、程序实现、应用实战以及微调技术&#xff0c;…

Qt中的枚举变量,Q_ENUM,Q_FLAG以及Qt中自定义结构体、枚举型做信号参数传递

Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他 理论基础&#xff1a;一、Q_ENUM二、QMetaEnum三、Q_FLAG四、示例 Chapter1 Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他前言Q_ENUM的使用Q_FLAG的引入解决什么问题&#xf…

Pytorch指定数据加载器使用子进程

torch.utils.data.DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue,num_workers4, pin_memoryTrue) num_workers 参数是 DataLoader 类的一个参数&#xff0c;它指定了数据加载器使用的子进程数量。通过增加 num_workers 的数量&#xff0c;可以并行地读取和预处…

如何将音频与视频分离

您一定经历过这样的情况&#xff1a;当你非常喜欢视频中的背景音乐时&#xff0c;希望将音频从视频中分离出来&#xff0c;以便你可以在音乐播放器中收听音乐。有没有一种有效的方法可以帮助您快速从视频中提取音频呢&#xff1f;当然是有的啦&#xff0c;在下面的文章中&#…

根据输入类型来选择函数不同的实现方法functools.singledispatch

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 根据输入类型来选择函数不同的实现方法 functools.singledispatch 输入6后&#xff0c;下列输出正确的是&#xff1f; from functools import singledispatch singledispatch def calcu…

树莓派系统文件解析

title: “树莓派系统文件分析” date: 2023-10-25 permalink: /posts/2023/10/blog-post-5/ tags: 树莓派 本篇blog来分析和总结下树莓派系统文件以及他们的作用。使用的系统是Raspberry Pi OS with desktop System: 64-bitKernel version: 6.1Debian version: 12 (bookworm)…

经典链表试题(二)

文章目录 一、移除链表元素1、题目介绍2、思路讲解3、代码实现 二、反转链表1、题目介绍2、思路讲解3、代码实现 三、相交链表1、题目介绍2、思路讲解3、代码实现 四、链表的中间结点1、题目介绍2、思路讲解3、代码实现 五、设计循环队列1、题目介绍2、思路讲解3、代码实现 六、…

2023高频前端面试题-http

1. HTTP有哪些⽅法&#xff1f; HTTP 1.0 标准中&#xff0c;定义了3种请求⽅法&#xff1a;GET、POST、HEAD HTTP 1.1 标准中&#xff0c;新增了请求⽅法&#xff1a;PUT、PATCH、DELETE、OPTIONS、TRACE、CONNECT 2. 各个HTTP方法的具体作用是什么&#xff1f; 方法功能G…

『C语言进阶』动态内存管理

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f516;系列专栏&#xff1a; C语言、Linux、Cpolar ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言一、动态内存函数的介绍1.1 malloc和free函数1.2 calloc函数1.3 realloc函数 二、常见的动态内存错误2.1 …

行业模型应该如何去拆解?

行业模型应该如何去拆解&#xff1f; 拆解行业模型是一个复杂的过程&#xff0c;涉及对整个行业的深入分析和理解。下面是一些步骤和方法&#xff0c;可以帮助你系统地拆解行业模型&#xff1a; 1. 确定行业范围 定义行业&#xff1a;明确你要分析的行业是什么&#xff0c;包括…

React中的Virtual DOM(看这一篇就够了)

文章目录 前言了解Virtual DOMreact创建虚拟dom的方式React Element虚拟dom的流程虚拟dom和真实dom的对比后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react合集 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌…

在pycharm中创建python模板文件

File——>Setting——>File and Code Templates——>Python Scripts 在文本框中输入模板内容

vue首页多模块布局(标题布局)

<template><div class"box"><div class"content"><div class"box1" style"background-color: rgb(245,23,156)">第一个</div><div class"box2" style"background-color: rgb(12,233,…

windows下使用FFmpeg开源库进行视频编解码完整步聚

最终解码效果: 1.UI设计 2.在控件属性窗口中输入默认值 3.复制已编译FFmpeg库到工程同级目录下 4.在工程引用FFmpeg库及头文件 5.链接指定FFmpeg库 6.使用FFmpeg库 引用头文件 extern "C" { #include "libswscale/swscale.h" #include "libavdevic…

composer安装thinkphp6报错

composer安装thinkphp6报错&#xff0c; 查看是否安装了对应的PHP扩展&#xff0c;我这边使用的是宝塔的环境&#xff0c;全程可以可视化操作 这样就可以安装完成了

【AIGC】百度文库文档助手之 - 一键生成PPT

百度文库文档助手之 - 一键生成PPT 引言一、文档助手&#xff1a;体验一键生成PPT二、文档助手&#xff1a;进阶用法三、其它生成PPT的方法3.1 ChatGPT3.2 文心一言 引言 就在上个月百度文库升级为一站式智能文档平台&#xff0c;开放四大AI能力&#xff1a;智能PPT、智能总结、…

【Ansible自动化运维工具 第一部分】Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

Ansible常用模块 一、Ansible1.1 简介1.2 工作原理1.3 Ansible的特性1.3.1 特性一&#xff1a;Agentless&#xff0c;即无Agent的存在1.3.2 特性二&#xff1a;幂等性 1.4 Ansible的基本组件 二、Ansible环境安装部署2.1 安装ansible2.2 查看基本信息2.3 配置远程主机清单 三、…

计算机中了mallox勒索病毒怎么办,勒索病毒解密,数据恢复

最近一段时间&#xff0c;云天数据恢复中心陆续收到很多企业的求助&#xff0c;企业的计算机服务器遭到了mallox勒索病毒攻击&#xff0c;导致企业的数据库无法正常使用&#xff0c;严重影响了企业的正常生产生活&#xff0c;为此&#xff0c;云天数据恢复中心的工程师通过对此…

【Java笔记+踩坑】设计模式——原型模式

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客​ 目录 零、经典的克隆羊问题&#xff08;复制10只属性相同的羊&#xff09; 一、传统方案&#xff1…

酒类商城小程序怎么做

随着互联网的快速发展&#xff0c;线上购物越来越普及。酒类商品也慢慢转向线上销售&#xff0c;如何搭建一个属于自己的酒类小程序商城呢&#xff1f;下面就让我们一起来看看吧&#xff01; 一、登录乔拓云平台 首先&#xff0c;我们需要进入乔拓云平台的后台&#xff0c;点击…