SPI的片选信号,为什么看到绝大多数例程都选择了软件操作
STM32这种,SPI的NSS引脚,不是可以配置成硬件自动处理吗?但看了好多例程,即使就是一主一从,也对SPI的NSS引脚,选择了软件处理,而不是硬件处理。
还没搞懂这是为什么。
如果一主多从,自然要选择软件处理,因为片选引脚需要多个。要操作哪个器件就选哪个。
我估计是程序懒得是研究硬件处理的逻辑吧。反正软件处理起来,随意自己怎么控制。 硬件的nss未必适合就近拉线 因为包长度不固定。
一般nss用来标识包头、包尾,这不固定就很难统一。
作为对照,i2c的 STA 和 STO 起止位,在有i2c硬件的情况下,也多数需要软件写寄存器触发 可能51工程师用习惯了 因为CS信号有时候也作为命令起始信号,多个字节中间传输如果CS恢复高电平可能导致命令不完整,硬件的CS是否拉低一般和其发送缓冲区内是否还有待发送的数据有关,如果软件不能及时填充要发送的数据,会导致发送缓冲区空,从而可能导致CS恢复高电平,这样实际工作中接口时序可能会受到不可预知的软件行为影响,所以保险还是直接用软件IO去拉方便 cloudboy 发表于 2024-8-23 09:48
因为CS信号有时候也作为命令起始信号,多个字节中间传输如果CS恢复高电平可能导致命令不完整,硬件的CS是否 ...
(引用自6楼)
解释的精辟也狠精华 理解了。感谢4&6楼
stm32的硬件NSS灵活得很,完全满足绝大多数需求,不用就是懒得去研究而已。。。 jianfengxixi 发表于 2024-8-23 15:35
stm32的硬件NSS灵活得很,完全满足绝大多数需求,不用就是懒得去研究而已。。。 ...
(引用自9楼)
STM的硬件SPI NSS才是最鸡肋的,只能每次发送1byte /或一个half word,而不能发送packet,所以很多时都不能用,我不知道这样设计的目的是什么。
smallwood 发表于 2024-8-24 02:11
STM的硬件SPI NSS才是最鸡肋的,只能每次发送1byte /或一个half word,而不能发送packet,所以很多时都不 ...
(引用自10楼)
STM32手册并不是这样写的,NSS开始通讯时会拉低并一直维持到SPI禁用,所以你和6楼说的问题都不存在。
6楼说的有道理,spi片选有时候就是当数据发送状态用的。 本帖最后由 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 发送一组数据让它整体只拉低一次,应该是做不到。
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,就因为没有国产芯片那种资料/功能收收藏藏让你找不到的德性。 看起来一直没用是对的,市面上卖的开发板以前买过几个,也都是没有用。 cloudboy 发表于 2024-8-23 09:48
因为CS信号有时候也作为命令起始信号,多个字节中间传输如果CS恢复高电平可能导致命令不完整,硬件的CS是否 ...
(引用自6楼)
单片机spi我观察到的都是软件的方法,但是在linux里面应用基本都用硬件nss,哪有啥不稳定的,都是开发板教程导致的
页:
[1]