OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5726|回复: 12

关于两块STM32之间的SPI通信,应答机制缺失

[复制链接]

27

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2018-7-20
在线时间
117 小时
发表于 2018-8-10 17:17:51 | 显示全部楼层 |阅读模式
3金钱
最近在弄SPI,原子给出的SPI例程是驱动W25Q256实现SPI FLASH数据读写,F4作为主机,W25Q256作为从机,在主机片选从机发送命令,完成读写操作,这里面W25Q256是完全处于接收响应的状态,所以能保证数据的完整性。
但是现在有个问题,SPI没有应答机制,如果SPI放在两个STM32芯片上面,F4作为主机,F1作为从机,主机接收从机发来的数据,这里面会不会发生数据丢失的问题,也就是说,假如F4发送读取命令时,F1被片选却正好进入某个中断,那此时F4的操作命令不就丢失了嘛。
有人做过两块芯片的SPI通信吗,求大神解答

最佳答案

查看完整内容[请看2#楼]

这个你就得自己做处理了。比如加协议。
我只喜欢喜欢我的人
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-10 17:17:52 | 显示全部楼层

加协议

这个你就得自己做处理了。比如加协议。
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2018-8-20
在线时间
2 小时
发表于 2018-8-20 15:44:35 | 显示全部楼层
楼主大大找到解决方案了吗被这个问题困扰了好些天了,主从通信一直解决不了
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-20 16:36:22 | 显示全部楼层
SPI只是搬运工, 砖头是红还是绿, 是你自己做主的
回复

使用道具 举报

1

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2015-4-7
在线时间
94 小时
发表于 2018-8-21 17:50:10 | 显示全部楼层
原子哥说的很清楚了    加个协议就解决了    modbus RTU之类的  或者自己定义一个数据帧协议就搞定了
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2018-8-21 18:06:57 | 显示全部楼层
也可以参考串口的硬件流控功能,从机添加一个IO口作忙或闲指示,主机在从机闲时才发、忙时不发。
另外从机最好加缓存或用DMA作批量接收。
回复

使用道具 举报

27

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2018-7-20
在线时间
117 小时
 楼主| 发表于 2018-8-23 10:40:21 | 显示全部楼层
正点原子 发表于 2018-8-11 02:18
这个你就得自己做处理了。比如加协议。

好的,谢谢
我只喜欢喜欢我的人
回复

使用道具 举报

27

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2018-7-20
在线时间
117 小时
 楼主| 发表于 2018-8-23 10:41:01 | 显示全部楼层
daizia 发表于 2018-8-20 15:44
楼主大大找到解决方案了吗被这个问题困扰了好些天了,主从通信一直解决不了

我这个连接之后收到的数据一直为0
我只喜欢喜欢我的人
回复

使用道具 举报

27

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2018-7-20
在线时间
117 小时
 楼主| 发表于 2018-8-23 10:41:41 | 显示全部楼层
edmund1234 发表于 2018-8-20 16:36
SPI只是搬运工, 砖头是红还是绿, 是你自己做主的

明白,只不过我这个收发一直显示是0
,数据不知道去哪了
我只喜欢喜欢我的人
回复

使用道具 举报

27

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2018-7-20
在线时间
117 小时
 楼主| 发表于 2018-8-23 10:41:58 | 显示全部楼层
ufbycd 发表于 2018-8-21 18:06
也可以参考串口的硬件流控功能,从机添加一个IO口作忙或闲指示,主机在从机闲时才发、忙时不发。
另外从机 ...

好的,谢谢
我只喜欢喜欢我的人
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2018-8-23 15:03:56 | 显示全部楼层
本帖最后由 civic7366 于 2018-8-23 15:19 编辑

假如F4发送读取命令时,F1被片选却正好进入某个中断,那此时F4的操作命令不就丢失了嘛。


你這個問題很好處理吧...你的命令超過16bit嗎? 如果沒有就不會丟失



如果超過還有DMA可以收 怎樣都不會丟資料

難點是 master read slave

看看原本master是怎麼讀資料的, 發完命令後緊接著就讀資料

Slave端 除了有其它優先權更高的中斷延遲干擾

還要考慮 收命令-解命令 然後才能準備回傳資料  

如果slave響應不夠即時...master rx部分會出錯 必需要加一些機制
回复

使用道具 举报

27

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2018-7-20
在线时间
117 小时
 楼主| 发表于 2018-8-23 17:10:42 | 显示全部楼层
civic7366 发表于 2018-8-23 15:03
假如F4发送读取命令时,F1被片选却正好进入某个中断,那此时F4的操作命令不就丢失了嘛。

[/ ...

对....所以现在的问题还是,我的F4发数据过去了,F1收到的一直是0,而且我怎么才能知道数据有没有发过去,或者说,F1收到的0只是随机出现的,和F4没有关系,两者之间根本还没有通信

我的F1和F4是在同一片PCB板子上面,SPI引脚已经接好了
我只喜欢喜欢我的人
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2018-8-24 09:29:52 | 显示全部楼层
fang百川 发表于 2018-8-23 17:10
对....所以现在的问题还是,我的F4发数据过去了,F1收到的一直是0,而且我怎么才能知道数据有没有发过去 ...

打開F1的RX中斷 然後把斷點放中斷裡面

如果進不去表示你初始化還有問題吧

你收到的0 可能只是它本來的暫存裡面的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 19:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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