在主机(SPI)中设置 nss_soft
Setting nss_soft in Master (SPI)
我想使用 Nucleo STM32F103RB 在主机中将 NSS 引脚设置为软件模式。但我有一些问题?
在参考手册中,他们说,
In NSS Software mode, set the SSM and SSI bits in the SPI_CR1 register. If the NSS pin is required in output mode, the SSOE bit only should be set.
现在,
为什么要用SSM设置SSI位?
SSOE 位的用途是什么?
这与很少使用的multi-master通信有关。
在 multi-master 设置中,NSS 信号控制对 SPI 总线的访问。不幸的是,ST 文档在那里有点含糊,但我的理解是
- NSS 高输入表示总线空闲,允许传输
- NSS低输入意味着别人在传输,你成为奴隶。
Why do we need to set SSI bit with SSM?
如果SSM
(S软件Slave M管理)位设置为主模式,然后 SSI
(Slave Select I内部)位成为 NSS 信号源而不是引脚。将 SSI
设置为 1
允许主机传输,将其设置为 0
使其成为从机(清除 CR1
中的 MSTR
位)。
如果你只有一个主人,就设置
SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI
其余的不用担心。这是最灵活的方式,您可以通过单独连接到 CS 线的 GPIO 输出来控制任意数量的从站。您也可以将 NSS 引脚用作 GPIO。
What is the purpose of SSOE bit?
它将 NSS 引脚更改为输出。最初设置为高,当控制器开始传输时(当 DR
寄存器被写入时)它变为低。注意传输完成后不会自动再次变高,而是通过设置SPI_CR1_SPE
为0
.
当单个主机与单个从机通信时,使用 SSOE
会很有用,因为 CS 由 SPI 寄存器控制。根本不需要与 GPIO 外设通信,不需要将其基地址加载到寄存器并将其保存在那里,从而节省了一些周期和闪存中的几个字节,从而可以将寄存器用于其他用途优化编译器。
我想使用 Nucleo STM32F103RB 在主机中将 NSS 引脚设置为软件模式。但我有一些问题?
在参考手册中,他们说,
In NSS Software mode, set the SSM and SSI bits in the SPI_CR1 register. If the NSS pin is required in output mode, the SSOE bit only should be set.
现在,
为什么要用SSM设置SSI位?
SSOE 位的用途是什么?
这与很少使用的multi-master通信有关。
在 multi-master 设置中,NSS 信号控制对 SPI 总线的访问。不幸的是,ST 文档在那里有点含糊,但我的理解是
- NSS 高输入表示总线空闲,允许传输
- NSS低输入意味着别人在传输,你成为奴隶。
Why do we need to set SSI bit with SSM?
如果SSM
(S软件Slave M管理)位设置为主模式,然后 SSI
(Slave Select I内部)位成为 NSS 信号源而不是引脚。将 SSI
设置为 1
允许主机传输,将其设置为 0
使其成为从机(清除 CR1
中的 MSTR
位)。
如果你只有一个主人,就设置
SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI
其余的不用担心。这是最灵活的方式,您可以通过单独连接到 CS 线的 GPIO 输出来控制任意数量的从站。您也可以将 NSS 引脚用作 GPIO。
What is the purpose of SSOE bit?
它将 NSS 引脚更改为输出。最初设置为高,当控制器开始传输时(当 DR
寄存器被写入时)它变为低。注意传输完成后不会自动再次变高,而是通过设置SPI_CR1_SPE
为0
.
当单个主机与单个从机通信时,使用 SSOE
会很有用,因为 CS 由 SPI 寄存器控制。根本不需要与 GPIO 外设通信,不需要将其基地址加载到寄存器并将其保存在那里,从而节省了一些周期和闪存中的几个字节,从而可以将寄存器用于其他用途优化编译器。