硬汉嵌入式论坛

 找回密码
 立即注册
查看: 11210|回复: 22
收起左侧

[emWin] SPI刷3.5寸TFT,是这么慢的吗?-已解决

  [复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2020-8-18 18:44:49 | 显示全部楼层 |阅读模式
本帖最后由 caicaptain2 于 2020-9-8 17:02 编辑

F4的MCU,SPI3时钟20MHz的,刷3.5寸TFT,分辨率320x480,刷一屏需要0.4秒。。。
尝试使用hal库的spi+dma,刷一屏反而要1秒了。。。

屏是常用的ILI9488的芯片,spi模式下,写一个点需要发送3个字节数据,是不是这个原因造成的?

----------------------------------------已解决,分享代码------------------------------------------
第一次用SPI接口的FT屏,卖家提供了一些代码,但是SPI是普通单字节模式,速度很慢。而且没有读点函数。尝试着优化了一下。mdk编译的时候,优化不能选择3,可能花屏。 优化0的时候很好。

运行环境: F407,MCU主频168MHz,SPI3,SPI时钟是21MHz。 驱动3.5寸 320x480的SPI接口TFT。
目前改进成SPI加MDA接口后,刷屏耗时0.2秒,感受尚可,已经是最优化了。
代码中的读点函数正常,读ID正常。
DMA中断的代码如下:
  1. void DMA1_Stream5_IRQHandler(void)
  2. {
  3.   if (__HAL_DMA_GET_FLAG (&hdma_spi3_tx,DMA_FLAG_TCIF1_5) != RESET)
  4.   {
  5.     if(__HAL_DMA_GET_IT_SOURCE(&hdma_spi3_tx, DMA_IT_TC) != RESET)
  6.     {
  7.       __HAL_DMA_CLEAR_FLAG(&hdma_spi3_tx,DMA_FLAG_TCIF1_5);
  8.       SPI3txdmaflag=0;
  9.     }
  10.   }
  11. }
复制代码

发现了一些bug,下面的附件是9月8日更新,无需开启DMA中断了,16BPP函数有优化,刷屏速度提升很多。 使用DMA的查询方式,这样在多任务系统中,也不影响其他函数的速度了。
LCD9488SPI.zip (19.1 KB, 下载次数: 169)   


微信图片_20200819152958.jpg

回复

使用道具 举报

0

主题

24

回帖

24

积分

新手上路

积分
24
发表于 2020-8-18 20:12:05 | 显示全部楼层
我用F0的MCU,SPI1时钟12MHz的,刷3.5寸TFT,分辨率320x480,刷一屏需要4秒。。。
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2020-8-18 21:05:05 | 显示全部楼层
24位色是比较慢,再说分辨率这么高,你这个是刷的纯色还是图片?
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-8-19 08:34:55 | 显示全部楼层
hejm 发表于 2020-8-18 21:05
24位色是比较慢,再说分辨率这么高,你这个是刷的纯色还是图片?

3.5寸基本都是这个分辨率了。。。。我说的是刷纯色,就是清屏。
回复

使用道具 举报

10

主题

140

回帖

170

积分

初级会员

积分
170
发表于 2020-8-19 08:40:16 | 显示全部楼层
刷纯色完全没必要一个点一个点的绘制,浪费时间,除非是绘制图片。
回复

使用道具 举报

54

主题

145

回帖

307

积分

高级会员

积分
307
发表于 2020-8-19 08:55:45 | 显示全部楼层
用IO口模拟SPI,IO操作直接用寄存器不用库,速度可能会快些
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2020-8-19 09:39:44 | 显示全部楼层
我用的F103,也是这个分辨率, 16位色,用的8位并口,不是spi,感觉速度还可以,至少不会看到明显是刷写过程;我在另外一个项目上,320*240的分辨率,也是16位色, spi和fsmc接口都用了,感觉spi跟fsmc 16位并口速度至少在肉眼看起来差别不大,都很快。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-8-19 09:50:50 | 显示全部楼层
你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧
http://www.armbbs.cn/forum.php?m ... 5776&fromuid=58
(出处: 硬汉嵌入式论坛)


回复

使用道具 举报

39

主题

928

回帖

1050

积分

至尊会员

积分
1050
发表于 2020-8-19 10:31:24 | 显示全部楼层
eric2013 发表于 2020-8-19 09:50
你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

我没用过SPI方式的屏,通过SPI发送的数据,不是原始的RGB数据么?算楼主的是16位色,两字节,20MHz/(320*480*16bit)=8,也就是SPI为20M时极限速度也就每秒钟8屏,这样算对不对?
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-8-19 12:47:39 | 显示全部楼层
eric2013 发表于 2020-8-19 09:50
你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

我这里有个诡异的问题。 连续写液晶的RAM,每个字节都要拉高CS吗?
一个点需要写3个字节,如果我是单字节写,每个字节之间的CS线拉低拉高,区分开来,就正常。
如果我用DMA方式,一次性写3个字节,字节之间没有控制CS线,只在开始拉低CS,结束后拉高CS。就出现问题了。。。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-8-19 13:37:47 | 显示全部楼层
本帖最后由 caicaptain2 于 2020-8-19 15:53 编辑
caicaptain2 发表于 2020-8-19 12:47
我这里有个诡异的问题。 连续写液晶的RAM,每个字节都要拉高CS吗?
一个点需要写3个字节,如果我是单字 ...

唉,简单的SPI DMA传输,痛苦的调试了3天,才刚刚知道SPI必须回读一下子才行啊。。。

在确认单次DMA传输完成之后,而且不论此次传输几个字节,必须执行一下回读。
dummy=SPI3->DR;
本来,在网上找个各种例子都强调,SPI DMA 发送和接收必须同时打开,不然会有问题。。。但是没有人解释为什么。。。
一般驱动TFT很少读SPI数据,所以,没有设置SPI的DMA读取。原来,SPI的DR不读取的话,就会工作不正常啊。。。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-8-19 15:45:04 | 显示全部楼层
eric2013 发表于 2020-8-19 09:50
你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

你这个是全屏点数都缓存?
好处是DMA可以从头写到尾,缺点是占用RAM太多了啊。。。

而且tft芯片的SPI速度有限制,记得你的贴子说过是最大16MHz左右。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-8-19 16:27:03 | 显示全部楼层
ghslfgkkl88 发表于 2020-8-19 10:31
我没用过SPI方式的屏,通过SPI发送的数据,不是原始的RGB数据么?算楼主的是16位色,两字节,20MHz/(320* ...

对,是这样的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-8-19 16:28:58 | 显示全部楼层
caicaptain2 发表于 2020-8-19 13:37
唉,简单的SPI DMA传输,痛苦的调试了3天,才刚刚知道SPI必须回读一下子才行啊。。。

在确认单次DMA传 ...

不需要,我这里仅开的SPI DMA发送
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-8-19 16:29:51 | 显示全部楼层
caicaptain2 发表于 2020-8-19 15:45
你这个是全屏点数都缓存?
好处是DMA可以从头写到尾,缺点是占用RAM太多了啊。。。

我是为了解决撕裂感,整了个全屏缓冲。

我这个是100MHz SPI刷的。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2020-8-19 16:52:23 | 显示全部楼层
eric2013 发表于 2020-8-19 16:28
不需要,我这里仅开的SPI DMA发送

我也觉得匪夷所思。。。
但是反复验证中,我只要不读一下SPI->DR,就不正常了。 而且是诡异的无法解释的异常现现象。。。
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2021-3-7 21:41:09 | 显示全部楼层
eric2013 发表于 2020-8-19 09:50
你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

H7-TOOL的IPS屏SPI DMA可以移植到F103上吗,里面的很多寄存器操作,但是H7与F1的寄存器又不一样,有参考的模板吗?
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2021-3-8 15:57:30 | 显示全部楼层
goodgft 发表于 2021-3-7 21:41
H7-TOOL的IPS屏SPI DMA可以移植到F103上吗,里面的很多寄存器操作,但是H7与F1的寄存器又不一样,有参考 ...

一般是不行的。 103的ram比较小,全屏缓冲就不够用。而且spi速度慢很多,效果应该不好。
回复

使用道具 举报

10

主题

34

回帖

64

积分

初级会员

积分
64
发表于 2022-12-21 16:01:02 | 显示全部楼层
H7-TOOL的IPS屏SPI+DMA的操作可以移植到F4上吗?比较多的寄存器存在不同
回复

使用道具 举报

210

主题

1042

回帖

1682

积分

至尊会员

More we do, more we can do.

积分
1682
发表于 2022-12-21 21:15:18 | 显示全部楼层
计算了下你这个频率,显存全更新0.2秒接近传输带宽。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-11-10 17:06:30 | 显示全部楼层
下载不了呢
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-11-29 09:58:59 | 显示全部楼层
多谢楼主代码,407,DMA刷的,差不多0.1s刷一张。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-11-29 10:00:04 | 显示全部楼层
多谢楼主代码,407 dma刷的,差不多1秒刷10张图。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 04:47 , Processed in 0.244561 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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