86180A 发表于 2024-8-22 20:01:14

SPI的片选信号,为什么看到绝大多数例程都选择了软件操作

STM32这种,SPI的NSS引脚,不是可以配置成硬件自动处理吗?

但看了好多例程,即使就是一主一从,也对SPI的NSS引脚,选择了软件处理,而不是硬件处理。

还没搞懂这是为什么。

如果一主多从,自然要选择软件处理,因为片选引脚需要多个。要操作哪个器件就选哪个。

Landmark 发表于 2024-8-22 20:47:05

我估计是程序懒得是研究硬件处理的逻辑吧。反正软件处理起来,随意自己怎么控制。

z123 发表于 2024-8-22 21:00:31

硬件的nss未必适合就近拉线

t3486784401 发表于 2024-8-22 21:09:53

因为包长度不固定。

一般nss用来标识包头、包尾,这不固定就很难统一。

作为对照,i2c的 STA 和 STO 起止位,在有i2c硬件的情况下,也多数需要软件写寄存器触发

xuxi2009 发表于 2024-8-22 22:36:15

可能51工程师用习惯了

cloudboy 发表于 2024-8-23 09:48:41

因为CS信号有时候也作为命令起始信号,多个字节中间传输如果CS恢复高电平可能导致命令不完整,硬件的CS是否拉低一般和其发送缓冲区内是否还有待发送的数据有关,如果软件不能及时填充要发送的数据,会导致发送缓冲区空,从而可能导致CS恢复高电平,这样实际工作中接口时序可能会受到不可预知的软件行为影响,所以保险还是直接用软件IO去拉方便

hpdell 发表于 2024-8-23 14:55:46

cloudboy 发表于 2024-8-23 09:48
因为CS信号有时候也作为命令起始信号,多个字节中间传输如果CS恢复高电平可能导致命令不完整,硬件的CS是否 ...
(引用自6楼)


解释的精辟也狠精华

86180A 发表于 2024-8-23 15:31:50

理解了。感谢4&6楼

jianfengxixi 发表于 2024-8-23 15:35:25

stm32的硬件NSS灵活得很,完全满足绝大多数需求,不用就是懒得去研究而已。。。

smallwood 发表于 2024-8-24 02:11:51

jianfengxixi 发表于 2024-8-23 15:35
stm32的硬件NSS灵活得很,完全满足绝大多数需求,不用就是懒得去研究而已。。。 ...
(引用自9楼)

STM的硬件SPI NSS才是最鸡肋的,只能每次发送1byte /或一个half word,而不能发送packet,所以很多时都不能用,我不知道这样设计的目的是什么。

gzhuli 发表于 2024-8-24 03:34:21

smallwood 发表于 2024-8-24 02:11
STM的硬件SPI NSS才是最鸡肋的,只能每次发送1byte /或一个half word,而不能发送packet,所以很多时都不 ...
(引用自10楼)

STM32手册并不是这样写的,NSS开始通讯时会拉低并一直维持到SPI禁用,所以你和6楼说的问题都不存在。

yz_altang 发表于 2024-8-24 09:34:48

6楼说的有道理,spi片选有时候就是当数据发送状态用的。

dukelec 发表于 2024-8-24 09:36:40

本帖最后由 dukelec 于 2024-8-24 09:43 编辑

gzhuli 发表于 2024-8-24 03:34
STM32手册并不是这样写的,NSS开始通讯时会拉低并一直维持到SPI禁用,所以你和6楼说的问题都不存在。

...
(引用自11楼)

要看是 stm32 什么系列,f1、3、4 系列,对应的应该是你这个截图,这个更坑,spi disable 才失能 nss 脚,实际表现为:spi 初始化后,nss 脚就一直拉低有效,想让它释放 nss 脚,需要手动 disable 一下 spi 控制器,跟自动不粘半点边,完全不如手动操作 io 当片选。

而 g0 g4 系列,有所升级,nss 脚可以硬件随通讯的数据自动拉低拉高,但是,只能是一个最小通讯单位就拉高一次,譬如 spi 配置成 16 bits,那么每 16 bits 就会失能拉高,想 dma 发送一组数据让它整体只拉低一次,应该是做不到。

smallwood 发表于 2024-8-24 10:56:02

dukelec 发表于 2024-8-24 09:36
要看是 stm32 什么系列,f1、3、4 系列,对应的应该是你这个截图,这个更坑,spi disable 才失能 nss 脚 ...
(引用自13楼)

是的,这就是我所说的鸡肋之处,在自动模式下只能发送1byte/2byte,聊胜于无。

SPI 3线模式(bidirection)的设计方式更是让人摸不着头脑,一当触发传输sck便停不了直至SPI禁用,这根本不能控制要精准传输多少byte。SPI的设计根本很简单,你以为STM新系列的芯片应该会改善,但到头来还是和以前一样。

不过我选MCU还是首先STM,就因为没有国产芯片那种资料/功能收收藏藏让你找不到的德性。

ibmx311 发表于 2024-8-24 11:51:16

看起来一直没用是对的,市面上卖的开发板以前买过几个,也都是没有用。

三年模拟 发表于 2024-8-24 16:43:10

cloudboy 发表于 2024-8-23 09:48
因为CS信号有时候也作为命令起始信号,多个字节中间传输如果CS恢复高电平可能导致命令不完整,硬件的CS是否 ...
(引用自6楼)

单片机spi我观察到的都是软件的方法,但是在linux里面应用基本都用硬件nss,哪有啥不稳定的,都是开发板教程导致的
页: [1]
查看完整版本: SPI的片选信号,为什么看到绝大多数例程都选择了软件操作