找回密码
 立即注册
楼主: eanry

8H8K64U的DMA_SPI比纯硬件SPI没任何速度提升 | 解放 CPU去做其他的事,不会提升SPI

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:64
  • 最近打卡:2025-12-18 09:32:14
已绑定手机

2

主题

10

回帖

31

积分

新手上路

积分
31
发表于 2025-11-25 09:59:47 | 显示全部楼层
御坂美*** 发表于 2025-10-24 13:00
我是基于STC32测试的,应该差不多

测试条件:连续发送10个数据

在实际使用过程中,你SPI发送数据不可能都发常量,都是写进数组里发送的,你在使用DMA时把数组赋值的时间也算进去,不合理啊。同样的波特率,数据发送速度是相同的,就只有字节之间的间隔时间不同,加DMA+FIFO最快,DMA次之,纯硬件是最慢的
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-11-27 12:33:57

10

主题

73

回帖

1381

积分

金牌会员

积分
1381
发表于 2025-11-26 01:36:54 | 显示全部楼层
totryto*** 发表于 2025-11-25 09:59
在实际使用过程中,你SPI发送数据不可能都发常量,都是写进数组里发送的,你在使用DMA时把数组赋值的时间 ...
主要是DAM必须用xdata,操作上更费时间,你单纯以快为目的话,确实快不过硬件SPI直接塞直接发
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-11-27 12:33:57

10

主题

73

回帖

1381

积分

金牌会员

积分
1381
发表于 2025-11-26 01:56:17 | 显示全部楼层
totryto*** 发表于 2025-11-25 09:59
在实际使用过程中,你SPI发送数据不可能都发常量,都是写进数组里发送的,你在使用DMA时把数组赋值的时间 ...

不过确实可以测一下丢数组里面看看耗时多少
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:64
  • 最近打卡:2025-12-18 09:32:14
已绑定手机

2

主题

10

回帖

31

积分

新手上路

积分
31
发表于 2025-11-26 11:08:51 | 显示全部楼层
御坂美*** 发表于 2025-11-26 01:36
主要是DAM必须用xdata,操作上更费时间,你单纯以快为目的话,确实快不过硬件SPI直接塞直接发 ...

那你其实应该在只使用硬件SPI时,先将数据放进edata中的数组,然后再赋值给SPDAT,这样测试才客观
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:64
  • 最近打卡:2025-12-18 09:32:14
已绑定手机

2

主题

10

回帖

31

积分

新手上路

积分
31
发表于 2025-11-26 11:10:32 | 显示全部楼层
御坂美*** 发表于 2025-11-26 01:56
不过确实可以测一下丢数组里面看看耗时多少

是的
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-11-27 12:33:57

10

主题

73

回帖

1381

积分

金牌会员

积分
1381
发表于 2025-11-26 14:07:09 | 显示全部楼层

就算连写数组的时间也算上,测出来是9.48us,和之前的DMA+FIFO结果很相近
截图202511261328571621.jpg 截图202511261329477341.jpg

但有的有点神奇的是,我在同样的环境下,又测了一下DMA和DMA+FIFO的情况,分别是13.2us,11.4us
截图202511261445366507.jpg     截图202511261437029442.jpg
可能是之前有优化还是怎么的,这次测试给xdata数组赋值的时间变长了

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:64
  • 最近打卡:2025-12-18 09:32:14
已绑定手机

2

主题

10

回帖

31

积分

新手上路

积分
31
发表于 2025-11-27 09:44:28 | 显示全部楼层
你是不是这个没设置哦
111.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:64
  • 最近打卡:2025-12-18 09:32:14
已绑定手机

2

主题

10

回帖

31

积分

新手上路

积分
31
发表于 2025-11-27 09:52:21 | 显示全部楼层
御坂美*** 发表于 2025-11-26 14:07
就算连写数组的时间也算上,测出来是9.48us,和之前的DMA+FIFO结果很相近

官方的main初始化都会加上这个,以此来提高访问xdata数据的速度
222.png
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-11-27 12:33:57

10

主题

73

回帖

1381

积分

金牌会员

积分
1381
发表于 2025-11-27 12:33:57 | 显示全部楼层
totryto*** 发表于 2025-11-27 09:52
官方的main初始化都会加上这个,以此来提高访问xdata数据的速度

查了一下是CKCON没写,可能以前的工程写了,那现在的数据是

硬件SPI(直接赋值)                8.6us

硬件SPI(不包数组含赋值)      8.9us
硬件SPI(包含数组赋值)         9.49us
硬件SPI + DMA                        10.72us
硬件SPI + DMA  + FIFO            8.65us




目前看,硬件SPI + DMA是最拉的,需要FIFO支持才能赶上硬件SPI


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-12-17 09:14:11
已绑定手机

5

主题

21

回帖

165

积分

注册会员

积分
165
发表于 2025-11-27 20:57:09 | 显示全部楼层
御坂美*** 发表于 2025-11-27 12:33
查了一下是CKCON没写,可能以前的工程写了,那现在的数据是

硬件SPI(直接赋值)                8.6us

不用再测试了,你只要细心比对相应代码的汇编程序,就会知道8位MCU在涉及数组操作时的代码效率是很低的,因为要把数组下标转换成对应的指针,而xdata内存指针是24位,即3个字节,所以对应的代码效率真是……
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-12-18 10:28 , Processed in 0.116276 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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