OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 27084|回复: 35

调试SPI+DMA的一点心得

[复制链接]

  离线 

56

主题

497

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1834
金钱
1834
注册时间
2013-11-18
在线时间
247 小时
发表于 2014-12-9 14:49:11 | 显示全部楼层 |阅读模式
正点原子公众号
        由于项目需要,STM32F303跟STM32F405之间要用到DMA+SPI口来估大量数据传输,实现两边的数据收发。开始只用到MISO,MOSI,跟CLK三个信号,STM32F303配置成主机,18M的波特率,用DMA发4K的Buffer的数据,STM32F405这边用DMA循环接收SPI的数据,调试发现数据死活就是接收不对,完全是错乱的。改成不用DMA,直接SPI单个单个不停发送,接收数据却是正常的。用示波器看两个信号线的信号,信号也还好,用示波器的逻辑分析仪去分析SPI的通信,发现SPI的连续传输的时候,CLK是连续的,分析仪分析不到MISO上的数据或者分析出来的也是错误的。就猜想如果SPI的时钟在传输过程中是连续不间距的话,那么逻辑分析怎么可能知道SPI的MISO上1Byte的波形哪位才是初始位??STM32的SPI也是一样,硬件没法判断到,接收就错乱了。SPI通信中,如果时间每Byte的时钟不连续,就可以通过这时钟的间隙来判断。
   


 


         用专门的逻辑分析采齐SPI的数据来分析,数据对的,说明发送是正确的。就是接收错乱,让我更坚信前面的猜想,想要解决这个问题,最好就是增加同步,用一个同步线来告诉从机的SPI什么时候是一个Byte的开始,什么时候是结束。这里想到肯定是用NSS引脚来做,标准的SPI是不支持的,但是看到了TI Mode,这问题就解决了,也证实我的猜想。看下图TI Mode的时序
  


 配置NSS引脚,405跟303把SPI配置修改为硬件NSS和TI Mode模式,再Debug就看到从机的接收Buffer上正常的数据。
       前前后后折腾DMA+SPI有长的时间,网上都没有这样大量数据传输的应用,基本上都SPI的最简单应用,只要CLK不是连续的就不会出现这问题。按理来说如果STM32的SPI硬件时序做好了的话,也不会出现这问题,实际上它就是这里出问题了,我只能说STM32 的SPI也做得有点烂。
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复

使用道具 举报

  离线 

501

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
130024
金钱
130024
注册时间
2010-12-1
在线时间
1172 小时
发表于 2014-12-9 22:06:14 | 显示全部楼层
不错,谢谢分享。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

13

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
673
金钱
673
注册时间
2012-7-20
在线时间
91 小时
发表于 2014-12-10 00:05:28 | 显示全部楼层
很实用,感谢分享
互联网,智能设备爱好者,欢迎讨论任何有意思的想法。
回复 支持 反对

使用道具 举报

  离线 

13

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2014-11-16
在线时间
0 小时
发表于 2014-12-10 08:11:05 | 显示全部楼层
拜读了,多谢,SPI很常用,如果以后用到了大数据量的连续传输,还真得小心了,记住了TI模式
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-12-11
在线时间
0 小时
发表于 2014-12-11 22:00:35 | 显示全部楼层
正点原子公众号
你好 
 我调试的时候遇到同一个问题 想请教下
STM32 F4  通过DMA实现内存到SPI的传输 实现FLASH写入
现在使用系统自带SPI驱动库函数 完全没问题
使用DMA就不行  check FLASH BUSY始终没法通过 
一直怀疑是时序的问题,但手上没逻辑分析仪
看了你的帖子 很受启发 谢谢
但还有点疑问,想请教下
对于外设FLASH CS管脚无法支持TI Mode 如何破?。。。
单独读M4手册上的 没讲这个时序分割的问题,比较含糊


想了一下 也没有好的思路 忘不吝赐教 谢谢
邮箱 f_14@163.com
qq 324124889
回复 支持 反对

使用道具 举报

  离线 

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-10-6
在线时间
15 小时
发表于 2015-2-3 21:03:07 | 显示全部楼层
很好,注意了
回复 支持 反对

使用道具 举报

  离线 

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2014-7-1
在线时间
46 小时
发表于 2015-2-11 19:43:59 | 显示全部楼层
我想我也遇到相同的问题了,两片407之间SPI+DMA双向通信,当传输数据量为1kB时都能正常接收,数据量大到4k时数据就混乱了,我看看换成TI方式试试
回复 支持 反对

使用道具 举报

  离线 

27

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-8-14
在线时间
8 小时
发表于 2015-3-18 11:34:41 | 显示全部楼层
楼主的配置能让我看一下吗
最近没吃药,感觉自己萌萌哒!
回复 支持 反对

使用道具 举报

  离线 

27

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-8-14
在线时间
8 小时
发表于 2015-3-18 11:35:09 | 显示全部楼层
回复【7楼】shirl:
---------------------------------
你的配置代码能让我看一下吗
最近没吃药,感觉自己萌萌哒!
回复 支持 反对

使用道具 举报

  离线 

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-8-16
在线时间
25 小时
发表于 2015-4-7 22:40:18 | 显示全部楼层
楼主,能把代码贴出来学习下不,看图难以理解到位
回复 支持 反对

使用道具 举报

  离线 

5

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2014-10-28
在线时间
11 小时
发表于 2015-4-7 22:56:02 | 显示全部楼层
MARK 之后要用SPI+DMA写SD卡
成功必然有成功的原因,
回复 支持 反对

使用道具 举报

  离线 

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-8-16
在线时间
25 小时
发表于 2015-4-8 10:43:06 | 显示全部楼层
楼主说的TI Mode 是指 SPI_Mode_Master 模式吗?
回复 支持 反对

使用道具 举报

  离线 

56

主题

497

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1834
金钱
1834
注册时间
2013-11-18
在线时间
247 小时
 楼主| 发表于 2015-4-8 11:10:01 | 显示全部楼层
回复【12楼】ghostfly:
---------------------------------
SPI TI 协议,具体的你看手册就知道了
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 反对

使用道具 举报

  离线 

3

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
458
金钱
458
注册时间
2012-7-19
在线时间
51 小时
发表于 2015-4-8 12:21:56 | 显示全部楼层
回复【13楼】mzwhhwj:
---------------------------------
发送是对的,接收不对???接收方就是从模式了,spi外设自动在收到设定的时钟数后认为接收成功开始下一个循环
spi就是个移位寄存器,clk就是移位时钟,nss可以复位这个移位寄存器。。。
回复 支持 反对

使用道具 举报

  离线 

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-8-16
在线时间
25 小时
发表于 2015-4-8 15:48:37 | 显示全部楼层
回复【13楼】mzwhhwj:
---------------------------------
百度了下,还是不明白SPI TI ,也不懂看哪个手册,楼主方便的话,发我个相关资料 2208460862@qq.com  谢谢
回复 支持 反对

使用道具 举报

  离线 

56

主题

497

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1834
金钱
1834
注册时间
2013-11-18
在线时间
247 小时
 楼主| 发表于 2015-4-8 15:51:14 | 显示全部楼层
回复【15楼】ghostfly:
---------------------------------
看STM32中文参考手册
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 反对

使用道具 举报

  离线 

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-8-16
在线时间
25 小时
发表于 2015-4-8 20:54:01 | 显示全部楼层
楼主,看了中文手册,你说的TI模式,我没找到,我理解成主模式,不知是否合理(在手册中,没找到楼主贴的第三幅图), 方便的话,还请楼主共享下这个配置过程,想学习。谢谢
回复 支持 反对

使用道具 举报

  离线 

41

主题

365

帖子

0

精华

高级会员

Rank: 4

积分
649
金钱
649
注册时间
2014-9-30
在线时间
55 小时
发表于 2015-4-8 22:55:16 | 显示全部楼层
 ST 公司的 文档 介绍,始终 让人 ‘心理缺乏 完整感’ 。。。

TI 模式 —— 的 英文 全字母 拼写::大家 猜、难道 只能靠 【猜】 ??

回复 支持 反对

使用道具 举报

  离线 

56

主题

497

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1834
金钱
1834
注册时间
2013-11-18
在线时间
247 小时
 楼主| 发表于 2015-4-9 00:08:15 | 显示全部楼层
回复【18楼】caosix:
---------------------------------
TI就是德州仪器,搞硬件的人一看就知道TI是啥。TI Mode就是德州仪器的SPI协议标准,而我们一般用的SPI都是摩托罗拉的标准
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 反对

使用道具 举报

  离线 

56

主题

497

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1834
金钱
1834
注册时间
2013-11-18
在线时间
247 小时
 楼主| 发表于 2015-4-9 00:10:21 | 显示全部楼层
回复【19楼】mzwhhwj:
---------------------------------
如果你用过TI的器件就知道,TI的器件的SPI接口就是它自己的TI Mode 的时序
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 反对

使用道具 举报

  离线 

27

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-8-14
在线时间
8 小时
发表于 2015-10-14 18:37:24 | 显示全部楼层
TI mode,用DMA的话能用中断吗楼主?
最近没吃药,感觉自己萌萌哒!
回复 支持 反对

使用道具 举报

  离线 

56

主题

497

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1834
金钱
1834
注册时间
2013-11-18
在线时间
247 小时
 楼主| 发表于 2015-10-25 23:58:22 | 显示全部楼层
回复【21楼】barryotugh:
---------------------------------
可以用中断
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-12-10
在线时间
0 小时
发表于 2015-12-10 12:37:48 | 显示全部楼层
您好。我现在也是用SPI大量数据接收,并且是不定长数据,关于这个不定长怎么解决?DMA 也要设置长度吧,急求解决方案
回复 支持 反对

使用道具 举报

  离线 

10

主题

241

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1491
金钱
1491
注册时间
2013-7-29
在线时间
188 小时
发表于 2015-12-11 08:09:42 | 显示全部楼层
回复【23楼】zsl:
---------------------------------
我在11月24号时在该网站发过一个SPI主从机通信的例程,你可以查下。
回复 支持 反对

使用道具 举报

  离线 

38

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-12-7
在线时间
15 小时
发表于 2016-1-27 17:33:12 | 显示全部楼层
我现在也遇到从机接收数据开始数据是对的,后面几次数据出错的问题,楼主你这个主从极性相位设置是一样的吗
每天都是新开始
回复 支持 反对

使用道具 举报

  离线 

1

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-10-18
在线时间
20 小时
发表于 2016-8-15 19:37:56 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

  离线 

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2016-9-6
在线时间
23 小时
发表于 2017-2-13 18:03:04 | 显示全部楼层
您好,我想请教个问题,两个单片机,主机发送正常,从机也能接收。可是从机发送主机接收就是乱码了,这个是不是需要在从机发送的时候修改下SPI的模式呢?
回复 支持 反对

使用道具 举报

  离线 

6

主题

488

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549
金钱
1549
注册时间
2015-5-8
在线时间
256 小时
发表于 2017-4-12 09:25:24 | 显示全部楼层
很好,感谢分享
回复 支持 反对

使用道具 举报

  离线 

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2018-3-6
在线时间
0 小时
发表于 2017-4-25 21:22:22 | 显示全部楼层
搞了几天,连续模式一直不对, 看了这个文档,世界终于安宁了。多谢楼主分享,
回复 支持 反对

使用道具 举报

  离线 

10

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2016-7-7
在线时间
95 小时
发表于 2017-7-3 17:38:22 | 显示全部楼层
jbb2013 发表于 2017-4-25 21:22
搞了几天,连续模式一直不对, 看了这个文档,世界终于安宁了。多谢楼主分享,

接收端怎么配置的,用中断接收么,还是DMA???
回复 支持 反对

使用道具 举报

  离线 

10

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2016-7-7
在线时间
95 小时
发表于 2017-7-3 17:38:42 | 显示全部楼层
请问楼主接收端怎么配置的,用中断接收么,还是DMA???
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2017-7-12
在线时间
0 小时
发表于 2017-7-12 10:55:23 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手入门

积分
33
金钱
33
注册时间
2017-3-3
在线时间
5 小时
发表于 2017-9-22 11:27:59 | 显示全部楼层
不错
回复 支持 反对

使用道具 举报

  离线 

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-11-23
在线时间
25 小时
发表于 2017-11-13 21:27:29 | 显示全部楼层
谢谢,受益匪浅。
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
20
金钱
20
注册时间
2018-1-8
在线时间
2 小时
发表于 2018-1-8 15:24:49 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

  离线 

2

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
603
金钱
603
注册时间
2017-12-11
在线时间
135 小时
发表于 2018-5-15 16:00:56 | 显示全部楼层
先看看再说
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-22 20:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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