aceshiyuanli 发表于 2020-12-22 10:01:45

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

本帖最后由 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。

二、设备树配置如下图
三、画面效果如下,非常模糊

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

wjy 发表于 2020-12-22 13:43:32

你程序那张图第84行改过吗?我记得默认是24,你改成24试试。

aceshiyuanli 发表于 2020-12-22 17:45:33

wjy 发表于 2020-12-22 13:43
你程序那张图第84行改过吗?我记得默认是24,你改成24试试。

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

PostmanLinux 发表于 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中做响应的配置。
如果这个方法对你有进展的话,欢迎再交流~

aceshiyuanli 发表于 2020-12-25 14:12:32

PostmanLinux 发表于 2020-12-22 19:38
最近也遇到了这个情况,后来调试发现是核心板给的是8位数据,但LCD显示确实6位的数值。
根据设备树 LCD ...
我也是这样的情况,mxsfb.c中代码摘录如下:
                if (pixfmt_is_equal(var, def_rgb666)) {
                //if (1) {
                  /* 24 bit to 18 bit mapping */
                  rgb = def_rgb666;
                  lsydebug("   24 bit to 18 bit mapping ------------\r\n");
                } else {
                  rgb = def_rgb888;   //设备树配置成bits-per-pixel = <24>;bus-width = <18>; 走该分支
                  lsydebug("   def_reg888------------\r\n");
                }

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

备注:我强制if(1)走if分支,然后qt程序就无法显示了。
页: [1]
查看完整版本: imx6ul芯片LCD电路硬件设计RGB低2bit拉低,软件配置实现RGB888转RGB666,但是画面...