当前位置: 首页 > news >正文

正点原子嵌入式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显示屏来进行开发了。

相关文章:

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

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

前端时间分片渲染

在经典的面试题中&#xff1a;”如果后端返回了十万条数据要你插入到页面中&#xff0c;你会怎么处理&#xff1f;” 除了像 useVirtualList 这样的虚拟列表来处理外&#xff0c;我们还可以通过 时间分片 来处理 通过 setTimeout 直接上一个例子&#xff1a; <!--* Autho…...

亿图导出word和PDF中清晰度保留方法

步骤一 在亿图软件中画一个元件大小搭配合理的图。注意字体大小的安排&#xff0c;尤其是角标的大小要合适&#xff0c;示范如下 选中所有元器件&#xff0c;右键使用组合功能将电路图组合为一个整体 步骤二&#xff1a; 将亿图软件中的图保存为SVG格式。示范如下 在导出到…...

chatGPT结构及商业级相似模型应用调研

GPT前言 说明 ChatGPT这项技术的历史可以追溯到2018年&#xff0c;当时由Facebook实验室的团队开发出该技术&#xff0c;以开发聊天机器人为目的。随后&#xff0c;ChatGPT在2019年由来自谷歌的DeepMind团队在国际会议ICLR上发表了论文&#xff0c;其中提出了ChatGPT的技术框架…...

HarmonyOS鸿蒙原生应用开发设计- 华为分享图标

HarmonyOS设计文档中&#xff0c;为大家提供了独特的华为分享图标&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的华为分享图标内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的内容产生的侵权意外情况等&…...

Java基础-反射

代理相关 为什么需要代理&#xff1f; 代理可以无侵入式的对方法进行增强&#xff0c;而不需要修改原始方法的代码&#xff0c;这样就可以在不修改原始方法的情况下&#xff0c;对方法进行增强。 代理长什么样子&#xff1f; 代理里面就是对象要被代理的方法 Java通过什么方式…...

计算机毕设 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

# 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通…...

【转载】 Bytedance火山引擎智能拥塞控制算法 VICC

BytedanceTechBlog : 火山引擎实时、低延时拥塞控制算法的优化实践 火山引擎 网站如何利用播放器节省20%点播成本点击下面的链接进入原文:原创 翟强俊、唐辉 字节跳动技术团队 2023-10-18 11:59 发表于北京 一些专利摘要 火山引擎智能拥塞控制算法 VICC(Volcano Intelligent…...

Postman如何测试WebService接口

前言: 由于工作所需,需要使用Postman测试工具,对基于ws规范的WebService接口进行测试.在经过多种尝试后,终于找到了正确的测试方法.下面我便详细记录测试步骤,以便以后再次测试时可以拿来主义. 第一步:确保WebService服务端正常启动(注意服务端各个接口发布的url地址) 第二步…...

微服务-Eureka

文章目录 提供者与消费者Eureka注册中心搭建EurekaServer服务注册服务发现项目结构 提供者与消费者 Eureka注册中心 服务消费者该如何获取服务提供者的地址信息&#xff1f; 服务提供者启动时向eureka注册自己的信息 eureka保存这些信息 消费者根据服务名称向eureka拉取提供者信…...

超声电机工作原理

超声波电机的工作原理 在压电陶瓷振子上加高频交流电压时&#xff0c;利用逆压电效应或电致伸缩效应使定子产生微观机械振动。并将这种振动通过共振放大和摩擦耦合变换成旋转或直线型运动。 超声波驱动有两个前提条件&#xff1a; 需在定子表面激励出稳态的质点椭圆运动轨迹…...

基于人工蜂鸟优化的BP神经网络(分类应用) - 附代码

基于人工蜂鸟优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于人工蜂鸟优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.人工蜂鸟优化BP神经网络3.1 BP神经网络参数设置3.2 人工蜂鸟算法应用 4.测试结果…...

两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称,根据属性名称处理两个list

需求:两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称.要求根据传入的属性(多个)判断两个list中是否有重复的对象, 如果重复则删除数据库的list, 然后合并两个list. /*** 处理导入和数据库重复数据* param list* param l…...

为什么C++能搜到的框架介绍都好抽象?

为什么C能搜到的框架介绍都好抽象&#xff1f; 那是因为c每次都要自建生态 随便一个库发展到一定阶段&#xff0c;它就开始跨界&#xff0c;做得又大又全 结果就是&#xff0c;虽然都叫c&#xff0c;但其实是由一大堆不同生态组成的统称 c跟c的差异&#xff0c;比java跟c的差…...

人工智能(6):机器学习基础环境安装与使用

1 库的安装 整个机器学习基础阶段会用到Matplotlib、Numpy、Pandas等库&#xff0c;为了统一版本号在环境中使用&#xff0c;将所有的库及其版本放到了文件requirements.txt当中&#xff0c;然后统一安装 新建一个用于人工智能环境的虚拟环境 mkvirtualenv ai matplotlib3.8…...

电力巡检/电力抢修行业解决方案:AI+视频技术助力解决巡检监管难题

一、行业背景 随着国民经济的蓬勃发展&#xff0c;工业用电和居民用电需求迅速增加&#xff0c;电厂、变电站、输电线路高负荷运转&#xff0c;一旦某个节点发生故障&#xff0c;对生产、生活造成巨大的影响。目前电力行业生产现场人员、设备较多&#xff0c;而生产监督员有限…...

区块链轻节点的问答

EOS的nodeos并没有获取merkle proof的功能&#xff0c;那应该怎样获取merkle proof nodeos&#xff08;EOS区块链节点软件&#xff09;本身并不提供Merkle Proof的功能&#xff0c;而是全节点或其他数据源通常提供Merkle Proof。获取Merkle Proof的过程通常需要与全节点或区块浏…...

常用Web安全扫描工具汇整

漏洞扫描是一种安全检测行为&#xff0c;更是一类重要的网络安全技术&#xff0c;它能够有效提高网络的安全性&#xff0c;而且漏洞扫描属于主动的防范措施&#xff0c;可以很好地避免黑客攻击行为&#xff0c;做到防患于未然。 1、AWVS Acunetix Web Vulnerability Scanner&a…...

查看当前cmake版本支持哪些版本的Visual Studio

不同版本的的cmake对Visual Studio的版本支持不同&#xff0c;以下图示展示了如何查看当前安装的cmake支持哪些版本的Visual Studio。 1.打开cmake-gui 2.查看cmake支持哪些版本的Visual Studio...

岩土工程桥梁监测中智能振弦传感器的应用方案

岩土工程桥梁监测中智能振弦传感器的应用方案 岩土工程桥梁监测是重要的安全保障措施&#xff0c;而智能振弦传感器是其中一种有效的监测手段。它可以通过测量桥梁振动的频率和幅值&#xff0c;监测桥梁的健康状态&#xff0c;预测可能出现的问题&#xff0c;并及时采取措施进…...

二相四线步进电机驱动全解析:从原理到Proteus仿真避坑指南

二相四线步进电机驱动全解析&#xff1a;从原理到Proteus仿真避坑指南 在工业自动化与嵌入式开发领域&#xff0c;步进电机因其精准的位置控制能力成为不可或缺的执行元件。而二相四线制步进电机凭借结构简单、成本低廉的优势&#xff0c;尤其受到电子工程师和创客群体的青睐。…...

告别SQLite!用ObjectBox为Flutter应用打造高性能本地存储(含常见报错解决方案)

告别SQLite&#xff01;用ObjectBox为Flutter应用打造高性能本地存储&#xff08;含常见报错解决方案&#xff09; 在移动应用开发中&#xff0c;本地数据存储方案的选择直接影响着用户体验和应用性能。对于Flutter开发者来说&#xff0c;SQLite长期以来都是默认选择&#xff0…...

别再只盯着GNSS了!用移远EC20模组实现基站定位的完整配置流程(含免费Token申请)

移远EC20模组基站定位实战&#xff1a;从零配置到室内场景精准落地 在物联网设备定位领域&#xff0c;GNSS卫星定位长期占据主导地位&#xff0c;但鲜为人知的是&#xff0c;像移远EC20这样的LTE模组还隐藏着一个被低估的功能——基站定位。当你的智能水表安装在地下室、共享设…...

Fortran开发环境配置2024实践指南

Fortran开发环境配置2024实践指南 【免费下载链接】vscode-fortran-support Fortran language support for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-fortran-support 在科学计算与工程领域&#xff0c;Fortran语言依然保持着不可替代的…...

SIM800L新手避坑指南:从电源不稳到中文短信发送,我的踩坑实录

SIM800L实战避坑手册&#xff1a;从电源设计到中文短信的完整解决方案 第一次拿到SIM800L模块时&#xff0c;我天真地以为这不过是个"高级版蓝牙模块"。直到电源指示灯开始疯狂闪烁、串口不断吐出乱码、中文短信变成问号时&#xff0c;我才意识到自己掉进了技术深坑。…...

突破数据采集困境:Easy-Scraper 重构网页信息提取范式

突破数据采集困境&#xff1a;Easy-Scraper 重构网页信息提取范式 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 在数据驱动决策的时代&#xff0c;网页数据采集如同挖掘数字金矿。但传统工具往往陷入…...

Python开源代码管理避坑实战:从Git高级操作到Docker环境配置

前言&#xff1a;为什么你总在开源门前徘徊&#xff1f; “这个项目看起来好复杂&#xff0c;我连代码都看不懂...” “提交PR会不会被大佬嘲笑&#xff1f;” “环境配置又报错了&#xff0c;算了&#xff0c;下次再说吧” 如果你有过这些想法&#xff0c;别担心&#xff…...

告别Transformer?手把手复现SegNeXt语义分割模型(附PyTorch代码)

从零实现SegNeXt&#xff1a;用纯卷积架构挑战Transformer的语义分割霸主地位 在计算机视觉领域&#xff0c;语义分割技术正经历着一场静默的革命。当大多数研究者将目光聚焦于Transformer架构时&#xff0c;SegNeXt却用纯粹的卷积神经网络&#xff08;CNN&#xff09;设计刷新…...

Struts2拦截器实战:从零构建权限控制与日志记录

1. Struts2拦截器机制解析 Struts2拦截器是框架最核心的机制之一&#xff0c;它采用AOP&#xff08;面向切面编程&#xff09;思想&#xff0c;在Action执行前后插入自定义逻辑。想象一下拦截器就像地铁安检系统&#xff1a;每个乘客&#xff08;请求&#xff09;都必须经过安检…...

Windows Defender完全卸载终极指南:彻底移除系统安全组件的完整解决方案

Windows Defender完全卸载终极指南&#xff1a;彻底移除系统安全组件的完整解决方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.c…...