搜索
bottom↓
回复: 49

总线2.8寸TFT比不上RGB接口,怎么样做到高帧刷屏

[复制链接]

出0入0汤圆

发表于 2018-12-14 20:24:13 | 显示全部楼层 |阅读模式
如题,最近耍了一套F4 + FSMC驱动2.8寸屏,分辩率320 240,但是发现,尽管使用上了硬件总线,甚至用了DMA,效果很差,有拉窗,有闪屏。

原来搞RGB的时候,真的是可以看不到拉窗,闪屏,无缝切换,完美。。。

现在硬件总线搞,屏小了,但是无法用大缓冲,总是只能用FOR循环来刷屏,感觉这个FOR循环是个大问题啊?  照理来说,硬件总线达到45M的速度,刷什么屏都够够的,但是硬是搞不定这个小屏。。

我也打开了正点原子他们的视频,实际上还是一样的拉窗,闪屏?

可是有人 说2.8寸TFT能做到60帧,是真的不,有了解的筒子不? 难道是我打开的姿势有问题?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2018-12-14 21:19:35 | 显示全部楼层
可能不是不够快,而是帧同步的问题,需要屏主动输出帧同步信号,然后再刷屏,避免出现撕裂。

出0入85汤圆

发表于 2018-12-14 21:27:48 | 显示全部楼层
可以做到60Hz,我现在是把GBA(游戏掌机)的RGB信号(240*160,59.75Hz)点对点放到ILI9481的320*480屏幕上显示(居中),正常显示,FPGA转接。你不行,就是你的写屏太慢,不要说你用了什么高级处理器高级方法。最简单的方法是看控制器的数据手册,AC特性,算都能算出来了。一般写一个点最快都是在100ns以内,ILI9481算慢的,一个写周期要110ns,320*480满屏不能60Hz。ILI9488和HX8357比较快,一个写周期50ns,算起来100Hz也没问题。

出0入85汤圆

发表于 2018-12-14 21:31:52 | 显示全部楼层
aozima 发表于 2018-12-14 21:19
可能不是不够快,而是帧同步的问题,需要屏主动输出帧同步信号,然后再刷屏,避免出现撕裂。 ...

MCU(DBI)接口没有帧同步,就是他写屏不够快

出0入0汤圆

 楼主| 发表于 2018-12-14 21:45:11 | 显示全部楼层
本帖最后由 kinsno 于 2018-12-14 21:55 编辑
bluefeel 发表于 2018-12-14 21:27
可以做到60Hz,我现在是把GBA(游戏掌机)的RGB信号(240*160,59.75Hz)点对点放到ILI9481的320*480屏幕上 ...


不止吧。。。
我刚看了一下IL9341,写周期好象最小能达到15ns啊。。

只不过它没有内部缓冲池,所以我们只能靠指令一个点一个点写入。。

76800个点,光for,就得for(76800)次,估计速度也快不了。。。

如果你全部用FPGA肯定能实现。。

我现在是想咨询这些用MCU的人,如何能把这个做到60HZ的啊。。

出0入0汤圆

 楼主| 发表于 2018-12-14 21:58:23 | 显示全部楼层
bluefeel 发表于 2018-12-14 21:31
MCU(DBI)接口没有帧同步,就是他写屏不够快

我随便找了一个正点原子网站的PDF,IL9341,其实数据也蛮可观的啊。。
照理来说,随便10几M也是可以满足的,如果能跑到10M,也基本能让2.8TFT 刷到60HZ了。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入85汤圆

发表于 2018-12-14 22:54:13 | 显示全部楼层
kinsno 发表于 2018-12-14 21:45
不止吧。。。
我刚看了一下IL9341,写周期好象最小能达到15ns啊。。


一个写周期66ns,不知道你怎么看的。ILI9341并口屏最高理论刷屏速度1,000,000,000ns(1s)/320/240/66=197Hz。

在一个官方的文档里面有STM32F103的FSMC写240*320屏的测试速度,纯刷屏时候可以超过60fps,软件控制FSMC刷屏。DMA+FSMC速度反而更慢,因为DMA也是共用同一个数据总线,要等待指令取数据。

STM32F4能达到多快就不知道了,但是STM32的FSMC两个写周期之间不是0间隔,印象STM32F103的FSMC两个写周期之间隔了一个写周期的时间。

如果你想并口液晶屏刷屏超过60Hz,建议不要用STM32。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-12-14 23:14:14 | 显示全部楼层
bluefeel 发表于 2018-12-14 22:54
一个写周期66ns,不知道你怎么看的。ILI9341并口屏最高理论刷屏速度1,000,000,000ns(1s)/320/240/66=197 ...

好吧,我错看成了写数据保持时间了。。
就算66NS,那换算下来也有1s/66ns=15M速度,这应该是能满足的。。不过算上76800个for循环送数据 ,就未必了。。 再看看有没有其它高手,确实是否有人用STM32驱动小屏,用FSMC做到了60帧。。。

出0入85汤圆

发表于 2018-12-14 23:17:42 | 显示全部楼层
kinsno 发表于 2018-12-14 21:58
我随便找了一个正点原子网站的PDF,IL9341,其实数据也蛮可观的啊。。
照理来说,随便10几M也是可以满足的 ...

给你一个别人的测试,里面有写时间,包括STM32F4:https://wenku.baidu.com/view/b27dbc66ddccda38376baf60.html

建议你好好优化代码,比如ADDSET,DATASET的时间。ILI9341的ADDSET是0ns,不知道STM32F4的ADDSET可以设置0不。

出0入85汤圆

发表于 2018-12-14 23:22:50 | 显示全部楼层
kinsno 发表于 2018-12-14 23:14
好吧,我错看成了写数据保持时间了。。
就算66NS,那换算下来也有1s/66ns=15M速度,这应该是能满足的。。 ...

你用for来循环,如果中间只有一个写操作,那循环的时间可能远大于写时间。

你还不如先用简单代码写屏,示波器或者逻辑分析仪看速度,可能还快点达到目的。

出0入8汤圆

发表于 2018-12-15 08:42:57 来自手机 | 显示全部楼层
最近也准备用这个分辨率的屏做项目,那我用8位的fsmc岂不是更慢?

出0入0汤圆

 楼主| 发表于 2018-12-15 08:57:04 | 显示全部楼层
bluefeel 发表于 2018-12-14 23:22
你用for来循环,如果中间只有一个写操作,那循环的时间可能远大于写时间。

你还不如先用简单代码写屏, ...

是啊!
for(i=0;   i<76800;  i++)
    LCD_RAM =xxxx;

它只能每次16个字节的送,也许总线速度能达到45M。。。但架不住这个for在这里啊。毕竟不象RGB那种,开一个大缓冲,PIA一下全部扔过去。。




出0入0汤圆

 楼主| 发表于 2018-12-15 09:08:20 | 显示全部楼层
了无 发表于 2018-12-15 08:42
最近也准备用这个分辨率的屏做项目,那我用8位的fsmc岂不是更慢?

可以啊,但想想,最好先测试一下,屏的显示效果,尤其是切屏效果能满足吗?  也许会拉窗,闪屏,不能达到领导心目中的完美切屏呢?

出75入0汤圆

发表于 2018-12-15 09:08:27 | 显示全部楼层
kinsno 发表于 2018-12-15 08:57
是啊!
for(i=0;   i

单点写屏肯定慢。

出0入0汤圆

 楼主| 发表于 2018-12-15 09:09:53 | 显示全部楼层

那这种屏,如果内部没有缓冲区,慢慢送进去之后,再一次性切屏刷新,

那就只能一个点一个点送了喽。。

出75入0汤圆

发表于 2018-12-15 09:11:43 | 显示全部楼层
你写的数据来源哪里?

出0入0汤圆

 楼主| 发表于 2018-12-15 09:12:42 | 显示全部楼层
minzhuzhongguo 发表于 2018-12-15 09:11
你写的数据来源哪里?

写的数据,就是一个大数组喽,取模来的喽。。。

出0入0汤圆

发表于 2018-12-15 09:20:57 | 显示全部楼层
我是直接IO口控制ILI9341 3.2寸液晶屏,没用FSMC,速率基本达到56帧/秒左右。
大量写数据时,不调用写数据函数,而是直接操作
    LcdSetWindows(xStart, yStart, xEnd, yEnd); //设置显示窗口
    LcdWriteCmd(0x2C); //发送写存储器指令
    LCD_DC = 1;
    LCD_CS = 0;
    for (i=yStart; i<yEnd; i++)
    {
        for (j=xStart; j<xEnd; j++) //写入图像数据
        {
            LCD_WR = 0;
            LCD_DB_OUT = *bitmap++;        
            LCD_WR = 1;        
        }
    }
    LCD_CS = 1;

以下是写数据函数
/* LCD写数据函数; data-写入的数据 */
void LcdWriteData(u16 data)
{
    LCD_CS = 0;          //使能片选
    LCD_DC = 1;          //DC置高,数据传输
    LCD_WR = 0;          //WR置低
    LCD_DB_OUT = data;   //写入数据
    LCD_WR = 1;          //WR置高
    LCD_CS = 1;          //失能片选
}
对比一下就能看出差别

出0入0汤圆

 楼主| 发表于 2018-12-15 09:52:24 | 显示全部楼层
Ary 发表于 2018-12-15 09:20
我是直接IO口控制ILI9341 3.2寸液晶屏,没用FSMC,速率基本达到56帧/秒左右。
大量写数据时,不调用写数 ...

你这是模拟总线的方式啊? 能做到56帧,你开什么国际玩笑?

你对帧的定义,和我对帧的定义是不是有错觉啊?  

我是指,在1秒之内,能完美刷新多少个整屏数据。。。我现在就是两个图片互相切换,中间隔1秒,主要我想观察切屏效果,能看到少许拉窗,虽然短,但不得不承认,确实拉窗了。。但原来搞的,4.3,7寸,10.1寸均不会有这种情况,当然原来的是RGB接口。。

出0入0汤圆

发表于 2018-12-15 10:02:12 | 显示全部楼层
kinsno 发表于 2018-12-15 09:52
你这是模拟总线的方式啊? 能做到56帧,你开什么国际玩笑?

你对帧的定义,和我对帧的定义是不是有错觉 ...

没开玩笑啊,用的液晶用的8080并口连接STM32的一个GPIO端口,一秒刷新56屏图片

出0入0汤圆

发表于 2018-12-15 10:25:44 | 显示全部楼层
Ary 发表于 2018-12-15 10:02
没开玩笑啊,用的液晶用的8080并口连接STM32的一个GPIO端口,一秒刷新56屏图片 ...

我突然想起来,当时仅仅是测试刷的纯颜色,并不是图片,图片的话貌似顶多也就二三十帧的样子。

出870入263汤圆

发表于 2018-12-15 10:42:00 | 显示全部楼层
楼主你说清楚,F4有没有外扩SDRAM,RAM是不是够整个显存区域?刷TFT模块时,要在发送窗口命令之后启用DMA!由于DMA一次最大传输65000个word,就分好几次DMA,很快的!

出0入0汤圆

发表于 2018-12-15 10:43:49 | 显示全部楼层
kinsno 发表于 2018-12-15 08:57
是啊!
for(i=0;   i

这个for也就消耗3到4个时钟吧

出0入0汤圆

 楼主| 发表于 2018-12-15 10:46:20 来自手机 | 显示全部楼层
armstrong 发表于 2018-12-15 10:42
楼主你说清楚,F4有没有外扩SDRAM,RAM是不是够整个显存区域?刷TFT模块时,要在发送窗口命令之后启用DMA! ...

小平怎么会扩一个sdram,大炮打蚊子啊。。ram足够了,一个图片153k,我就是刷刷屏,主要看切换效果。

出870入263汤圆

发表于 2018-12-15 10:46:53 | 显示全部楼层
kinsno 发表于 2018-12-15 08:57
是啊!
for(i=0;   i

慢就慢在用CPU搬运的数据!你把循环展开就可以稍微提高速度,如果用DMA传输,那就能达到最高传输速度!
循环展开示例:
for(i=0;   i<76800;  i+=4){
    LCD_RAM =xxxx;
    LCD_RAM =xxxx;
    LCD_RAM =xxxx;
    LCD_RAM =xxxx;
}

出870入263汤圆

发表于 2018-12-15 10:54:58 | 显示全部楼层
别忽视循环带来的性能损失,在这种没有Cache的MCU中,循环导致损失非常大!
何况刷屏应用中,循环的调用频次太高,优化一个时钟就能提高十分之的性能。

出0入0汤圆

 楼主| 发表于 2018-12-15 13:03:18 | 显示全部楼层
armstrong 发表于 2018-12-15 10:54
别忽视循环带来的性能损失,在这种没有Cache的MCU中,循环导致损失非常大!
何况刷屏应用中,循环的调用频 ...

是的,肯定是for循环带来的损失,这个是肯定的。。

我只是想,有些人号称能刷图片60帧,是咋做到的,它不可能在一个函数里面,复制76800个,那是疯了。。

出0入0汤圆

发表于 2018-12-15 13:59:40 | 显示全部楼层
Ary 发表于 2018-12-15 10:02
没开玩笑啊,用的液晶用的8080并口连接STM32的一个GPIO端口,一秒刷新56屏图片 ...

这是刷接口速度,楼主是想看刷显示速度。   接口速度不等于最终显示速度。

出0入0汤圆

发表于 2018-12-15 14:32:40 来自手机 | 显示全部楼层
kinsno 发表于 2018-12-15 13:03
是的,肯定是for循环带来的损失,这个是肯定的。。

我只是想,有些人号称能刷图片60帧,是咋做到的,它 ...

一次写8个,for循环的影响就很小了,不必一次写76800

出870入263汤圆

发表于 2018-12-15 15:31:51 | 显示全部楼层
用DMA刷60帧是轻松实现的,计算方法如下:320*240*60=4608000,这就是像素频率。FSMC的速度远不只这么一点。

出0入4汤圆

发表于 2018-12-15 16:30:39 来自手机 | 显示全部楼层
armstrong 发表于 2018-12-15 15:31
用DMA刷60帧是轻松实现的,计算方法如下:320*240*60=4608000,这就是像素频率。FSMC的速度远不只这么一点 ...

Fsmc  ST的芯片你最快跑过多快的

出0入0汤圆

 楼主| 发表于 2018-12-15 17:09:44 | 显示全部楼层
armstrong 发表于 2018-12-15 15:31
用DMA刷60帧是轻松实现的,计算方法如下:320*240*60=4608000,这就是像素频率。FSMC的速度远不只这么一点 ...

嗯,你有听说过DMA有一个最大数量限制吗,FFFF ,照样需要发多次。。

  另外一个,DMA要等待发送完成的啊,这也是时间啊,这个时间无法估计、、

出870入263汤圆

发表于 2018-12-15 18:37:32 | 显示全部楼层
kinsno 发表于 2018-12-15 17:09
嗯,你有听说过DMA有一个最大数量限制吗,FFFF ,照样需要发多次。。

  另外一个,DMA要等待发送完成的 ...

就是要分多次传输啊,中间启动DMA的时间很少。等待DMA完成过程可以用RTOS多线程解决,CPU会在这段时间里做下一帧图形渲染。
参考这个帖子,我就是这么干的:
https://www.amobbs.com/thread-5703997-1-1.html

出870入263汤圆

发表于 2018-12-15 19:14:01 | 显示全部楼层
直接讲个例子吧,以前功能机手机里,MP4里很多用这种屏幕;玩游戏,看视频都是没问题的!

出0入8汤圆

发表于 2018-12-15 21:36:13 来自手机 | 显示全部楼层
armstrong 发表于 2018-12-15 19:14
直接讲个例子吧,以前功能机手机里,MP4里很多用这种屏幕;玩游戏,看视频都是没问题的! ...

期待楼上答疑。最近也准备用这个屏幕,学习学习

出870入263汤圆

发表于 2018-12-15 22:32:13 | 显示全部楼层
了无 发表于 2018-12-15 21:36
期待楼上答疑。最近也准备用这个屏幕,学习学习

有啥疑问呢?“DMA传输过程”和“下一块数据的准备”是可以同时进行的,原理就像CPU的多级流水线:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-12-16 14:55:15 | 显示全部楼层
要不用DMA,可以最大程度发挥MCU的芯片功能,要不就用空间换时间,展开for;
for中一次写入8-16次试试

出0入0汤圆

发表于 2018-12-16 21:09:52 | 显示全部楼层
很难做到,我们都做到产品上了,只是用了别的技巧,刷屏的时候只刷需要更新的区域,其他不需要更新的区域不去刷它,如果屏幕上数据没有更新,则不刷它,这样大大减小数据传输量,能有效地减少闪屏的缺陷。

出0入0汤圆

 楼主| 发表于 2018-12-16 21:15:03 | 显示全部楼层
hexenzhou 发表于 2018-12-16 21:09
很难做到,我们都做到产品上了,只是用了别的技巧,刷屏的时候只刷需要更新的区域,其他不需要更新的区域不 ...

是的,你这是取巧的办法,但不是解决本质之道啊,没办法的时候,只好这样子喽。。。但凡有招,还是要争取一下啦。。。

请问你们原来是用FSMC硬件总线,还是使用模拟总线啊?

出0入0汤圆

发表于 2018-12-16 21:19:00 | 显示全部楼层
也是FSMC硬件总线

出0入0汤圆

 楼主| 发表于 2018-12-16 21:21:23 | 显示全部楼层

你可能是F1吧,F1毕竟总线只有F4的一半还不到哦。哈哈。。

我开始是信心满满的计算,我F4总线随便跑45M,还搞不了你一个小2.8寸屏,刷了10M就妥妥的60帧,对于总线来说也就25%的占有率,绝比没问题。。

没想到。。打脸了啊。。



出0入0汤圆

发表于 2018-12-30 11:25:48 | 显示全部楼层
你描述的闪屏是指的整屏刷新的痕迹吗?还是说,在一个画面上,屏有抖动的现象?

出0入0汤圆

 楼主| 发表于 2018-12-30 17:55:59 | 显示全部楼层
ljuneLCD 发表于 2018-12-30 11:25
你描述的闪屏是指的整屏刷新的痕迹吗?还是说,在一个画面上,屏有抖动的现象? ...

已经搞定了,是主频没到180M,主要是晶振的缘故,脸一黑。。。

出870入263汤圆

发表于 2019-1-1 13:31:27 | 显示全部楼层
kinsno 发表于 2018-12-30 17:55
已经搞定了,是主频没到180M,主要是晶振的缘故,脸一黑。。。

看,区区STM32F407VE,不外扩SRAM就能流畅驱动480*320;你的320*240岂不是小菜一碟?
http://v.youku.com/v_show/id_XMzk5MTcwOTcxNg==.html

出870入263汤圆

发表于 2019-1-1 13:35:57 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-1-1 16:46:54 | 显示全部楼层
armstrong 发表于 2019-1-1 13:31
看,区区STM32F407VE,不外扩SRAM就能流畅驱动480*320;你的320*240岂不是小菜一碟?
http://v.youku.com ...

是的,原来就是因为这个主频的原因,可是又没法测主频速度。因为手里没有示波器。

你楼下这个黑色小电路板不错啊,哪里整的,我也去弄一套回来,多少钱?

出870入263汤圆

发表于 2019-1-1 18:23:35 | 显示全部楼层
小板做工是不错的。淘宝上搜店铺“反客科技”,这是FK407M3板子。

出0入0汤圆

 楼主| 发表于 2019-1-1 19:40:57 | 显示全部楼层
armstrong 发表于 2019-1-1 18:23
小板做工是不错的。淘宝上搜店铺“反客科技”,这是FK407M3板子。

这是你的店吗?
设计的真的很不错,很赏心阅目,适合有经验的人,临时做DEMO或代码验证,不太适合新手。。哈。。

出870入263汤圆

发表于 2019-1-1 19:49:46 | 显示全部楼层
kinsno 发表于 2019-1-1 19:40
这是你的店吗?
设计的真的很不错,很赏心阅目,适合有经验的人,临时做DEMO或代码验证,不太适合新手。 ...

我没有网店呢。
偶然发现的店铺,看着他们设计的板子很别致,就毫不犹豫的买了全套(包括STM32F429+STM32F407+STM32F103+7寸屏+3.5寸屏)!
我喜欢这种板子,验证某些功能,只需要杜邦线接起来就可以了,很灵活。

出0入0汤圆

 楼主| 发表于 2019-1-1 19:54:24 | 显示全部楼层
armstrong 发表于 2019-1-1 19:49
我没有网店呢。
偶然发现的店铺,看着他们设计的板子很别致,就毫不犹豫的买了全套(包括STM32F429+STM32 ...

感觉407比较适合,429还是不够适配我,哈哈。。
感谢分亨这个比较优质的淘宝店。

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-25 08:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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