同步串行外設(shè)接口總線(SPI)的簡介
這個庫可以讓你將Arduino作為主設(shè)備,其他外圍設(shè)備作為從設(shè)備與主設(shè)備以串行方式進(jìn)行通信及交換信息。
同步串行外設(shè)接口總線(SPI)的簡介
同步串行外設(shè)接口總線(SPI)是用于MCU(微控制器)與一個或多個外圍設(shè)備進(jìn)行短距離快速通訊的同步串行數(shù)據(jù)協(xié)議。它也可以用于兩個微控制器之間的通信。 SPI的連接始終是由一個主設(shè)備(通常是一個微控制器)來控制外圍設(shè)備來進(jìn)行。通常在所有設(shè)備上都有三條線,
Master In Slave Out (MISO) -主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出,
Master Out Slave In (MOSI) -主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入,
Serial Clock(SCK)-串行時鐘,數(shù)據(jù)傳輸?shù)臅r鐘基于主處理器產(chǎn)生的時鐘脈沖,
Slave Select(SS) -從屬選擇,從設(shè)備的管腳控制信號線,由主設(shè)備進(jìn)行使能控制。當(dāng)從設(shè)備的SS引腳置為低電平時,它與主設(shè)備進(jìn)行通信。當(dāng)從設(shè)備的SS引腳置為高電平時,斷開與主設(shè)備的通信。因此,SPI允許一個主設(shè)備和多個從設(shè)備進(jìn)行通信,主設(shè)備通過不同的SS信號線選擇不同的從設(shè)備進(jìn)行通信。
給一個新的SPI設(shè)備寫程序,你需要注意以下幾點:
串行數(shù)據(jù)傳輸時,是先傳輸高位(MSB)還是先傳輸?shù)臀唬↙SB),這是由 SPI.setBitOrder()函數(shù)來控制的。
數(shù)據(jù)時鐘SCK在空閑時,是高電平還是低電平?
采樣時,是在時鐘脈沖的上升沿還是下降沿?這是由 SPI.setDataMode() 函數(shù)來控制的
SPI是在怎樣速度下運行的,即SCLK提供多大的時鐘脈沖使SPI運行?這是由 SPI.setClockDivider() 函數(shù)來控制的。
SPI標(biāo)準(zhǔn)是不嚴(yán)格的,所以每個設(shè)備實現(xiàn)功能時稍有不同。這意味著當(dāng)你寫代碼時,要特別注意設(shè)備的數(shù)據(jù)表。一般來說,有三種傳輸模式。這些模式控制著數(shù)據(jù)是在SCK的上升沿采樣,還是在SCK的下降沿采樣(稱為時鐘相位),時鐘信號在空閑時,是高電平還是低電平(稱為時鐘極性)。由相位和極性組合得到三種模式。SPI.setDataMode() 函數(shù)用于控制時鐘極性和相位,根據(jù)此表:
模式 時鐘極性(CPOL) 時鐘相位 (CPHA)
0 0 0
1 0 1
2 1 0
3 1 1
當(dāng)你的SPI參數(shù)設(shè)置正確,你只需要選擇好需要的函數(shù)去控制你的設(shè)備,然后開始你的作品制作。這將被解釋為您的設(shè)備數(shù)據(jù)表。
連接
在Arduino Duemilanove和其他基于ATmega168 / 328的板子上,SPI總線使用引腳10(SS),引腳11(MOSI),引腳12(MISO)和引腳13(SCK)。而在Arduino Mega板上,使用的是引腳50(MISO),引腳51(MOSI),引腳52(SCK)和引腳53(SS)。需要注意的是,即使你不使用SS引腳,必須將它的模式設(shè)置為輸出;否則,SPI系統(tǒng)將會認(rèn)為有一個外部主機將自己選擇為從設(shè)備(從屬模式),從而使庫文件的控制失效。
它有可能使用其他腳比10腳,作為從機選擇引腳SS。例如,Arduino的以太網(wǎng)擴展板使用引腳4來控制的SPI連接到主板上的SD卡,用引腳10來控制連接到以太網(wǎng)控制器。
函數(shù)
begin()
end()
setBitOrder()
setClockDivider()
setDataMode()
transfer()
例子
BarometricPressureSensor: Read air pressure and temperature from a sensor using SPI
SPIDigitalPot: Control a digital potentiometer using SPI
參見
shiftOut()
shiftIn()
評論