OpenEdv-开源电子网

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

SPI小问题

[复制链接]

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
发表于 2017-9-9 21:09:39 | 显示全部楼层 |阅读模式
1金钱
硬件SPI,当数据输出的时候要上升沿,数据接受的时候要下降沿怎么办(发完以后马上就要收,所以感觉不能马上变化时序),该怎么处理?
SPI.jpg

我看历程的时候,它直接没变,模式依然也是上升沿有效,但是是对的,我想问下这是为什么?

最佳答案

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

你没有理解SPI的机制。 时钟始终都是主机发出的,这一点很重要。 如果主机要发送,一切边沿都是自己在控制, 它一定是在输出数据、并且数据稳定之后,才发出边沿信号通知从机接收,并且预留足够的时间; 如果主机要接收,边沿同样是主机在控制, 如果主机在某个边沿接收数据,意味着:在此边沿的前面一个边沿,子机已经把数据放在数据线了。所以,这两个边沿必然是相反的。 自己理一理。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11553
金钱
11553
注册时间
2014-4-1
在线时间
1317 小时
发表于 2017-9-9 21:09:40 | 显示全部楼层

你没有理解SPI的机制。
时钟始终都是主机发出的,这一点很重要。

如果主机要发送,一切边沿都是自己在控制,
它一定是在输出数据、并且数据稳定之后,才发出边沿信号通知从机接收,并且预留足够的时间;

如果主机要接收,边沿同样是主机在控制,
如果主机在某个边沿接收数据,意味着:在此边沿的前面一个边沿,子机已经把数据放在数据线了。所以,这两个边沿必然是相反的。

自己理一理。


回复

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
 楼主| 发表于 2017-9-10 19:50:58 | 显示全部楼层
xuande 发表于 2017-9-9 22:23
你没有理解SPI的机制。
时钟始终都是主机发出的,这一点很重要。

理解不了,感觉即使子机已经把数据放在数据线了,万万全全可以规定发送和接受都是一个边沿,因为数据线有两条,互不影响嘛
回复

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
 楼主| 发表于 2017-9-10 19:54:45 | 显示全部楼层
结论是不是发送和接受的边沿总是反的
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-9-11 16:05:12 | 显示全部楼层
读数据要在下降沿,发数据在上升沿。有啥冲突的吗?
回复

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
 楼主| 发表于 2017-9-11 16:31:04 | 显示全部楼层
来俩不甜的 发表于 2017-9-11 16:05
读数据要在下降沿,发数据在上升沿。有啥冲突的吗?

没冲突,我只是觉得数据有效都是一个边沿,感觉也没有问题,因为我感觉MISO MOSI是两条线,互不干扰。
不太明白为什么一个边沿是读,一个边沿是写
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-9-11 16:45:06 | 显示全部楼层
SPI通讯可以配置成4种模式,时钟空闲为0、时钟空闲为1(这两个不是很重要)、数据在时钟上升沿采样、数据在时钟下降沿采样。主机应该配置成哪种模式完全由从设备来决定。如果从设备的时钟有效是上升沿的话那么就表示从机是在主机的时钟上升沿到来后即采样主机MOSI上的数据同时从机会在此时从miso管脚发送一位数据,比如从机在时钟的上升沿采样那么具体的操作就是:

SPI_SCK =0;  //主机拉低时钟线,主从双方都将准备发送数据
SPI_MOSI =x;  //主机将数据放置发送数据总线,此时从机也准备将数据放在MISO管脚等待时钟上升沿
SPI_SCK =1; //在时钟上升沿后从机采样主机MOSI上的数据同时在MISO数据线上发送一位数据给主机
m =SPI_MISO; //主机采样从机发送的数据

应该是这样了。
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-9-11 16:50:39 | 显示全部楼层
SNEZSTM32 发表于 2017-9-11 16:31
没冲突,我只是觉得数据有效都是一个边沿,感觉也没有问题,因为我感觉MISO MOSI是两条线,互不干扰。
...

数据有效就是在一个边沿,不存在一个边沿发送一个边沿接收。
回复

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
 楼主| 发表于 2017-9-11 17:02:23 | 显示全部楼层
shuaigew88 发表于 2017-9-11 16:50
数据有效就是在一个边沿,不存在一个边沿发送一个边沿接收。

看了你的解释,我似懂非懂,如果说不存在一个边沿发送一个边沿接受,那么我开头的提问又作如何解释。
回复

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
 楼主| 发表于 2017-9-11 17:05:40 | 显示全部楼层
shuaigew88 发表于 2017-9-11 16:45
SPI通讯可以配置成4种模式,时钟空闲为0、时钟空闲为1(这两个不是很重要)、数据在时钟上升沿采样、数据在 ...

如果这样解释的话,主和从发送和接受就都是一个边沿,那么我开始提问那个问题有该如何解释?
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-9-11 17:11:30 | 显示全部楼层
SNEZSTM32 发表于 2017-9-11 17:02
看了你的解释,我似懂非懂,如果说不存在一个边沿发送一个边沿接受,那么我开头的提问又作如何解释。

根据我的理解是SPI数据只有在第一个时钟采样数据或第二个时钟采样数据,如果时钟空闲为高那么第一个时钟就是下降沿采样,第二个时钟就是上升沿采样。下面是W25Q64的数据采样时序: 1.jpg

上图时序可以看出WQ25Q64无论是发送还是接收数据都是在时钟上升沿进行采样。
回复

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
 楼主| 发表于 2017-9-11 17:16:50 | 显示全部楼层
shuaigew88 发表于 2017-9-11 17:11
根据我的理解是SPI数据只有在第一个时钟采样数据或第二个时钟采样数据,如果时钟空闲为高那么第一个时钟 ...

对嘛,但是你看看W25Q64指令03H,或者直接看我开始贴出来的图,说的是发送数据在上升沿,采集数据在下降沿,而且,历程是直接用的上升沿有效,所以我就感觉很奇葩
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-9-11 17:18:59 | 显示全部楼层
本帖最后由 shuaigew88 于 2017-9-11 18:56 编辑
SNEZSTM32 发表于 2017-9-11 17:16
对嘛,但是你看看W25Q64指令03H,或者直接看我开始贴出来的图,说的是发送数据在上升沿,采集数据在下降沿 ...

是的,我也感觉很奇怪可能是我理解的还不够透彻! 2.jpg
这张图是W25QXX先接收命令然后输出数据,可以看出都是在时钟上升沿有效!也就是主机拉高时钟前必须准备好一位数据到MOSI上,数据上升沿后从机采样MOSI同时MISO输出数据,那么主机一定是在时钟上升沿前准备数据,上升沿后数据发出之后等待数据稳定即可采样MISO数据。
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-9-12 09:00:50 | 显示全部楼层
SNEZSTM32 发表于 2017-9-11 16:31
没冲突,我只是觉得数据有效都是一个边沿,感觉也没有问题,因为我感觉MISO MOSI是两条线,互不干扰。
...

这两条线都是上升沿放出数据,下降沿读取数据。没有什么不一样。仅仅对于主机来说就是,发数据在上升沿,读数据在下降沿。你自己想想就好了
我有故事,你有酒吗
回复

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
 楼主| 发表于 2017-9-13 19:27:43 | 显示全部楼层
明白了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 20:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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