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