SPI 或串行外設(shè)接口是微控制器流行的通信協(xié)議之一,通常在微控制器中實(shí)現(xiàn),常用于與外圍設(shè)備(傳感器、顯示器等)交互。SPI是一種同步通信協(xié)議,它有專(zhuān)用的時(shí)鐘線(有關(guān)更多信息,請(qǐng)參閱我們關(guān)于同步與異步通信協(xié)議的文章)。SPI 中的通信線路包括:
MISO = Master In Slave Out
MOSI = Master Out Slave In
SS = Slave Select
SCK or SCLK = Serial Clock
根據(jù)命名,SPI 存在主設(shè)備和從設(shè)備。主設(shè)備控制時(shí)鐘線,因此也控制通信。SPI 是一種全雙工協(xié)議,因?yàn)樗袃蓷l數(shù)據(jù)線,每個(gè)通信方向(主站對(duì)從站和從站對(duì)主站)各一條,這意味著可以同時(shí)發(fā)送和接收數(shù)據(jù)。
SPI 總線
多個(gè)從設(shè)備可以使用相同的 SCK、MISO 和 MOSI 通信線(稱為 SPI 總線)連接到同一個(gè)主設(shè)備。但每個(gè)從屬設(shè)備都需要單獨(dú)的從屬選擇 (SS) 線;主設(shè)備根據(jù)希望與哪個(gè)從屬設(shè)備通信來(lái)設(shè)置從屬選擇線(低電平有效,即低電平選擇,高電平取消選擇)。

實(shí)際上,在 SPI 總線上同時(shí)發(fā)送和接收數(shù)據(jù)的情況并不多見(jiàn)(通常的情況是先發(fā)出指令后作出響應(yīng),或者只是主設(shè)備從從設(shè)備讀取數(shù)據(jù))。不過(guò),SPI 的優(yōu)勢(shì)之一是,由于具有專(zhuān)用且定義明確的通信線路,它可以直接進(jìn)行調(diào)試和故障排除(例如使用示波器)。I2C 等協(xié)議需要的通信線路較少,但由于其復(fù)雜性,故障排除更加困難。
SPI 的另一個(gè)優(yōu)點(diǎn)是,所有通信線路都是高電平或低電平主動(dòng)驅(qū)動(dòng)的,而 I2C 等通信線路只是低電平驅(qū)動(dòng),當(dāng)通信線路沒(méi)有被主動(dòng)驅(qū)動(dòng)時(shí),上拉電阻會(huì)被動(dòng)地將通信線路拉回高電平(更多信息,請(qǐng)參閱我們關(guān)于 I2C 的文章)。始終主動(dòng)驅(qū)動(dòng)線路意味著可以實(shí)現(xiàn)更高的數(shù)據(jù)傳輸速率。
雙線和四線 SPI
SPI 也有雙 線SPI 和四線 SPI,可以使用多條數(shù)據(jù)線同時(shí)向一個(gè)方向傳輸數(shù)據(jù)(從技術(shù)上講是并行傳輸),從而進(jìn)一步提高數(shù)據(jù)吞吐量(整體通信速度)。這在需要高數(shù)據(jù)吞吐量的閃存芯片中很受歡迎。使用雙 SPI 時(shí),通信開(kāi)始時(shí)與往常一樣(與單 SPI 相同),但在向從設(shè)備發(fā)送命令后可更改為雙模式(詳細(xì)情況請(qǐng)參閱從設(shè)備數(shù)據(jù)手冊(cè))。在雙模式下,MISO 和 MOSI 線路分別成為雙向(半雙工)通信線路,稱為 SIO0(串行 I/O 0)和 SIO1;每個(gè)字節(jié)的偶數(shù)位在 SIO0 上傳輸,奇數(shù)位在 SIO1 上傳輸。Quad SPI 與之類(lèi)似,只是多了兩條通信線路--SIO2 和 SIO3,而且每次傳輸半個(gè)字節(jié)。
SPI 配置
SPI 協(xié)議中的一些參數(shù)是可以設(shè)置的,例如在時(shí)鐘信號(hào)的上升沿還是下降沿發(fā)送/接收數(shù)據(jù),以及時(shí)鐘是空閑高電平還是低電平。數(shù)據(jù)是先傳輸最小有效位(LSB)還是先傳輸最大有效位(MSB)也是可以配置的,通常是先傳輸 MSB。
本文章版權(quán)歸英國(guó)Labcenter公司所有,由廣州風(fēng)標(biāo)電子提供翻譯,原文鏈接如下:https://www.labcenter.com/blog/sim-spi-protocol/