什么是SPI
SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫冯键。SPI,是一種高速的庸汗,全雙工惫确,同步的通信總線,在芯片的管腳上占用四根線蚯舱。
所謂同步改化,即數(shù)據(jù)收發(fā)雙方共用一個(gè)時(shí)鐘;
所謂串行枉昏,即待傳輸?shù)臄?shù)據(jù)排成一行陈肛,一位一位地傳送出去。
是一種數(shù)據(jù)通信方式兄裂,實(shí)現(xiàn)Arduino與外界傳情達(dá)意
優(yōu)點(diǎn)
全雙工通信句旱、高速、通信簡單
缺點(diǎn)
沒有指定的流控制懦窘,沒有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)前翎。
詳細(xì)介紹
SPI以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備畅涂,需要4根線港华。
它們是:
- MISO(主設(shè)備數(shù)據(jù)輸入)
- MOSI(主設(shè)備數(shù)據(jù)輸出)
- SCLK(時(shí)鐘)
- CS(片選)
(1)MISO– Master Input Slave Output
主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出午衰;
(2)MOSI– Master Output Slave Input
主設(shè)備數(shù)據(jù)輸出立宜,從設(shè)備數(shù)據(jù)輸入;
(3)SCLK – Serial Clock
時(shí)鐘信號(hào)臊岸,由主設(shè)備產(chǎn)生橙数;
(4)CS – Chip Select
從設(shè)備使能信號(hào)決定選取哪個(gè)周邊設(shè)備,由主設(shè)備控制
SPI是串行通訊協(xié)議帅戒,就是說數(shù)據(jù)是一位一位的傳輸?shù)牡瓢铩_@就是SCLK時(shí)鐘線存在的原因崖技,由SCLK提供時(shí)鐘脈沖,SCLK信號(hào)線只由主設(shè)備控制钟哥,從設(shè)備不能控制信號(hào)線迎献,至少要有一個(gè)主控設(shè)備。
SPI的數(shù)據(jù)輸入和輸出線獨(dú)立腻贰,所以允許同時(shí)完成數(shù)據(jù)的輸入和輸出吁恍。
arduino中如何使用?
Arduino以SPIClass類的形式對(duì)SPI進(jìn)行了封裝
SPI 庫主要有以下幾個(gè)函數(shù):
(1)begin()
(2)end()
(3)setBitOrder()
(4)setClockDivider()
(5)setDataMode()
(6)transfer()
- begin():
功能:初始化SPI總線播演,設(shè)置SCK冀瓦,MOSI和SS為輸出:將SCK和MOSI拉低,將SS拉高写烤。
形式:SPI.begin()
返回值:none
- setBitOrder():
功能:設(shè)置進(jìn)入和輸出SPI總線比特(bit)的順序:LSBFIRST (least-significant bit first) 或者 MSBFIRST (most-significant bit first)翼闽。
形式:SPI.setBitOrder(order)
參數(shù):order: LSBFIRST 或者 MSBFIRST
返回值:none
- setDataMode():
功能:設(shè)置數(shù)據(jù)模式;(具體請(qǐng)見百科)
形式:SPI.setDataMode(mode)
參數(shù):mode:SPI_MODE0
SPI_MODE1
SPI_MODE2
SPI_MODE3
- setClockDivider():
功能:設(shè)置SPI時(shí)鐘為系統(tǒng)的分頻顶霞。在AVR的板子上肄程,分頻系數(shù)可以為2锣吼,4选浑,8,16玄叠,32古徒,64或者128。默認(rèn)設(shè)置為SPI_CLOCK_DIV4读恃,即設(shè)置SPI時(shí)鐘為系統(tǒng)時(shí)鐘的1/4(如果板子為16MHz則SPI為4MHz)隧膘。
形式:SPI.setClockDivider(divider)
參數(shù):divider:SPI_CLOCK_DIV2
SPI_CLOCK_DIV4
SPI_CLOCK_DIV8
SPI_CLOCK_DIV16
SPI_CLOCK_DIV32
SPI_CLOCK_DIV64
SPI_CLOCK_DIV128
返回值:none
- transfer():
功能:在SPI上傳輸一個(gè)字節(jié)(byte),發(fā)送和接收都是用這個(gè)函數(shù)寺惫;
形式:SPI.transfer(val)
參數(shù):val:要發(fā)送的字節(jié)
返回值:從bus上讀取的字節(jié)疹吃。(讀操作使用的時(shí)候)
- end():
功能:結(jié)束傳輸