嵌入式爱好者

查看: 711|回复: 4

[Linux] imx6ul芯片LCD电路硬件设计RGB低2bit拉低,软件配置实现RGB888转RGB666,但是画面...

[复制链接]

4

主题

10

帖子

15

积分

扫一扫,手机访问本帖
发表于 2020-12-22 10:01:45 | 显示全部楼层 |阅读模式
50贡献
本帖最后由 aceshiyuanli 于 2020-12-22 10:24 编辑

如题,imx6ull驱动LCD时,原本是24bit的LCD,现在硬件设计中将888线改为666线,然后再设备树中配置也配置为666模式,结果LCD是驱动起来了,但是画面非常模糊,跪求各位大佬帮忙分析下原因。

具体项目情况按照如下几个方面阐述
(1)硬件电路
(2)软件代码:设备树配置和LCD手册
(3)画面效果

----------------------------分割线-------------------------------------

一、硬件电路设计如下图:
【R1 R2 R7】、【G1 G2 G7】、【B1 B2 B7】 各自连在一起,实际测试中也测试了手动割断线路将RGB的低2bit直接接GND。
image-20201222093000831.png

二、设备树配置如下图
image-20201222093752640.png
三、画面效果如下,非常模糊
image-20201222102111734.png

恳请各位大佬帮忙分析分析,感谢感谢!!

回复

使用道具 举报

0

主题

25

帖子

138

积分

LS1012A通行证LS1043A\46A通行证A40i/T3通行证i.MX8MM通行证RK3399通行证LS1028A通行证AM5718通行证Hi3519A通信证AM335x通行证i.MX6UL通行证i.MX RT通行证i.MX6Q通行证XX18通行证TCU通行证FDU产品通行证FCU1401通行证FCU1301通行证FCU1101通行证FCU1201通行证FCU2301/FCU2302通行证FCU2401通行证5G转接卡通行证FCU1103通行证

发表于 2020-12-22 13:43:32 | 显示全部楼层
你程序那张图第84行改过吗?我记得默认是24,你改成24试试。

点评

原本是24(也就是888模式),但是现在硬件电路设计修改成了忽略RGB的低两位,所以变成了666。所以现在将设备树中的线宽参数改成了18,屏幕很模糊。(备注:设置24的时候也是一样,很模糊)  详情 回复 发表于 2020-12-22 17:45
点评回复

使用道具 举报

4

主题

10

帖子

15

积分

 楼主| 发表于 2020-12-22 17:45:33 | 显示全部楼层
wjy 发表于 2020-12-22 13:43
你程序那张图第84行改过吗?我记得默认是24,你改成24试试。

原本是24(也就是888模式),但是现在硬件电路设计修改成了忽略RGB的低两位,所以变成了666。所以现在将设备树中的线宽参数改成了18,屏幕很模糊。(备注:设置24的时候也是一样,很模糊)

点评

最近也遇到了这个情况,后来调试发现是核心板给的是8位数据,但LCD显示确实6位的数值。 根据设备树 LCD找到 驱动文件 /driver/video/fbdev/mxsfb.c 中 结构体 static const struct fb_bitfield def_rgb888[] 的 RG  详情 回复 发表于 2020-12-22 19:38
点评回复

使用道具 举报

0

主题

2

帖子

27

积分

i.MX6UL通行证

发表于 2020-12-22 19:38:28 | 显示全部楼层
本帖最后由 PostmanLinux 于 2020-12-22 19:40 编辑
aceshiyuanli 发表于 2020-12-22 17:45
原本是24(也就是888模式),但是现在硬件电路设计修改成了忽略RGB的低两位,所以变成了666。所以现在将 ...

最近也遇到了这个情况,后来调试发现是核心板给的是8位数据,但LCD显示确实6位的数值。
根据设备树 LCD找到 驱动文件 /driver/video/fbdev/mxsfb.c 中 结构体
static const struct fb_bitfield def_rgb888[] 的 RGB的len由 8 改为 6 ,通过framebuffer显示正常,但执行qt报错“Unsupported screen format: depth: 18, red_mask: 3f0000, blue_mask: 3f”
但至少在 fb驱动上的可行的,可能需要在qt中做响应的配置。
如果这个方法对你有进展的话,欢迎再交流~

点评

我也是这样的情况,mxsfb.c中代码摘录如下: 发现内核代码中发现不管设备树怎么配置,代码总是走else分支(888),但是如果能想办法让代码走到if分支,是否能解决该问题?难道跟qt也有关系? 我找了好久都找不  详情 回复 发表于 2020-12-25 14:12
点评回复

使用道具 举报

4

主题

10

帖子

15

积分

 楼主| 发表于 2020-12-25 14:12:32 | 显示全部楼层
PostmanLinux 发表于 2020-12-22 19:38
最近也遇到了这个情况,后来调试发现是核心板给的是8位数据,但LCD显示确实6位的数值。
根据设备树 LCD ...

我也是这样的情况,mxsfb.c中代码摘录如下:
  1.                 if (pixfmt_is_equal(var, def_rgb666)) {
  2.                 //if (1) {
  3.                     /* 24 bit to 18 bit mapping */
  4.                     rgb = def_rgb666;
  5.                     lsydebug("   24 bit to 18 bit mapping ------------\r\n");
  6.                 } else {
  7.                     rgb = def_rgb888;   //设备树配置成bits-per-pixel = <24>;  bus-width = <18>; 走该分支
  8.                     lsydebug("   def_reg888  ------------\r\n");
  9.                 }
复制代码


发现内核代码中发现不管设备树怎么配置,代码总是走else分支(888),但是如果能想办法让代码走到if分支,是否能解决该问题?难道跟qt也有关系?
我找了好久都找不到怎么能让代码走666分支。

备注:我强制if(1)走if分支,然后qt程序就无法显示了。
点评回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )  

GMT+8, 2021-1-19 19:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表