SPI接口的MISO和MOSI連接時是否需要交叉接? SI和SO呢?

經常遇到一些朋友,在設計SPI主機和從機的邏輯互聯時,會習慣性地仿照UART上的TXD和RXD交叉連接,而將SPI主機的MISO和從機的MOSI進行邏輯連接,SPI主機的MOSI和從機的MISO進行邏輯連接,結果導致設計錯誤。這裏給大家提供一個不再出錯而記憶簡單的方法--- 理解MISO和MISO縮寫的具體含義。

MISO和MOSI的含義以及爲何主機從機不能交叉接

   信號 MISO =  Mast In Slave Out,即 在主機這邊是輸入,在從機那邊是輸出。

   信號 MOSI =  Mast Out Slave In,即 在主機這邊是輸出,在從機那邊是輸入。

根據輸入接輸出,輸出接輸入的原理,所以,就應該是

    SPI主機的 MISO,直接 接 SPI從機的MISO,因爲前者是輸入,後者是輸出。

    SPI主機的 MOSI,直接 接 SPI從機的MOSI,因爲前者是輸出,後者是輸入。

也就是,主機的MISO需要接從機的MISO,主機的MOSI需要接從機的MOSI,不能交叉接

那SI和SO呢?

說到這裏,可能有些朋友會說:“不對!我記得之前在TI或FreeScale的某個單片機上,主機的SO接的是MOSI,而不是MISO。“  這是怎麼回事呢?

這裏,就需要理解一下,在FreeScale、NXP等某些單片機或SPI FLASH上,經常會看到 SI 和 SO 這樣縮寫,這裏遵循的確實另外一個縮寫含義:

       SO =  Serial Out  串行輸入

       SI   =  Serial In   串行輸出

這裏的S,不是MOSI裏的Slave從機的意思,而是Serial串行的意思。所以,單純看SO或SI,是無法判斷對應的是MISO還是MOSI,需要根據這個設備,是SPI主機還是SPI從機,做進一步的分析判斷。

比如,假設一個設備是SPI主機,如果其SPI接口管腳標註爲SO(串行輸出),因爲是主機上的,所以就是主機輸出,對應的意思就是Master Out,也就是Master Out Slave In,也就是 SPI接口的MOSI,所以就需要去另外一邊的SPI設備的MOSI。

這樣理解,是不是就好記住,不再犯錯了?

總之,如果數據手冊上信號標註的是MISO或MOSI,這裏的S對應的是Slave。要注意不要交叉接。而如果數據手冊上標註的信號名稱是SI和SO,這裏的S表示的是Serial,要根據是主機還是從機,決定對應的是MISO還是MOSI。

 

另外,有少部分單片機主機,可以通過管腳配置,自由選擇SPI管腳所映射的管腳PAD,或者對MISO和MOSI管腳進行管腳交換映射。所以,當設計SPI接錯線時,不要着急,先檢查一下,這款單片機是否可以進行管腳配置的互換。如果可以,那麼恭喜你,你只需要在單片機的配置寄存器裏,進行一下互換映射就可以了而不必重新改板。但是遺憾的是,大多數單片機的管腳,都是不可以配置互換的。因此,在進行硬件設計時,千萬不要犯迷糊弄錯了。始終記住,SPI接線的MISO和MOSI信號不用交叉接!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章