看了很多關于NSS片選信號配置的資料,感覺沒有說清楚的,自己寫了一些個人的看法,希望對大家有用。
首先看我們看下NSS的結構圖,如下。
從上圖中我們可以看出左邊的NSS代表硬件的引腳,右邊的internalnss是內部NSS,微處理器根據這個內部的NSS來確定不同的操作。
和NSS相關的寄存器標志位主要是SSM、SSI以及SSOE。SSM用來配置是硬件模式還是軟件模式。SSI用來確定在軟件模式下NSS輸入的極性,SSOE用來決定是否允許內部NSS信號送出的NSS引腳上。
對NSS的管理有硬件模式和軟件模式之分,所謂硬件模式(SSM=0,二選一處0端有效),就是內部NSS的信號來自于外部NSS引腳,是確確實實的硬東西(引腳)送過來的。軟件模式(SSM=1,二選一處1端有效),內部NSS信號來自于內部SSI標志位,用戶可以利用軟件設置SSI,來控制內部NSS。
一、如果STM32作為SPI總線的主設備
1.如果是硬件模式,并且SSOE等于1,那么NSS引腳電平可以送入內部NSS,內部NSS也可以通過輸出控制單元送到NSS引腳上,就可以實現(xiàn)對從設備的控制了。NSS引腳在工作時會出現(xiàn)低電平,可以打開外部從設備。如果SSOE等于0,這時內部NSS信息就無法送到NSS引腳了,那不是無法控制從設備了么?對,此時NSS引腳就無法控制從設備了,不過如果有其他的主設備將NSS引腳拉低,那么此時SPI就自動進入了從模式,可以接收數(shù)據了,實現(xiàn)了多主模式下(比如兩個STM32通過SPI進行通信,都可能是主設備)的功能切換。
2.如果是軟件模式,內部NSS的信息來自于SSI標志位,但內部NSS信息無法送到NSS引腳,此時就需要用戶使用其他的GPIO引腳來控制從設備。
二、如果STM32作為SPI總線的從設備
1.如果是硬件模式,且SSOE=0,NSS引腳信號可以送入到內部NSS,STM32可以受控于其他主設備。如果此時SSOE=1,那么SPI也可以切換成主模式,實現(xiàn)從到主的切換。
2.如果是軟件模式,如果SSI=0,那么內部NSS一直未低電平,總是被選中,可以隨時和外部設備通信(此時STM32自己是從設備)。
因此:一般STM32做主設備,且管理一個從設備,可以設置成硬件模式。 如果管理多個從設備,可以設置軟件模式。如果STM32做從設備,盡量也設置成軟件模式,讓SSI=0,就可以隨時接收數(shù)據了。