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