什么是SPI 串行總線
SPI(Serial Peripheral Interface)總線是Motorola公司推出的一種同步串行通信總線。利用SPI總線,單片機(jī)可以與外設(shè)之間進(jìn)行8位數(shù)據(jù)的同步發(fā)送和接收。目前采用SPI總線的芯片較多,如Motorala公司的M68HC08單片機(jī)、TI公司的A-D轉(zhuǎn)換器TLC2543和D-A轉(zhuǎn)換器TLC5615,以及AD公司的溫度傳感器AD7816等。SPI 是由摩托羅拉(Motorola)公司開發(fā)的全雙工同步串行總線,是微處理控制單元(MCU)和外圍設(shè)備之間進(jìn)行通信的同步串行端口。主要應(yīng)用在EEPROM、Flash、實(shí)時(shí)時(shí)鐘(RTC)、數(shù)模轉(zhuǎn)換器(ADC)、網(wǎng)絡(luò)控制器、MCU、數(shù)字信號(hào)處理器(DSP)以及數(shù)字信號(hào)解碼器之間。SPI 系統(tǒng)可直接與各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口,一般使用4 條線:串行時(shí)鐘線SCK、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI 和低電平有效的從機(jī)選擇線SSEL。
在討論SPI 數(shù)據(jù)傳輸時(shí),必須明確以下兩位的特點(diǎn)及功能:
(1) CPOL: 時(shí)鐘極性控制位。該位決定了SPI總線空閑時(shí)SCK 時(shí)鐘線的電平狀態(tài)。
CPL=0,當(dāng)SPI總線空閑時(shí),SCK 時(shí)鐘線為低電平。
CPL=1,當(dāng)SPI總線空閑時(shí),SCK 時(shí)鐘線為高電平。
(2) CPHA: 時(shí)鐘相位控制位。該位決定了SPI總線上數(shù)據(jù)的采樣位置。
CPHA=0,SPI總線在時(shí)鐘線的第1個(gè)跳變沿處采樣數(shù)據(jù)。
CPHA= 1,SPI總線在時(shí)鐘線的第2個(gè)跳變沿處采樣數(shù)據(jù)
SPI總線的引腳功能和時(shí)序
串行外設(shè)接口(SPI)是微控制器(MCU)和外圍IC(如傳感器、ADC、DAC、移位寄存器、SRAM等)之間使用較廣泛的接口之一。SPI是一種同步、全雙工、主從式接口。來自主機(jī)或者從機(jī)的數(shù)據(jù)在時(shí)鐘上升沿或下降沿同步。主機(jī)和從機(jī)可以同時(shí)傳輸數(shù)據(jù)。SPI接口可以是三線式或者4線式。
1.SPI總線的引腳功能
圖6-1為SPI總線接口擴(kuò)展示意圖,其中4根信號(hào)線將主機(jī)與從機(jī)(或從器件)連接在一起,這4根線的作用如下:
圖6-1 SPI總線接口擴(kuò)展示意圖
1)MISO(Master Input/Slave Output,主入從出)是主機(jī)與從機(jī)之間的數(shù)據(jù)線,是主機(jī)的數(shù)據(jù)輸入線,是從機(jī)的數(shù)據(jù)輸出線。
2)MOSI(Master Output/Slave Input,主出從入)是主機(jī)與從機(jī)之間的數(shù)據(jù)線,是主機(jī)的數(shù)據(jù)輸出線,是從機(jī)的數(shù)據(jù)輸入線。
3)SCK(串行時(shí)鐘)是主機(jī)時(shí)鐘信號(hào)輸出線是從機(jī)(或從器件)的時(shí)鐘信號(hào)輸入線。時(shí)鐘信號(hào)可以控制數(shù)據(jù)傳輸?shù)乃俣取?
4)SS(Slave Select)是從機(jī)的片選信號(hào)。
在SPI總線通信中,只有一個(gè)主機(jī),可以有多個(gè)從機(jī)。從機(jī)可以是單片機(jī)(如8051單片機(jī)),也可以是SPI總線接口器件,如A-D轉(zhuǎn)換器TL2543等。因?yàn)樗袕臋C(jī)(或從器件)的MOSI、MISO和SCK分別連接在一起,所以通信時(shí)主機(jī)必須通過片選信號(hào)選擇一個(gè)或多個(gè)從機(jī)(或從器件)進(jìn)行通信。
2.SPI總線的時(shí)序
SPI器件可以在SCK的上升沿或下降沿收發(fā)數(shù)據(jù),數(shù)據(jù)可以按照“先高位后低位”或“先低位后高位”的順序傳輸。
若假設(shè)主機(jī)在SCK的上升沿按“先高位后低位”的順序接收數(shù)據(jù),則由圖6-2可知:
1)SS引腳出現(xiàn)低電平后,從機(jī)被選中;同時(shí)從機(jī)將數(shù)據(jù)的D7位(即最高位)送到MISO引腳。
2)在SS變成低電平之后的每個(gè)SCK下降沿,從機(jī)將1位數(shù)據(jù)送到MISO引腳。
3)在每個(gè)SCK的上升沿,主機(jī)采集MISO引腳上的數(shù)據(jù),完成讀(接收)數(shù)據(jù)的操作。
圖6-2 SPI總線時(shí)序圖
MCS-51單片機(jī)本身不帶SPI總線接口,在擴(kuò)展SPI總線接口芯片時(shí),可以用其并行I/O引腳模擬產(chǎn)生SPI總線的信號(hào)及時(shí)序。例如,在圖6-3中,分別以8051單片機(jī)的P1.0、P1.1、P1.2和P1.3模擬SPI總線的MISO、MOSI、SCK和CS引腳。
圖6-3 8051單片機(jī)引腳模擬SPI總線