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

Linux学习第56天:RGB转HDMI

Linux版本号4.1.15   芯片I.MX6ULL                                 大叔学Linux    品人间百味  思文短情长


本章的思维导图如下:

1.RGB转HDMI简介

        RGB转HDMI,其实不是原生的HDMI,本质上还是RGB.

        IIC接口

2.硬件原理图分析

        IIC接口

3.实验程序编写

1)修改设备树

(1)HDMI 模块 IO 节点信息添加

        2部分:RGB接口、IIC接口。

        打开 imx6ull-alientek-emmc.dts 文件,在 iomuxc 节点下的 imx6ul-evk 子节点里面加入如下内容:

1 pinctrl_hdmi_dat: hdmidatgrp {
2 fsl,pins = <
3 MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x49
4 MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x49
5 MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x49
6 MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x49
7 MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x49
8 MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x49
9 MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x49
10 MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x49
11 MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x49
12 MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x49
13 MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x49
14 MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x49
15 MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x49
16 MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x49
17 MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x49
18 MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x51
19 MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x49
20 MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x49
21 MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x49
22 MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x49
23 MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x49
24 MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x49
25 MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x49
26 MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x49
27 >;
28 };
29
30 /* zuozhongkai HDMI RGB */
31 pinctrl_hdmi_ctrl: hdmictrlgrp {
32 fsl,pins = <
33 MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x49
34 MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x49
35 MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x49
36 MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x49
37 >;
38 };
39
40 /* zuozhongkai SII902X INT*/
41 pinctrl_sii902x: hdmigrp-1 {
42 fsl,pins = <
43 MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x11
44 >;
45 };

在 iomuxc_snvs 节点下的 imx6ul-evk 子节点里面加入如下 RGB 转 HDMI 模块复位引脚信息,需要添加的内容如下:

1 ts_reset_hdmi_pin: ts_reset_hdmi_mux {
2 fsl,pins = <
3 MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x49
4 >;
5 };

(2)sii902x 节点创建


         在 I2C2 节点下创建 sil902x 芯片子节点。

1 sii902x: sii902x@39 {
2 compatible = "SiI,sii902x";
3 pinctrl-names = "default";
4 pinctrl-0 = <&pinctrl_sii902x>;
5 interrupt-parent = <&gpio1>;
6 interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
7 irq-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
8 mode_str = "1280x720M@60";/*mode_str 设置屏幕的分辨率帧率,这里设置为 1280*720,帧率为 60。*/
9 bits-per-pixel = <16>;
10 resets = <&sii902x_reset>;
11 reg = <0x39>;
12 status = "okay";
13 };

        在“/”节点下创建名为“sii902x_reset”的子节点,这个子节点用于描述 sii902x 的复位 IO,节点内容如下所示:

1 sii902x_reset: sii902x-reset {
2 compatible = "gpio-reset";
3 reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
4 reset-delay-us = <100000>;
5 #reset-cells = <0>;
6 status = "disabled";
7 };

(3)修改 lcdif 节点下的像素极性


         修改一下像素时钟极性属性 pixelclk-active, lcdif 节点下的其他属性全部都不需要修改!只需要将 pixelclk-active 改为 1。

(4)屏蔽其他复用的IO 

        RGB 转 HDMI 模块的 RESET 和 INT 这两个引脚作为 GPIO 使用,对应 GPIO5_IO09 和GPIO1_IO09。
 

 2)使能内核自带的sii902x驱动

        配置路径如下:

-> Device Drivers

        -> Graphics support

                -> Frame buffer Devices

                        -> <*> Si Image SII9022 DVI/HDMI Interface Chip

        使能以后编译一下内核。

3)修改sii902x驱动

        sii902x_poweron 和 sii902x_poweroff 函数如下所示:

1 static void sii902x_poweron(void)
2 {
3 /* Turn on DVI or HDMI */
4 i2c_smbus_write_byte_data(sii902x.client, 0x1A, 0x00);
5 return;
6 }
7 8
static void sii902x_poweroff(void)
9 {
10 /* disable tmds before changing resolution */
11 i2c_smbus_write_byte_data(sii902x.client, 0x1A, 0x10);
12 return;
13 }

        配置 sii902x 的中断 IO,修改后的 mxsfb_get_of_property 函数如下所示:
 

/*
第 6、 22 和 23 这三行就是新添加进去的, mxsfb_get_of_property 函数
其他部分均不用做任何修改!
*/
1 static int mxsfb_get_of_property(void)
2 {
3 struct device_node *np = sii902x.client->dev.of_node;
4 const char *mode_str;
5 int bits_per_pixel, ret;
6 int irq_pin;
7 8
ret = of_property_read_string(np, "mode_str", &mode_str);
......
19 sii902x.mode_str = mode_str;
20 sii902x.bits_per_pixel = bits_per_pixel;
21
22 irq_pin = of_get_named_gpio(np, "irq-gpios", 0);
23 gpio_direction_output(irq_pin, 1);
24
25 return ret;
26 }

        在 mxsfb_sii902x.c 文件里面添加如下头文件:

#include <linux/of_gpio.h>

         文件修改完成,重新编译 linux 内核。

4.RGB转HDMI测试

        使用新编译得到的 zImage 和 imx6ull-alientek-emmc.dtb 启动开发板


本笔记为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,未经允许不得用于商业用途。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Radiant Photo 1.4.1 AI智能完美照片修图插件支持PS ai beta
  • 珠海市举办“数智赋能产业转型与创新培训专场”活动
  • 【天机学堂】面试总结
  • 繁简之争:为什么手机芯片都是 ARM
  • 【Material-UI】Autocomplete 组件的局限性(Limitations)详解
  • [最短路SPFA]--启动!!!!!
  • 微信小程序开发优惠券制作源码
  • 分享一个基于人脸识别的小区物业管理系统Spring Boot(源码、调试、LW、开题、PPT)
  • Cocos Creator2D游戏开发(10)-飞机大战(8)-计分和结束
  • Oracle的RAC集群安装和配置 NFS 共享存储(NAS共享存储)
  • pytest之fixture
  • 过期知识:thinkphp5 使用migrate给现有的数据表新增表字段
  • 爬虫数据模拟真实设备请求头User-Agent生成(fake_useragent:一个超强的Python库)
  • 【第四章】测试理论与方法 - 黑盒测试
  • 最全面的Python重点知识汇总,建议收藏!
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Cumulo 的 ClojureScript 模块已经成型
  • Docker 笔记(2):Dockerfile
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java|序列化异常StreamCorruptedException的解决方法
  • Laravel 中的一个后期静态绑定
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • PHP的类修饰符与访问修饰符
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 驱动程序原理
  • 使用Gradle第一次构建Java程序
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 找一份好的前端工作,起点很重要
  • raise 与 raise ... from 的区别
  • 国内开源镜像站点
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (02)Hive SQL编译成MapReduce任务的过程
  • (3)选择元素——(17)练习(Exercises)
  • (4.10~4.16)
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (Matlab)使用竞争神经网络实现数据聚类
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • ***测试-HTTP方法
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net 7 上传文件踩坑
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET Core使用NPOI导出复杂,美观的Excel详解