你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

调试SPI+DMA的一点心得

[复制链接]
蓝凌风 发布时间:2017-5-22 10:55
由于项目需要,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也做得有点烂。

评分

参与人数 1 ST金币 +1 收起 理由
青蓝冰水 + 1 赞一个!

查看全部评分

3 收藏 6 评论15 发布时间:2017-5-22 10:55

举报

15个回答
蓝凌风 回答时间:2017-5-22 15:21:04
衔胆栖冰 发表于 2017-5-22 15:02
这帖子是从原子的论坛弄过了的吧,一模一样

因为都是我写的
wudianjun2001 回答时间:2017-5-22 13:56:19
看看,学习
衔胆栖冰 回答时间:2017-5-22 14:30:18
“网上都没有这样大量数据传输的应用,我只能说STM32 的SPI也做得有点烂。。。。。。。。。。。”
看到这里,我想说的是,我之前做过,也搜到过很多相关资料。而且还专门写过关于SPI的东西,还有附上别人的文章。实测多路SPI+dma同时传输。
衔胆栖冰 回答时间:2017-5-22 15:02:48
这帖子是从原子的论坛弄过了的吧,一模一样
wudianjun2001 回答时间:2017-5-23 13:47:09
感谢分享
wudianjun2001 回答时间:2017-5-23 13:57:55
感谢分享
霹雳之火 回答时间:2017-5-23 14:14:30
谢谢分享
safesage 回答时间:2017-9-6 15:54:34
看了好些资料,就楼主说的最清楚,谢谢
蓝黑精灵 回答时间:2018-1-2 09:48:06
衔胆栖冰 发表于 2017-5-22 14:30
“网上都没有这样大量数据传输的应用,我只能说STM32 的SPI也做得有点烂。。。。。。。。。。。”
看到这里 ...

您好,请问您写的SPI得资料在哪啊?能发个链接,大数据量传输遇到可问题,谢谢
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版