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

调试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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版