首页 > 其他分享 >13、STM32MP157A-HDMI移植

13、STM32MP157A-HDMI移植

时间:2024-08-31 17:51:54浏览次数:12  
标签:13 STM32MP157A HDMI 引脚 pinctrl regulator LCD 内核

1、介绍

​ STM32MP157A 系列 SoC 中默认没有 HDMI 相关控制器, FS-MP1A 使用 SiI9022 芯片将RGB 信号转化为 HDMI 信号。 STM32MP157A 集成 LTDC(LCD-TFT Display Controller),提供一个 24bit RGB 并行接口用于连接到各种 LCD 和 TFT 面板

​ 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 接口用于配置。

在这里插入图片描述

​ SiI9022 芯片通过 I2C5 总线与 SoC 进行交互,通过 SoC 的 LCD_PCLK、 LCD_VSYNC、LCD_HSYNC、 LCD_DEN 与 RGB 信号线来进行图像信号的传输,通过 I2S2 总线进行音频数据的传输。

在这里插入图片描述

原理图网络编号对应管脚管脚功能管脚功能码
I2C5_SCLPA11I2C5_SCLAF4
I2C5_SDAPA12I2C5_SDAAF4
HDMI_RSTPA13GPIO
HDMI_INTPA14INT
原理图网络编号对应管脚管脚功能管脚功能码
LCD_R0PI15LCD_R0AF14
LCD_R1PJ0LCD_R1AF14
LCD_R2PJ1LCD_R2AF14
LCD_R3PJ2LCD_R3AF14
LCD_R4PJ3LCD_R4AF14
LCD_R5PJ4LCD_R5AF14
LCD_R6PJ5LCD_R6AF14
LCD_R7PJ6LCD_R7AF14
LCD_G0PJ8LCD_G0AF14
LCD_G1PJ7LCD_G1AF14
LCD_G2PJ10LCD_G2AF14
LCD_G3PJ19LCD_G3AF14
LCD_G4PJ11LCD_G4AF14
LCD_G5PK0LCD_G5AF14
LCD_G6PK1LCD_G6AF14
LCD_G7PK2LCD_G7AF14
LCD_B0PJ12LCD_B0AF14
LCD_B1PJ13LCD_B1AF14
LCD_B2PJ14LCD_B2AF14
LCD_B3PJ15LCD_B3AF14
LCD_B4PK3LCD_B4AF14
LCD_B5PK4LCD_B5AF14
LCD_B6PK5LCD_B6AF14
LCD_B7PK6LCD_B7AF14
LCD_PCLKPI14LCD_PCLKAF14
LCD_DENPK7LCD_DENAF14
LCD_HSYNCPI12LCD_HSYNCAF14
LCD_VSYNCPI13LCD_VSYNCAF14

主要还是使用 RGB 接口引脚获取显示数据, SiI9022A使用 I2C 来进行配置,这里使用 STM32MP1 的 I2C5 接口。

2、修改步骤

1、配置I2C5控制器引脚,硬件适配

2、配置LDTC, 硬件适配

添加 i2c5 及 sii9022 内容

修改 arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi 文件,在文件末尾添加如下内容:

IIC节点追加HDMI节点

&i2c5 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&i2c5_pins_a>;
    pinctrl-1 = <&i2c5_pins_sleep_a>;   //配置了 I2C2 的两个 pinmux 设置。
    i2c-scl-rising-time-ns = <100>; 
    i2c-scl-falling-time-ns = <7>; 
    clock-frequency = <100000>; 
    /* spare dmas for other usage */ 
    /delete-property/dmas; 
    /delete-property/dma-names; 
    status = "okay";
    hdmi-transmitter@39 { 
        compatible = "sil,sii9022";
        reg = <0x39>; 
        iovcc-supply = <&v3v3_hdmi>; 
        cvcc12-supply = <&v1v2_hdmi>; 
        reset-gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;   // PA13 低电平有效
        interrupts = <14 IRQ_TYPE_EDGE_FALLING>;   // PA14 下降沿
        interrupt-parent = <&gpioa>; 
        #sound-dai-cells = <0>; 
        status = "okay";
        ports { 
            #address-cells = <1>; 
            #size-cells = <0>; 
            port@0 { 
                reg = <0>;
                sii9022_in: endpoint { 
                    remote-endpoint = <&ltdc_ep0_out>;
                };
            };
        };
    };
};

在这里插入图片描述

这里只是告诉了 HDMI 从 LTDC 接口获取数据,还需要告诉 LTDC 节点我们数据输出到HDMI

分析:

pinctrl-0 = <&i2c5_pins_a>;

pinctrl-1 = <&i2c5_pins_sleep_a>;

 		i2c5_pins_a: i2c5-0 {
 360         pins {

 361             pinmux = <STM32_PINMUX('A', 11, AF4)>, /* I2C5_SCL */
 362                  <STM32_PINMUX('A', 12, AF4)>; /* I2C5_SDA */
 363             bias-disable;
 364             drive-open-drain;
 365             slew-rate = <0>;
 366         };                                                                                                                    
 367     };
 368 
 369     i2c5_pins_sleep_a: i2c5-1 {
 370         pins {
 371             pinmux = <STM32_PINMUX('A', 11, ANALOG)>, /* I2C5_SCL */
 372                  <STM32_PINMUX('A', 12, ANALOG)>; /* I2C5_SDA */
 373 
 374         };
 375     };
pinmux
 是一种设备树属性,用于指定微控制器引脚的复用配置。它确定了每个引脚在特定外设(如 I2C、SPI、UART、PWM 等)中的功能。
在设备树中,
pinmux 属性用于配置引脚的备用功能(Alternate Function)。它可以将引脚设置为不同的外设功能,确保系统能够正确地使用硬件外设。
STM32_PINMUX
 是一个宏定义,通常用于在设备树中配置 STM32 微控制器引脚的功能。这个宏将引脚的端口、引脚号和备用功能结合起来,以生成设备树中使用的配置值。
宏定义: STM32_PINMUX(PORT, PIN, FUNCTION)
PORT: 引脚所在的端口(如 'A', 'B', 'C' 等)。
PIN: 引脚编号(如 0, 1, 2 等)。
FUNCTION: 引脚的备用功能模式(如 GPIO, AF1, AF2, ANALOG 等)。
这个宏简化了设备树中的引脚配置,确保正确地将引脚设置为所需的功能模式。

AF4 PA11 PA12(stm32mp157a.pdf)

在这里插入图片描述

添加 ltdc内容

修改

arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件,在文件末尾添加如下内容:

&ltdc { 
    pinctrl-names = "default", "sleep"; 
    pinctrl-0 = <&ltdc_pins_b>; 
    pinctrl-1 = <&ltdc_pins_sleep_b>; 
    status = "okay"; 
    port { 
        #address-cells = <1>; 
        #size-cells = <0>; 
        ltdc_ep0_out: endpoint@0 { 
            reg = <0>; 
            remote-endpoint = <&sii9022_in>; 
        }; 
    }; 
};

添加 电源 内容

修改

arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件,在根节点末尾添加如下内容:

v3v3_hdmi: regulator-v3v3-hdmi { 
    compatible = "regulator-fixed";
    regulator-name = "v3v3_hdmi "; 
    regulator-min-microvolt = <3300000>;  // 最大最小电压
    regulator-max-microvolt = <3300000>; 
    regulator-always-on;  // 常开
    regulator-boot-on;    // 开机开
};

v1v2_hdmi: regulator-v1v2-hdmi { 
    compatible = "regulator-fixed"; 
    regulator-name = "v1v2_hdmi"; 
    regulator-min-microvolt = <1200000>; 
    regulator-max-microvolt = <1200000>; 
    regulator-always-on; 
    regulator-boot-on; 
};

配置内核:

linux@ubuntu:$ make menuconfig 
Device Drivers ---> 
    Graphics support ---> 
        <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> 
        <*> DRM Support for STMicroelectronics SoC Series 
        Display Interface Bridges ---> 
                <*> Silicon Image sii902x RGB/HDMI bridge
3、编译内核及设备树:

linux@ubuntu:$ make -j4 uImage dtbs LOADADDR=0xC2000040

1. make
解释: 
make 是一个构建自动化工具,用于根据 
Makefile 中的指令构建项目。在这里,它用于编译 Linux 内核及其相关组件。
2. -j4
解释: 这个选项告诉 
make 使用 4 个并行线程来加速构建过程。
-j 后面跟的数字表示同时进行的任务数量。使用并行构建可以显著缩短编译时间,尤其是在多核处理器上。
3. uImage
解释: 
uImage 是 Linux 内核的一个目标文件,它是经过压缩和头信息处理的内核映像格式,通常用于嵌入式系统中。
uImage 格式是由 
mkimage 工具创建的,适用于 U-Boot 引导加载器。
4. dtbs
解释: 
dtbs 指代设备树二进制文件(Device Tree Blobs)。这些文件描述了硬件的布局和配置,内核使用这些文件来正确地初始化和配置硬件设备。
5. LOADADDR=0xC2000040
解释: 这个环境变量 
LOADADDR 用于设置内核的加载地址。
0xC2000040 是一个十六进制地址,指定内核在内存中的加载位置。这个地址通常由启动加载器(如 U-Boot)在加载内核时使用。设置正确的加载地址是确保内核可以正确运行的关键。
综上所述
整个命令的作用是使用 make 工具并行编译(使用 4 个线程),生成一个 uImage 格式的 Linux 内核映像和设备树二进制文件(DTBs),并设置内核的加载地址为 0xC2000040。
这是在嵌入式系统开发中常见的编译步骤,确保生成的内核映像和设备树文件可以在目标硬件上正确运行。
cp arch/arm/boot/uImage /tftpboot/
cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb /tftpboot/
cp arch/arm/boot/dts/stm32mp157a-fsmp1a*.dtb /tftpboot/

run bootcmd_pxe

在这里插入图片描述

标签:13,STM32MP157A,HDMI,引脚,pinctrl,regulator,LCD,内核
From: https://blog.csdn.net/lyyaj/article/details/141756027

相关文章

  • 【每日一题】LeetCode 1343.大小为K且平均值大于等于阈值的子数组数目(数组、滑动窗口)
    【每日一题】LeetCode1343.大小为K且平均值大于等于阈值的子数组数目(数组、滑动窗口)题目描述给定一个整数数组arr和两个整数k和threshold,要求找出数组中长度为k且平均值大于等于threshold的子数组的数量。输入格式arr:一个整数数组。k:子数组的长度。thres......
  • 第13篇 在Linux上部署vue项目,并通过nginx代理
    如何在Linux服务器上部署Vue项目1.在本地电脑打开vscode,进入Termial,切换到项目所在的目录以项目运行在vscode为例,在调试窗口输入npmrunbuild待命令执行完毕之后,在项目目录下会生成dist文件夹,如下图2.创建一个运行文件,名字是:server.jsserver.js中的内容如下:constexpress......
  • (163)时序收敛--->(13)时序收敛十三
    1目录(a)FPGA简介(b)Verilog简介(c)时钟简介(d)时序收敛十三(e)结束1FPGA简介(a)FPGA(FieldProgrammableGateArray)是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不......
  • 13.文件处理
    13.文件处理13.1引言内存中数据的存储是暂时的。文件用于数据的持久化--数据的永久保留。计算机将文件存储在二次存储设备上,如硬盘、CD、DVD、闪存和磁带。13.2文件和流(FilesandStreams)C++将文件简单的看作一系列字节。每个文件以end-of-file标记或在操作系统维护的......
  • C++ 135类和对象_面像对像_多态
    135类和对象_面像对像_多态学习内容 1.抽象类 2.虚函数 3.纯虚函数动态多态满足条件1.有继承关系2.子类重写父类函数3.用父类的函数指针指向子类的对象AnimalBaseModel&animal代码#include<iostream>usingnamespacestd;//cout在这里,没有它会报错#includ......
  • day13打卡
    树左下角值classSolution{public:voidtraversal(TreeNoderoot,intdepth,int&ret,int&maxdepth){if(root->left==nullptr&&root->right==nullptr){if(depth>maxdepth){maxdepth=depth;ret=root->val;}}if(root->......
  • 1339:【例3-4】求后序遍历
    第一步:    找根节点(先序遍历:根,左子树,右子树)第二步:     找根节点的左子树(先序遍历:左子树,根,右子树)第三步:     找根节点的右子树模版代码:(满分代码)#include<bits/stdc++.h>usingnamespacestd;strings1;//先序遍历strings2;//中序遍历//l......
  • [COCI2012-2013#2] INFORMACIJE 题解
    前言题目链接:洛谷。题意简述你需要构造一个\(1\simn\)的排列\(a\),满足\(m\)个条件,格式如下:1xyv:\(\max\limits_{i=l}^ra_i=v\)。2xyv:\(\min\limits_{i=l}^ra_i=v\)。题目分析首先这个最值很难受,考虑能不能转化成我们喜欢的二元关系......
  • 【MySQL 13】视图 (带思维导图)
    文章目录......
  • 软件解决显卡欺骗器,HDMI欺骗器,如何使用ToDesk免费功能
    大家遇到电脑没有显示屏,或者显示屏的显卡太老,无法正常打开时,常常会给自己备上一个显卡欺骗器和HDMI欺骗器,虽说它们都能模拟显示屏正常使用环境,但这种方法通常需要额外的硬件支持,对于急用的小伙伴来说,这个方法很难快速解决显示屏难题。小社长最近发现ToDesk远程控制软件的虚拟屏......