NFYG2022 发表于 2024-1-17 20:45:27

关于SPI通信一主多从的疑问

我尝试用1个SPI主机与3路SPI从机连接,即SCK,MISO,MOSI共享总线,3个从机分别用3根片选来选择。

当2个或3个从机连接上去时,SPI一直接收到0,但是任何1路从机单独通信都正常,一旦再插上1路,原本正常的数据立刻变成0。

例如,单独接从机1,可以正常通信,此时接上从机2,从机2是没有被片选的(从机2的片选一直接3.3V高电平),从机1的通信立刻变成0。

SCK,MISO,MOSI这些总线需要加电阻吗?还是其他什么原因?难道是从机芯片自身特性不支持一主多从?

蓝蓝的恋 发表于 2024-1-17 21:20:25

片选没使能所有脚应该是输入状态

NFYG2022 发表于 2024-1-17 21:32:45

蓝蓝的恋 发表于 2024-1-17 21:20
片选没使能所有脚应该是输入状态
(引用自2楼)

“所有脚”是指从机的引脚?

zxq6 发表于 2024-1-17 22:10:03

stm32的spi从鸡是半残废的。dma不好用,miso不受cs控制。或许我的水平不够吧。

t3486784401 发表于 2024-1-17 22:11:38

这就是 MISO 没释放。 有些片子支持释放 MISO,当 SS=H 时候 MISO 释放给别人用; 有些片子不支持,就无法直接复用 SPI 总线。

NFYG2022 发表于 2024-1-17 22:55:12

会不会是从机芯片空闲时(指没有被片选信号选中时)MISO就是默认低电平,导致把总线MISO全部拉低了?

zchong 发表于 2024-1-18 07:54:52

示波器,观察

fenglove 发表于 2024-1-18 08:34:46

t3486784401 发表于 2024-1-17 22:11
这就是 MISO 没释放。 有些片子支持释放 MISO,当 SS=H 时候 MISO 释放给别人用; 有些片子不支持,就无法 ...
(引用自5楼)

独占了,确实没法复用

初音之恋 发表于 2024-1-18 08:37:17

有的SPI芯片 MISO会强制拉低,无法复用

NFYG2022 发表于 2024-1-18 08:38:51

zchong 发表于 2024-1-18 07:54
示波器,观察
(引用自7楼)

我用示波器接MISO看了下,接一路(SS1 low),信号正常,接两路(SS1 low, SS2 high),信号波形还在,但是电压峰值从3.4V降低为1.44V,接三路(SS1 low, SS2&SS3 high),信号波形还在,但是电压峰值再度降低为0.75V。

为什么每接一路从机,电压都下降?照理说从机未被片选应该处于高阻态,不影响电压才对。

这种情况是不是该在sck miso mosi总线上接上拉电阻?

NFYG2022 发表于 2024-1-18 10:43:02

NFYG2022 发表于 2024-1-18 08:38
我用示波器接MISO看了下,接一路(SS1 low),信号正常,接两路(SS1 low, SS2 high),信号波形还在,但是电 ...
(引用自10楼)

进一步测试发现从机未被片选时 MISO一直被置低电平......而不是高阻态

dukelec 发表于 2024-1-18 10:49:01

NFYG2022 发表于 2024-1-18 10:43
进一步测试发现从机未被片选时 MISO一直被置低电平......而不是高阻态
(引用自11楼)

从机是什么芯片?能不能说一下让大家避坑

NFYG2022 发表于 2024-1-18 11:20:06

dukelec 发表于 2024-1-18 10:49
从机是什么芯片?能不能说一下让大家避坑
(引用自12楼)

MT6816 麦歌恩的磁编码器芯片

Xujuango 发表于 2024-1-18 12:40:05

NFYG2022 发表于 2024-1-18 11:20
MT6816 麦歌恩的磁编码器芯片
(引用自13楼)

3线模式还是4线?

The MT6816 also provides a 4-Wire or 3-Wire SPI (Register ‘SPI_Mode’ should be
programmed to ‘High’ to enable 3-Wire SPI Mode)

NFYG2022 发表于 2024-1-18 13:10:10

Xujuango 发表于 2024-1-18 12:40
3线模式还是4线?

The MT6816 also provides a 4-Wire or 3-Wire SPI (Register ‘SPI_Mode’ should be ...
(引用自14楼)

4线模式,没修改MT6816的寄存器

trave_yang 发表于 2024-1-18 13:39:54

NFYG2022 发表于 2024-1-18 08:38
我用示波器接MISO看了下,接一路(SS1 low),信号正常,接两路(SS1 low, SS2 high),信号波形还在,但是电 ...
(引用自10楼)

在MISO线上加个强上拉电阻。单片机内部上拉电阻太弱。

NFYG2022 发表于 2024-1-18 13:55:27

trave_yang 发表于 2024-1-18 13:39
在MISO线上加个强上拉电阻。单片机内部上拉电阻太弱。
(引用自16楼)

也不知道MT6816内部上拉/下拉电阻多大,还得一个个试出合适的外部上拉阻值

t3486784401 发表于 2024-1-18 14:43:58

NFYG2022 发表于 2024-1-18 13:55
也不知道MT6816内部上拉/下拉电阻多大,还得一个个试出合适的外部上拉阻值 ...
(引用自17楼)

这不是上拉/下拉的事,不释放 MISO 你怎了拉都不可靠: 能拉上去了,某些片子又拉不下来了。
国产片子就这点不好,工作模式啥的都不写明,但凡复用一下全是坑。

建议上三态门搞一下,MISO 由 SS 负责使能。

NFYG2022 发表于 2024-1-18 15:47:39

t3486784401 发表于 2024-1-18 14:43
这不是上拉/下拉的事,不释放 MISO 你怎了拉都不可靠: 能拉上去了,某些片子又拉不下来了。
国产片子就 ...
(引用自18楼)

感觉你这个建议最靠谱

myiccdream 发表于 2024-1-18 16:18:18

本帖最后由 myiccdream 于 2024-1-18 16:19 编辑

NFYG2022 发表于 2024-1-18 13:55
也不知道MT6816内部上拉/下拉电阻多大,还得一个个试出合适的外部上拉阻值 ...
(引用自17楼)

上拉是不行的
曾经有一个芯片的供应商 的芯片。 他们的CS 为高时候,MISO 会把总线拉到地
他们给出的方案是 在该芯片的MISO总线上串联一个 合适的电阻。
就是即使我把总线拉到地了,但是有电阻在,总线上其他设备还是能通信。
或者你可以试试那种零点几伏的二极管

dukelec 发表于 2024-1-18 17:00:09

NFYG2022 发表于 2024-1-18 15:47
感觉你这个建议最靠谱
(引用自19楼)

确定没有片选时,miso 一定为低的话,还可以考虑加一片三输入或门来解决问题

或者试试它的 3 线模式

modbus 发表于 2024-1-18 17:35:00

myiccdream 发表于 2024-1-18 16:18
上拉是不行的
曾经有一个芯片的供应商 的芯片。 他们的CS 为高时候,MISO 会把总线拉到地
他们给出的方案 ...
(引用自20楼)

这种设计还是老老实实加一个三态门芯片比如74LVC1G126最靠谱,或者加一个模拟开关74LVC1G3157也行
页: [1]
查看完整版本: 关于SPI通信一主多从的疑问