OpenEdv-开源电子网

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

SPI全双工模式通信中,主机和从机之间只接MISO线,不接MOSI 线,能够正常工作吗?

[复制链接]

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-5-11 08:56:17 | 显示全部楼层 |阅读模式
我的AD采集芯片与STM32之间通过SPI通信,只需STM以中断的方式读取AD采集芯片中的数据,采用的是全双工模式,但是只接了MISO线和时钟线,并没有接MOSI这条线。现在我有个疑问,SPI是一个环形总线结构,全双工工作时,主机和从机在时钟的同步下交换数据,但是现在没有接MOSI,构不成环形结构,怎么进行数据交换?难道是主机发送的数据从机接收不到就当作自己接收到的是0吗?要不该怎么理解呢?哪位大虾知道指点一下,谢谢了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-5-11 08:59:10 | 显示全部楼层

1、没问题。

2、你的“环形”概念有误。

3、从机会把自己端口悬空以后的电平作为数据。


回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-5-11 09:00:54 | 显示全部楼层

如果用不到,MOSI端口根本不用连接。


回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-5-11 09:20:10 | 显示全部楼层
xuande 发表于 2016-5-11 08:59
1、没问题。

2、你的“环形”概念有误。

我看网上有人说SPI是环形总线结构啊,那就是我也理解错误了。

你说的“从机会把自己端口悬空以后的电平作为数据”,端口悬空以后的电平不就是0了吗?只要MOSI端口悬空,能不能理解为每次通信中从机接收到的数据都为0,同时从机把自己的数通过MISO发给主机?谢谢指点
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-5-11 09:24:15 | 显示全部楼层
本帖最后由 xuande 于 2016-5-11 09:27 编辑

收发之间仅仅共用SCK,数据分两条路径,没有任何关联。

悬空以后电平未必是0,高阻状态,要看它自己博弈的结果。
就像运放同相放大器、反相放大器,输入端如果悬空,那么输出是不确定的、无意义的。


回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-5-11 09:31:50 | 显示全部楼层
xuande 发表于 2016-5-11 09:24
收发之间仅仅共用SCK,数据分两条路径,没有任何关联。

悬空以后电平未必是0,高阻状态,要看它自己博弈 ...

那按照你这样说,SPI的全双工模式和单工模式的工作方式不就一样了么?都是数据分两条路径,为啥还要分个单工和全双工呢?
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-5-11 09:58:23 | 显示全部楼层
qingyu111 发表于 2016-5-11 09:31
那按照你这样说,SPI的全双工模式和单工模式的工作方式不就一样了么?都是数据分两条路径,为啥还要分个 ...

本来就是一样,
只是有一个方向不工作。

单工大概是为了降功耗?没仔细看过。


回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-5-11 10:06:00 | 显示全部楼层
xuande 发表于 2016-5-11 09:58
本来就是一样,
只是有一个方向不工作。

这样说,我就明白了,非常感谢啊
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-5-11 10:09:47 | 显示全部楼层

我用同一个SPI,
MOSI端驱动一片DA,
MISO端驱动一片AD。
两个独立芯片哦。


回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-5-11 13:05:39 | 显示全部楼层
xuande 发表于 2016-5-11 10:09
我用同一个SPI,
MOSI端驱动一片DA,
MISO端驱动一片AD。

那就更有说服力了,无论是全双工还是单共,两条数据线互不干扰
回复 支持 反对

使用道具 举报

1

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2016-3-26
在线时间
33 小时
发表于 2016-5-22 15:18:10 | 显示全部楼层
你设定为半双工不就行了吗?
回复 支持 反对

使用道具 举报

5

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-5-29
在线时间
5 小时
发表于 2016-5-31 19:12:55 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-13 09:37:45 | 显示全部楼层
haijingling1981 发表于 2016-5-22 15:18
你设定为半双工不就行了吗?

是可以,但我更想弄明白细节上的原理
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-25 18:14:33 | 显示全部楼层
xuande 发表于 2016-5-11 10:09
我用同一个SPI,
MOSI端驱动一片DA,
MISO端驱动一片AD。

在论坛经常见到你的影子,之前你回答了我这个问题,当时我感觉自己明白了,今天又翻出来打算复习一下知识,又发现一个不太清楚的地方,就是你说你用同一个SPI控制两个芯片,但是你的两个芯片的时钟肯定不一样吧?两个设备你是共用的时钟线?这个怎么解决呢,太麻烦你了
回复 支持 反对

使用道具 举报

2

主题

1436

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2209
金钱
2209
注册时间
2010-12-16
在线时间
190 小时
发表于 2016-7-25 19:37:24 | 显示全部楼层
qingyu111 发表于 2016-7-25 18:14
在论坛经常见到你的影子,之前你回答了我这个问题,当时我感觉自己明白了,今天又翻出来打算复习一下 ...

独立片选即可 .

如果两个芯片都允许处理相同的字节数量 , 片选也可以共用 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-7-25 20:12:31 | 显示全部楼层
qingyu111 发表于 2016-7-25 18:14
在论坛经常见到你的影子,之前你回答了我这个问题,当时我感觉自己明白了,今天又翻出来打算复习一下 ...


两个芯片用同一个时钟,甚至同一个片选作为触发。
一个DA,一个AD,是同一厂家,速率基本相同。
我这应用有特殊性,先别追求。

回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-26 08:16:02 | 显示全部楼层
xuande 发表于 2016-7-25 20:12
两个芯片用同一个时钟,甚至同一个片选作为触发。
一个DA,一个AD,是同一厂家,速率基本相同。
我这 ...

感谢回答,如果每个芯片所需的时钟不同的话,就不能共用时钟线了吧,只能使用两个SPI了?
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-26 08:17:17 | 显示全部楼层
shihantu 发表于 2016-7-25 19:37
独立片选即可 .

如果两个芯片都允许处理相同的字节数量 , 片选也可以共用 .

感谢!即使每个芯片所需时钟不一样,也可以共用时钟线?不可以吧
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-7-26 08:45:24 | 显示全部楼层
qingyu111 发表于 2016-7-26 08:16
感谢回答,如果每个芯片所需的时钟不同的话,就不能共用时钟线了吧,只能使用两个SPI了?


可以调和。
1、速率问题,就按慢的来,使两者兼容。
     这要看设计需求,总体考虑。我特意选的器件,速率基本相同。
2、数据与时钟的边沿对齐问题。


回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-26 08:54:10 | 显示全部楼层
xuande 发表于 2016-7-26 08:45
可以调和。
1、速率问题,就按慢的来,使两者兼容。
     这要看设计需求,总体考虑。我特意选的器件 ...

我又往前走了一步,有了更深入的了解了,再次感谢
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11472
金钱
11472
注册时间
2014-4-1
在线时间
1296 小时
发表于 2016-7-26 09:02:01 | 显示全部楼层

时序很重要,理解了就很简单。
理解以后就可以自由发挥。
我用一片STM32就可以驱动线阵CCD,效果挺好,关键就是对时序做了修改。
别人多数都要用到CPLD/FPGA了。
有兴趣可以在这里搜一下。

回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-26 09:10:34 | 显示全部楼层
xuande 发表于 2016-7-26 09:02
时序很重要,理解了就很简单。
理解以后就可以自由发挥。
我用一片STM32就可以驱动线阵CCD,效果挺好, ...

很厉害我得向你学习,有什么问题多向你请教,我去搜一下你说的这个
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-6-16
在线时间
2 小时
发表于 2018-1-17 22:44:34 | 显示全部楼层
你好。我现在也在做STM32外接一个16位ADC,通过spi通信,只接MISO,但是读数一直为零。能交流下吗?谢谢了 这是我qq:ilovesmile@qq.com(2067919642)
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 06:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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