如题,上周末应晕哥邀请解决下小问题。
启明云端的群有挺多群友需要这个东西。硬件平台是7寸 1024x600 的ssd202 开发板,自带一个点菜系统的demo
这里直接打包发送网盘:
链接: https://pan.baidu.com/s/117lyj1uTXC-Rt66Co07wLA
提取码:fkk5
释放后在配置好交叉编译器的条件下可以直接make出来,可执行文件是 demossd
上传在这儿
几个细节注意下:
1、注意下我的代码的Makefile 依赖 SSD20X的源代码的project文件夹,
结构是这样的:
├── LVGL7.10-SSD202
│ ├── export-ssd20x-gcc.sh
│ ├── gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf
│ ├── linux_frame_buffer
├── project
2、释放出来代码后阅读下Makefile 或者修改一下自己的结构让它可以调用到project 的目录。
3 、另外ssd20x 这个平台比较不一样, 使用fb之前要配置硬件信息,
我是无脑直接搬运来用,可以阅读一下 sstardisp.c, 我直接搬运ssd20x 开发板源码的 JpegPlayer
4、这个LVGL7.10 的lv_demo_music 被我改了些参数,下拉窗大小和原装的demo程序不一样。 我就不改回去了反正就是改着玩的。
5、注意修改双缓的缓冲区大小
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)
FB_BUFFER_LEN = 4800
好了编译跑一下飞起来吧。
视频是跑printer demo 的效果
以下由 @哇酷小管家 从楼主百度网盘下载
------------------------------------
本站下载: LVGL7.10-linux_framebuffer-SSD202-TEVET-PACK-20210223.tar.7z (约65M)
最近编辑记录 TeveT (2021-02-23 23:48:29)
离线
大佬牛皮的飞起
离线
在大神的热心帮助下demo跑起来了,滑动的时候几乎没有撕裂感,比单缓冲好了几条街!
离线
不会有撕裂的,你可以用手机超级慢动作拍一下就知道了,
在大神的热心帮助下demo跑起来了,滑动的时候几乎没有撕裂感,比单缓冲好了几条街!
离线
光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧
离线
嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么
光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧
离线
嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么
达克罗德 说:光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧
就怕切缓冲buff地址时候,如果发生在读帧过程中,一样会导致画面撕裂。感觉和硬件设计和驱动程序有关,也许某些SOC硬件可以保证直接切换地址不会导致问题。
不过我看许多SOC都还是明确要求在帧中断去切缓冲。
DRM的文档有关于这个双缓冲和VSync的说明:
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-double-buffered.c
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-vsync.c
If you run this example, you will notice that there is almost no flickering,
* anymore. The buffers are now swapped as a whole so each new frame shows
* always the whole new image. If you look carefully, you will notice that the
* modeset.c example showed many screen corruptions during redraw-cycles.
*
* However, this example is still not perfect. Imagine the display-controller is
* currently scanning out a new image and we call drmModeSetCrtc()
* simultaneously. It will then have the same effect as if we used a single
* buffer and we get some tearing. But, the chance that this happens is a lot
* less likely as with a single-buffer. This is because there is a long period
* between each frame called vertical-blank where the display-controller does
* not perform a scanout. If we swap the buffers in this period, we have the
* guarantee that there will be no tearing. See the modeset-vsync.c example if
* you want to know how you can guarantee that the swap takes place at a
* vertical-sync.
根据这个理解,即使硬件支持任意切缓冲不会导致画面撕裂,也还是会有问题。当绘图刷新率不稳定的时候,有可能会导致掉帧现象。你可以想象在一帧的时间里,如果不在v-blank时间来切缓冲,有可能刚好错过当前这一帧的数据。所以PC游戏里一般有个选项,锁定帧刷新到显卡vsync
离线
高手,学习了
TeveT 说:嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么
达克罗德 说:光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧
就怕切缓冲buff地址时候,如果发生在读帧过程中,一样会导致画面撕裂。感觉和硬件设计和驱动程序有关,也许某些SOC硬件可以保证直接切换地址不会导致问题。
不过我看许多SOC都还是明确要求在帧中断去切缓冲。
DRM的文档有关于这个双缓冲和VSync的说明:
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-double-buffered.c
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-vsync.cIf you run this example, you will notice that there is almost no flickering,
* anymore. The buffers are now swapped as a whole so each new frame shows
* always the whole new image. If you look carefully, you will notice that the
* modeset.c example showed many screen corruptions during redraw-cycles.
*
* However, this example is still not perfect. Imagine the display-controller is
* currently scanning out a new image and we call drmModeSetCrtc()
* simultaneously. It will then have the same effect as if we used a single
* buffer and we get some tearing. But, the chance that this happens is a lot
* less likely as with a single-buffer. This is because there is a long period
* between each frame called vertical-blank where the display-controller does
* not perform a scanout. If we swap the buffers in this period, we have the
* guarantee that there will be no tearing. See the modeset-vsync.c example if
* you want to know how you can guarantee that the swap takes place at a
* vertical-sync.根据这个理解,即使硬件支持任意切缓冲不会导致画面撕裂,也还是会有问题。当绘图刷新率不稳定的时候,有可能会导致掉帧现象。你可以想象在一帧的时间里,如果不在v-blank时间来切缓冲,有可能刚好错过当前这一帧的数据。所以PC游戏里一般有个选项,锁定帧刷新到显卡vsync
离线
感谢楼主指导, 终于搞定,
这一步一定要做:
5、注意修改双缓的缓冲区大小
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)FB_BUFFER_LEN = 4800
离线
哈哈哈哈,真的,搞这个需要开脑洞
不过怎么感觉你这个号是晕哥的马甲?
感谢楼主指导, 终于搞定,
这一步一定要做:
5、注意修改双缓的缓冲区大小
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)FB_BUFFER_LEN = 4800
离线
达克罗德说的没错
离线
感谢楼主分享,把应用程序和文件系统一起打包 rootfs.ubifs:
rootfs.ubifs.lvgl_demo(20210301).7z
u-boot下用tftp烧录:
ubi part UBI;tftp 0x20000000 rootfs.ubifs; ubi write 0x20000000 rootfs ${filesize};reset
离线
或者可以烧录这个rootfs.ubi文件: rootfs.ubifs.lvgl_demo(20210301).7z
烧录命令:
nand erase 0xf20000 0xA000000;tftp 0x20000000 rootfs.ubi;nand write 0x20000000 0xf20000 ${filesize};reset;
离线
一体打包烧录固件:
ssd202-7inch-1024x600-spinand-20210302.7z
u-boot 烧录指令:
setenv serverip 192.168.1.99;setenv ipaddr 192.168.1.33;nand erase 0x0 0x8000000;tftp 0x20000000 ssd202-7inch-1024x600-spinand-20210302.bin;nand write 0x20000000 0x0 ${filesize};
或官方烧录器烧录 (非常慢,不推荐!):
离线
感谢大佬分享,一步到位,
一体打包烧录固件:
ssd202-7inch-1024x600-spinand-20210302.7zu-boot 烧录指令:
setenv serverip 192.168.1.99;setenv ipaddr 192.168.1.33;nand erase 0x0 0x8000000;tftp 0x20000000 o/sysimage-nand.img;nand write 0x20000000 0x0 ${filesize};
官方烧录器烧录:
https://whycan.com/files/members/5985/2021-03-02_124657.png
离线
在楼主的基础上增加rotation,开源了:
https://github.com/caszhao/ssd_lvgl
离线
大佬另开个帖子呀,顶上去
在楼主的基础上增加rotation,开源了:
https://github.com/caszhao/ssd_lvgl
离线
大佬另开个帖子呀,顶上去
caszhao 说:在楼主的基础上增加rotation,开源了:
https://github.com/caszhao/ssd_lvgl
没事,需要的人才需要,不需要的也不会需要
离线
楼主啊,如何显示外部的jpg图片啊?有没有Demo参考一下啊
离线
详细请看 JpegPlayer ,代码包有的
楼主啊,如何显示外部的jpg图片啊?有没有Demo参考一下啊
离线
TeveT 说:嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么
达克罗德 说:光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧
就怕切缓冲buff地址时候,如果发生在读帧过程中,一样会导致画面撕裂。感觉和硬件设计和驱动程序有关,也许某些SOC硬件可以保证直接切换地址不会导致问题。
不过我看许多SOC都还是明确要求在帧中断去切缓冲。
DRM的文档有关于这个双缓冲和VSync的说明:
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-double-buffered.c
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-vsync.cIf you run this example, you will notice that there is almost no flickering,
* anymore. The buffers are now swapped as a whole so each new frame shows
* always the whole new image. If you look carefully, you will notice that the
* modeset.c example showed many screen corruptions during redraw-cycles.
*
* However, this example is still not perfect. Imagine the display-controller is
* currently scanning out a new image and we call drmModeSetCrtc()
* simultaneously. It will then have the same effect as if we used a single
* buffer and we get some tearing. But, the chance that this happens is a lot
* less likely as with a single-buffer. This is because there is a long period
* between each frame called vertical-blank where the display-controller does
* not perform a scanout. If we swap the buffers in this period, we have the
* guarantee that there will be no tearing. See the modeset-vsync.c example if
* you want to know how you can guarantee that the swap takes place at a
* vertical-sync.根据这个理解,即使硬件支持任意切缓冲不会导致画面撕裂,也还是会有问题。当绘图刷新率不稳定的时候,有可能会导致掉帧现象。你可以想象在一帧的时间里,如果不在v-blank时间来切缓冲,有可能刚好错过当前这一帧的数据。所以PC游戏里一般有个选项,锁定帧刷新到显卡vsync
那是只有硬件不支持双缓冲才出现的情况,现在的芯片只要支持LCD接口都会支持双缓冲。
在线
楼主很厉害啊,可以顺便搞一下AWTK的双缓冲吗
离线
咋说,awtk 本地编译有包吗,我弄来看看
楼主很厉害啊,可以顺便搞一下AWTK的双缓冲吗
离线
咋说,awtk 本地编译有包吗,我弄来看看
duanchangstar 说:楼主很厉害啊,可以顺便搞一下AWTK的双缓冲吗
离线
好滴,感谢分享,搞搞看
TeveT 说:咋说,awtk 本地编译有包吗,我弄来看看
duanchangstar 说:楼主很厉害啊,可以顺便搞一下AWTK的双缓冲吗
离线
已经搞定了AWTK的双缓冲,使用了楼主的方法。感谢~
离线
已经搞定了AWTK的双缓冲,使用了楼主的方法。感谢~
方便分享一下diff差异文件吗?
离线
看来楼上的楼上大佬已经了解了fb的操作过程,改起来应当是大同小异哈,
duanchangstar 说:已经搞定了AWTK的双缓冲,使用了楼主的方法。感谢~
方便分享一下diff差异文件吗?
离线
duanchangstar 说:已经搞定了AWTK的双缓冲,使用了楼主的方法。感谢~
方便分享一下diff差异文件吗?
按楼主的方法做就行了
离线
都嘛系开源的东西,修改了抛上来共享下大大滴好,
如果有小毛病被鞭尸后还能共同进步,来嘛来嘛
cube 说:duanchangstar 说:已经搞定了AWTK的双缓冲,使用了楼主的方法。感谢~
方便分享一下diff差异文件吗?
按楼主的方法做就行了
最近编辑记录 TeveT (2021-05-30 12:51:20)
离线
这个SSD20X有没有公开资料?
离线
有公开啊,但是没有全部公开。
比较暧昧吧,没有TRM
这个SSD20X有没有公开资料?
离线
我自己搞了个demo,提示缺少库文件 libmi_disp.so
离线
注意下我帖子里描述的依赖路径project 还有lvgl 的Makefile
你的这个缺少的库在这个路径下面:
SDK_LIBS=../project/release/nvr/i2m/common/glibc/8.2.1/mi_libs/dynamic
我自己搞了个demo,提示缺少库文件 libmi_disp.so
离线
lvgl_v8.zip
8.0的,lv_driver替换的时候注意不要把文件覆盖了。
其实lvgl的git上面有linux的移植,基于frame buffer。只要把ssd20x的特定初始化部分添加上就可以。
离线
对的这个帖子就是拉lvgl fb 改的,加入了你说的初始化部分,只是填坑
lvgl_v8.zip
8.0的,lv_driver替换的时候注意不要把文件覆盖了。
其实lvgl的git上面有linux的移植,基于frame buffer。只要把ssd20x的特定初始化部分添加上就可以。
离线
为啥我使用上传的文件之后编译会报错:
../lv_drivers/indev/evdev.c:18:10: fatal error: linux/input.h: No such file or directory
#include <linux/input.h>
^~~~~~~~~~~~~~~
compilation terminated.
make: *** [lv_drivers/indev/subdir.mk:41: lv_drivers/indev/evdev.o] Error 1
"make all" terminated with exit code 2. Build might be incomplete.
离线
@pencil
芜湖? 建议使用我网盘上传的试一下。
坛主上传的我不太清楚呢,毕竟下载要分数。
离线
我使用你的在windows本地编译也是报错,是需要将它放到服务器上编译吗?
离线
放在服务器下编译,还是报很多错,我一时也搞不明白
离线
放在服务器下编译,还是报很多错,我一时也搞不明白
注意project的目录,注意阅读一下Makefile
├── LVGL7.10-SSD202
│ ├── export-ssd20x-gcc.sh
│ ├── gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf
│ ├── linux_frame_buffer
├── project
离线
请问 我这边接入LVGL后 显示 一亮一灭 这个是怎么导致的?显示是有的。一般是哪部分引起的现象。
离线
请问 我这边接入LVGL后 显示 一亮一灭 这个是怎么导致的?显示是有的。一般是哪部分引起的现象。https://whycan.com/files/members/1813/d61c12ed6a33ecb12217fcbc4a816478.mp4
5、注意修改双缓的缓冲区大小
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)
FB_BUFFER_LEN = 4800
你的机器不是开发板的话,需要自己计算一下,修改一下
离线
@TeveT
您好 同缓存大小 我加到8192了,接入LVGL8单缓存是能正常使用的,接入这个7.10双缓的就是会闪屏,是因为在切换双缓存导致的吗?
离线
@TeveT
您好 同缓存大小 我加到8192了,接入LVGL8单缓存是能正常使用的,接入这个7.10双缓的就是会闪屏,是因为在切换双缓存导致的吗?
我代码里是写了除以2后刚好是整屏幕大小, 你的这个buffer 如果没有另作他用,我的代码不修改的前提下, 你的buffer大小也要写成固定的你的屏幕的缓冲区的2倍才行的,不会算的话你可以报上来你的屏幕尺寸大小我给你个数值也行。
离线
@TeveT
您好 同缓存大小 我加到8192了,接入LVGL8单缓存是能正常使用的,接入这个7.10双缓的就是会闪屏,是因为在切换双缓存导致的吗?
计算很简单的
我之所以修改为 4800 是因为 1024x600x4x2/1024 = 4800
H x V x 单一像素字节数量 x 2(双缓冲) / 1024
离线
@TeveT
使用网盘下载的,首先是报错了error: ‘for’ loop initial declarations are only allowed in C99 mode,在解决了这个问题之后又报错了lv_drivers/display/fbdev.c:112:12: error: variable ‘tv1’ has initializer but incomplete type
lv_drivers/display/fbdev.c:112:20: error: storage size of ‘tv1’ isn’t known
lv_drivers/display/fbdev.c:113:12: error: variable ‘tv2’ has initializer but incomplete type
lv_drivers/display/fbdev.c:113:20: error: storage size of ‘tv2’ isn’t known
离线
@pencil
交叉编译器是否有导出?
离线
哪部分
离线
@pencil
交叉编译器是否有导出?
还没,我再试一下,麻烦了
离线
@SigmaStarStudy
请问一体打包固件是如何打包出来的
离线
离线
@TeveT
楼主在将这个lvgl的demo打包时候的过程步骤能分享一下吗?我自己写了一个image.mk和demo.sh打包之后系统开机花屏且显示报错信息
The framebuffer device was opened successfully.
800x480, 32bpp
The framebuffer device was mapped to memory successfully.
unable open evdev interface:: No such file or directory
离线
@pencil
程序已经跑起来了,
你的屏幕初始化配置文件是否搞对了,分辨率,双缓大小是否能对上,
报错是没有触摸。
离线
@pencil
程序已经跑起来了,
你的屏幕初始化配置文件是否搞对了,分辨率,双缓大小是否能对上,
报错是没有触摸。
开机是这样的,它会先显示logo,然后开始花屏,什么都没有显示,我按照那个双缓冲来配置800*480就是3000
离线
@pencil
注意看下你的屏幕初始化和你的屏幕是否是对上的,开发板是CC0702I50R_1024x600.h这个头文件做的初始化序列和液晶屏显示参数传递。
你如果logo正常,那就把logo那边显示的参数拿出来,来修改这个h文件
可以看下sstardisp.c 这些相关信息。
离线
强啊,这个开发板有链接吗
离线
强啊,这个开发板有链接吗
有的,淘宝搜一下就有了,或者自己做一个。
离线
楼猪,我在移植的时候,链接动态库的时候,提示我
/usr/bin/ld: 当搜索用于 ../project/release/nvr/i2m/common/glibc/8.2.1/mi_libs/static/libmi_disp.a 时跳过不兼容的 -lmi_disp
/usr/bin/ld: 找不到 -lmi_disp
/usr/bin/ld: 当搜索用于 ../project/release/nvr/i2m/common/glibc/8.2.1/mi_libs/static/libmi_panel.a 时跳过不兼容的 -lmi_panel
/usr/bin/ld: 找不到 -lmi_panel
collect2: error: ld returned 1 exit status
这是啥情况啊
离线
@future
大佬,你这个project要在这个makefile的上一个文件目录下存在。
这个project就是ssd202开发板的一个project的压缩包解压出来的文件夹。
离线
@future
大佬,你这个project要在这个makefile的上一个文件目录下存在。
这个project就是ssd202开发板的一个project的压缩包解压出来的文件夹。
这个我已经解决了,库文件引入路径不对,但是现在屏幕上没有任何显示,就会显示一个log,下面试日志:
/mnt/usb # ls
aml_up~1.img demo dwin_set ld platfo~1.rar system~1
code_1~1.deb demossd lanter~1.deb mindmo~1.pac setup_~1.rar tvcabi~1
/mnt/usb # ./demo
client [881] connected, module:panel
[MI_PANEL_Iclient [881] connected, module:disp
nit][332]LCD env[MI_SYSCFG_GetPanelInfo 50] eTiming = 4, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 2, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 8, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 9, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 10, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 6, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 7, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 11, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 13, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 12, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 14, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 5, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 3, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 38, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 50, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 40, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 43, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 41, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 44, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 42, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 46, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 50, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 45, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 50, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 22, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 23, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 30, hdmiTx = 1 Not Fund!!!
[MI_SYSCFG_GetPanelInfo 50] eTiming = 32, hdmiTx = 1 Not Fund!!!
ironment is Invalid
sstar_FB_SetBlending 402 u8GOP=1,u8win=0 aType=1 u8constAlpha=255
The framebuffer device was opened successfully.
800x480, 32bpp
The framebuffer device was mapped to memory successfully.
么有lvgl的画面显示。
按照说点屏之前初始化,我main函数是这样改的,其他地方没有更改:
.......................
int main(void)
{
MI_PANEL_Init(E_MI_PNL_LINK_TTL); //panel 初始化
MI_DISP_Enable(0); //fb最终还是得经过disp,所以得初始化disp
/*LittlevGL init*/
lv_init();
/*Linux frame buffer device init*/
fbdev_init();
.................
离线
@future
屏幕还没点亮过么,logo能亮?屏幕参数头文件正确??
离线
@future
屏幕还没点亮过么,logo能亮?屏幕参数头文件正确??
屏幕使用官方例子可以点亮的,zk_full_security,就这个例子,然后我把这个例子程序线程删掉运行我移植的demo,就可以正常显示了,所以应该是屏幕初始化的时候没有初始化好,sstardisp.c,直接调用这个c文件里面的初始化函数后,倒是可以显示了,但是显示的颜色不对,没有头绪了,不知道哪里出错了,大佬能帮我看下吗?
离线
@future
大佬,你的现象拍照片发来看看。
另外你这个初始化没问题的话,一般不会有颜色问题。
如果是双缓冲没有弄好的话,就是要改屏幕fb的配置文件,详细看看帖子。
如果是位宽引起的颜色问题的话,查看LCD接线方式是565还是888,同时改lv_conf 来匹配你的屏幕参数
默认程序用的是888, ARGB 32bit
离线
@TeveT
老哥,已经弄好了,其实很简单啊,是我屏参数头文件用错了,找代理商要个正确的屏幕头文件就好了,移植真的是简单的一批,都写好了,哈哈,谢谢了哈,不过不知道为啥屏幕上有一个logo的影子,在白色界面上不会显示,但是深色界面上就会看出来。
最近编辑记录 future (2022-03-18 09:49:08)
离线
TeveT 说:大佬另开个帖子呀,顶上去
caszhao 说:在楼主的基础上增加rotation,开源了:
https://github.com/caszhao/ssd_lvgl没事,需要的人才需要,不需要的也不会需要
lvgl中有软件翻转rotation的设置
/*Initialize and register a display driver*/
static lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.draw_buf = &disp_buf;
disp_drv.flush_cb = fbdev_flush;
disp_drv.hor_res = LV_HOR_RES;
disp_drv.ver_res = LV_VER_RES;
//disp_drv.full_refresh = 1; // 全刷新标志
disp_drv.sw_rotate = 1; // 软件翻转标志
g_display = lv_disp_drv_register(&disp_drv);
if (g_display != NULL)
{
lv_disp_set_rotation(g_display, LV_DISP_ROT_90); // 设置翻转角度
}
printf("[%s:%d] screen rotated\n", __FUNCTION__, __LINE__);
离线
@future
残影问题,应该是屏幕初始化不对,偏压搞太高了,容易残影,久了会坏屏
如果前面你一直点这LOGO,没有显示其他东西,是静态的显示,也可能留下残影,如果有动态显示的画面,过一段时间会没掉,也就是,要搞个屏保图滚动
离线
@981378640
大佬,这个虽然可以用,但是还是硬加速的帧率高一些,体验好一些。你可以实测一下。
离线
大佬,我小白一枚,该如何无脑操作:(
离线
大佬,我小白一枚,该如何无脑操作:(
按照帖子说明应该是很无脑了,
如果不行的话贴上出错的LOG,然后一起动动脑解决一下。
离线
4800那里已经改了,fbdev.c也改了,现在我的情况是不报错,但是画面抖动,不知道为啥,单缓冲的时候没事
离线
4800那里已经改了,fbdev.c也改了,现在我的情况是不报错,但是画面抖动,不知道为啥,单缓冲的时候没事
请问下你的分辨率多大呢, 另外其他程序是否用到这块显示的保留内存?我的代码仅供参考, fb 的映射地址起点可以自己研究一下呀。
离线
@TeveT
楼主你好,我这边也遇到了相同的问题,屏幕是600*1280,应用层lvgl是480*1280,但是我的屏参是600*1280,fbdev.ini我也设置了BUFFER=6000(双buffer),但是会报错Segmentation fault (core dumped),在把BUFFER开到 BUFFER=12000,不会报错coredump,但是屏幕会一闪一闪,请问是怎么回事呢
离线
@seannaaa
不好意思现在才看到,请问问题解决了吗?
你这个 问题是驱动双换冲 map 地址没有做对的问题,我里边是写死的,测个意思。 你可以自己改掉。
离线
我用8.2的版本 分辨率800*480 不会显示会花屏
离线
我用8.2的版本 分辨率800*480 不会显示会花屏
1、屏显示头文件对不对,
2、注意双缓冲 偏移,
离线
# kill -9 902
# mount /dev/sda1 /usr/usbfold/
# cd /usr/usbfold/
# ls
app libg726.so libmi_disp.so libmi_vdec.so
demo83 libjpeg.so libmi_divp.so libmi_venc.so
demossd libjpeg.so.7 libmi_gfx.so libmi_wlan.so
libCReader.so libjpeg.so.7.0.0 libmi_hdmi.so libz.so
libDSpotter.so libmi_ai.so libmi_panel.so libz.so.1
libcjson.so libmi_ao.so libmi_rgn.so libz.so.1.2.2
libg711.so libmi_common.so libmi_sys.so
# ./demossd
client [945] connected, module:sys
DISP width: 1024,height: 600
client [945] connected, module:disp
[MI WRN ]: MI_DISP_IMPL_BindVideoLayer[4233]: VideoLayer:0 is binded
[MI WRN ]: MI_DISP_IMPL_EnableVideoLayer[3742]: VideoLayer:0 is enabled
client [945] connected, module:panel
_HalPnlIfGetInfoParamConfig 471, LinkType is not Correct (MIPI_DSI != TTL)
_DrvPnlIfExecuteQuery 609, Query:PARAM, Ret:RET_CFGERR
[MI ERR ]: MI_PANEL_IMPL_SetPanelParam[958]: mi panel set panel param failed
[MI_PANEL_Init][294]LCD environment is Invalid
init_ssd20x_disp 155 52
xres: 1024,yres: 600,line_length: 4096,eFbColorFmt: 5 finfo.smem_start = 43126784 finfo.smem_len = 4194304
The evdev device was opened successfully.
client [945] disconnected, module:panel
client [945] disconnected, module:disp
client [945] disconnected, module:sys
[MI ERR ]: MI_SYS_IMPL_Exit[3821]: gSysInitCount:2
Segmentation fault
#
我启动显示一下就死机了 client [945] disconnected 不知道咋回事
离线
@tangloong
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)
看log 应该是这里。
离线
老哥,我也买了这块板子,玩玩可以,只是价格有点贵呀,不适合做产品
离线
玩玩可以,价格贵了,不适合做产品
离线
玩玩可以,价格贵了,不适合做产品
还好吧 SSD201 我看淘宝是28左右 核心板50,SSD201对标的D1S吧,
还有SSD210 22左右,比F1C200S贵一丢丢而已
离线
想问西 lgvl好用还是minigui好用还是qt
好点?
离线
想问西 lgvl好用还是minigui好用还是qt
好点?
我验证过LVGL和QT
其他未验证。
分辨率高于720x720的场合,对显示效果要求较高的场合(比如全屏滑动,全屏翻页动画等)Qt 比较吃力。
若是LVGL,800x1280下也可以优化达到好效果。
离线
运行demo出现这个现象,求指导
离线
一般是双缓冲大小不对引起的。
需要调试可企鹅 415855548 V同号
离线