13、STM32MP157A-HDMI移植

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

在这里插入图片描述

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值