找回密码
 立即注册
查看: 229|回复: 15

为什么 8H8K64U的DMA_SPI比纯硬件SPI没任何速度提升?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-10-03 08:54:28
已绑定手机

2

主题

8

回帖

66

积分

注册会员

积分
66
发表于 2025-10-2 17:26:23 | 显示全部楼层 |阅读模式
为避开国庆假开始的拥堵,这两天测试了
8H8K64U的DMA_SPI驱动ST7789P3的240*320的IPS彩屏,
本以为会有性能的大幅提升,没想到相差无几,不知是何原因,求大神指教!
主频:24MHz
SPI频率:主频/4
DMA_SPI实现思路:双缓存,每个缓存256字节,写满一路缓存启动发送后写第二路缓存。
采用中断方式,一旦传送结束,马上释放SPI总线以供其他共享部件使用。

测试思路:
设置Timer0每1ms中断进行用时计算,然后调用纯硬件的SPI进行全屏填纯色3次,停止timer0计时,显示所用时间。
复位计时变量和timer0,重新启动timer0计时,调用DMA_SPI进行全屏填纯色3次,停止timer0计时,显示所用时间。
结果纯硬件SPI 3次全屏刷新用时1782ms,DMA_SPI 3次全屏刷新用时1781ms,这个还是在只有一种颜色时的理想结果。
在根据字模输出字色或背景色时,由于每个点都多了一次if判断,并根据结果选择不同颜色填充缓存时,3次刷屏用时比纯硬件SPI还多400多ms。
想请教一下,8H系列的PDF文档中只有DMA_SPI_AMT这一个发送数量寄存器,没有高8位的数量?是否一次最多只能发256字节?

下面贴代码:

定时器0中断

定时器0中断


DMA_SPI中断

DMA_SPI中断


主程序

主程序


LCD_DMA子程序

LCD_DMA子程序


LCD_DMA过程

LCD_DMA过程


查阅了AI8H.H头文件关于DMA_SPI的相关寄存器好像真只有DMA_SPI_AMT这一个是控制传送数量的。

AI8H

AI8H


个人感觉如果真只能这样的话,那增加那么些代码来实现就没必要了。
希望有经验的大神和官方工程师指点迷津。



回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19768
发表于 2025-10-5 02:08:17 | 显示全部楼层
参照下面管脚兼容的 STC32G12K128的
软件 双缓冲 乒乓 技术,
256字节的 DMA缓冲区,比无限深度的 DMA缓冲区,
只是牺牲 0.26% 的 CPU时间而已。
当然 STC32G12K128的 DMA缓冲区是 8K xdata 深度。
AI8051U的 DMA 缓冲区是 32K xdata 深度,
===还支持 DMA-P2P, 外设直接送外设

截图202510050206175142.jpg

截图202510050205286666.jpg

https://www.stcaimcu.com/data/download/Datasheet/STC32G.pdf


截图202510050212478383.jpg
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19768
发表于 2025-10-5 02:50:22 | 显示全部楼层
STC32G144K246-视频级动画效果演示 - 老梁亲测 AI33-ARM 内部平台系列讲座 国芯人工智能技术交流网站 - AI32位8051交流社区

STC32G144K246-LQFP100/64,  刷彩屏的能力
120MHz-CPU, 极限 140MHz
53MHz  以上的 I/O 输出速度,比 AI8051U的 I/O输出快4倍以上
DAC + OP 已验证

AI8051U, 40MHz,  13.5MHz-I/O 速度,@3.3V
320*240, AI8051U 刷彩屏
==》 320*240*2 = 153,600;    28帧/S

480*320, AI8051U 刷彩屏
==》 480*320*2 = 307,200;    14帧/S

800*480, AI8051U 刷彩屏
==》 800*480*2 = 768,000;    5.6帧/S

STC32G144K246-LQFP100/64, 刷彩屏AI8051U的4倍以上的速度
120MHz-CPU, 极限 140MHz
53MHz-I/O 速度,
===>刷彩屏是 AI8051U 4倍的速度

STC32G144K246-LQFP100/64, QSPI-4线读FLASH, DMA-i8080并口-TFT接口 刷彩屏
===4倍AI8051U的 I/O 输出速度
320*240*2 = 153,600;    i8080-8位或16位并口刷彩屏,28帧/S * 4 = 112 /S;   
===改成 SPI-
刷彩屏 要除4 = 28 /S;
480*320*2 = 307,200;    i8080-8位或16位并口刷彩屏,14帧/S * 4 = 56 帧/S;     
===改成
SPI-刷彩屏要除4 = 14 /S;
800*480*2 = 768,000;    i8080-8位或16位并口刷彩屏,5.6帧/S * 4 = 22.4 帧/S;
===改成
SPI-刷彩屏要除4 = 5.6 /S;

1024*600*2 = 1,228,800;    i8080-8位或16位并口刷彩屏
===320*240*2 = 153,600的,28帧/S / 8 / 4 = 3.5 帧/S * 4 = 14 帧/S;

1024*768*2 = 1,572,864;   
i8080-8位或16位并口刷彩屏
===320*240*2 = 153,600的,28帧/S / 10.24 / 4 = 2.73 帧/S * 4 = 11 帧/S;


现在的 STC32G144K246的I/O输出速度实际应在 53MHz ~ 64MHz附近
===正在设计 120MHz 输出速度的 I/O, 将刷屏速度再 * 2
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19768
发表于 2025-10-2 17:28:56 | 显示全部楼层
DMA只是解放 CPU, 让CPU去干更重要的事。SPI的速度是SPI控制的,和 DMA无关
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-10-03 08:54:28
已绑定手机

2

主题

8

回帖

66

积分

注册会员

积分
66
发表于 2025-10-2 17:47:00 | 显示全部楼层
神*** 发表于 2025-10-2 17:28
DMA只是解放 CPU, 让CPU去干更重要的事。SPI的速度是SPI控制的,和 DMA无关

在没看人工智能的分析前我就感觉缓存太小了,所以在思考是不是我阅读PDF不认真遗漏了某些信息。但反复查阅后没有找到更多的资料了,所以上来求助,希望得到官方的确认。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-10-03 08:54:28
已绑定手机

2

主题

8

回帖

66

积分

注册会员

积分
66
发表于 2025-10-2 17:49:22 | 显示全部楼层
如果我阅读的信息已完整,这个系列的DMA单次传输数据量是否可以提高到1K,甚至更多呢?

点评

传输量由这个单字节寄存器控制,所以需要按最大256分批传输。如果需要单次更大可以考虑STC32G\Ai8051U系列 [attachimg]116694[/attachimg] [attachimg]116695[/attachimg]  详情 回复 发表于 2025-10-2 18:08
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-10-15 08:50:20
已绑定手机

85

主题

3256

回帖

7196

积分

荣誉版主

无情的代码机器

积分
7196
发表于 2025-10-2 18:08:46 | 显示全部楼层
ean*** 发表于 2025-10-2 17:49
如果我阅读的信息已完整,这个系列的DMA单次传输数据量是否可以提高到1K,甚至更多呢? ...


传输量由这个单字节寄存器控制,所以需要按最大256分批传输。如果需要单次更大可以考虑STC32G\Ai8051U系列
截图202510021806522977.jpg


截图202510021808051622.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-10-03 08:54:28
已绑定手机

2

主题

8

回帖

66

积分

注册会员

积分
66
发表于 2025-10-2 19:28:01 来自手机 | 显示全部楼层
ercircle 发表于 2025-10-2 18:08
传输量由这个单字节寄存器控制,所以需要按最大256分批传输。如果需要单次更大可以考虑STC32G\Ai8051U系 ...

感谢大神假期的关注。目前已经是按这个思路实现。
并在调试中发现程序的耗时主要是在准备数据中,
当写一块新缓存到大约0x6A-0x70个字节时,dma_spi就已经中断,
表示256字节的发送时间占数据准备时间的一半不到。
一会准备把数据准备中的字节操作改成字操作,把数据准备时间减少。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19768
发表于 2025-10-2 21:25:22 | 显示全部楼层
让 STC8H8K64U工作在 40MHz, 40MHz/4 = 10MHz 比 24M/4 = 6M快
另外,双缓冲乒乓技术,高效刷屏
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-15 11:03:15

787

主题

1万

回帖

1万

积分

管理员

积分
19768
发表于 2025-10-2 21:29:53 | 显示全部楼层
另外 AI8051U的 DMA缓冲区是 64K, 还可以外设直接到外设,要刷 TFT彩屏,AI8051U更合适。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-10-03 08:54:28
已绑定手机

2

主题

8

回帖

66

积分

注册会员

积分
66
发表于 2025-10-3 08:54:28 来自手机 | 显示全部楼层
神农鼎 发表于 2025-10-2 21:25
让 STC8H8K64U工作在 40MHz, 40MHz/4 = 10MHz 比 24M/4 = 6M快
另外,双缓冲乒乓技术,高效刷屏 ...

感谢!算法上已经是双缓冲乒乓运作了,具体可以看文字说明或图片代码。调试发现不是算法问题,是芯片的dma单次传输数据量成为了瓶颈。不知道是不是8位机的限制。
通过算法优化原则,把运算量最大的数据准备(循环体)过程再优化了,性能有少量提升。后面再单纯的提高主频的意义,对dma比纯硬件的比率并无高。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-10-03 08:54:28
已绑定手机

2

主题

8

回帖

66

积分

注册会员

积分
66
发表于 2025-10-3 09:38:46 来自手机 | 显示全部楼层
另外,习惯了电脑上的32位甚至是64位编程,对8位编程真是不习惯。16位变量的++运算,编译成机器字节码竟然也要8-12个字节,更不要说数组或指针寻址等运算,基本上都要30个字节指令组合起步,这让我无言。记得30年前用的286汇编都没有这么庞大的代码。所以,算法优化也难以弥补机器代码的细碎。看来选型对性能影响深远啊!
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 07:56 , Processed in 0.140684 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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