在 Master (SPI) 中设置 nss_soft

Posted

技术标签:

【中文标题】在 Master (SPI) 中设置 nss_soft【英文标题】:Setting nss_soft in Master (SPI) 【发布时间】:2018-07-28 17:31:52 【问题描述】:

我想使用 Nucleo STM32F103RB 在主机中将 NSS 引脚设置为软件模式。但我有一些问题?

在参考手册中,他们说,

在 NSS 软件模式下,设置 SPI_CR1 寄存器中的 SSM 和 SSI 位。如果在输出模式下需要 NSS 引脚,则只需设置 SSOE 位即可。

现在,

为什么我们需要用 SSM 设置 SSI 位?

SSOE位的用途是什么?

【问题讨论】:

【参考方案1】:

这与很少使用的多主通信有关。

在多主机设置中,NSS 信号控制对 SPI 总线的访问。不幸的是,ST 文档在那里有点模糊,但我的理解是

NSS 高输入表示总线空闲,您可以传输 NSS 低输入意味着其他人正在传输,你成为奴隶。

为什么我们需要用 SSM 设置 SSI 位?

如果SSMSoftware Slave Management)位设置为主模式,则SSISlave Select Internal) 位成为 NSS 信号源而不是引脚。将SSI 设置为1 允许主设备进行传输,将其设置为0 使其成为从设备(清除CR1 中的MSTR 位)。

如果你只有一个master,只需设置

SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI

不用担心其余的。这是最灵活的方式,您可以通过单独连接到 CS 线路的 GPIO 输出来控制任意数量的从机。您也可以将 NSS 引脚用作 GPIO。

SSOE位的用途是什么?

它将 NSS 引脚更改为输出。最初设置为高电平,当控制器开始传输时(写入DR 寄存器时),它变为低电平。请注意,传输完成后它不会再次自动变高,而是通过将SPI_CR1_SPE设置为0

当单个主设备与单个从设备通信时,使用SSOE 很有用,因为 CS 由 SPI 寄存器控制。根本不必与 GPIO 外围设备通信,无需将其基地址加载到寄存器并将其保存在那里,从而在闪存中节省了一些周期和几个字节,从而可以通过以下方式将寄存器用于其他用途一个优化编译器。

【讨论】:

以上是关于在 Master (SPI) 中设置 nss_soft的主要内容,如果未能解决你的问题,请参考以下文章

Ag-grid 在 Master/Detail 组件中设置 autoheight

如何在实体框架中设置默认值

如何在 Java 中设置 SourceDataLine 的音量

在Gatsby中设置环境变量

在网站中设置一个分享

如何在redux中设置初始状态