經常遇到一些朋友,在設計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信號不用交叉接!