簡(jiǎn)單分享一下spi通信原理是什么
SPI 是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍設(shè)備接口。是Motorola(摩托羅拉)首先在其MC68HCXX系列處理器上定義的。SPI是一種單主機(jī)、高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,主要應(yīng)用在 EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。SPI分為主、從兩種模式,一個(gè)SPI通訊系統(tǒng)需要包含一個(gè)(且只能是一個(gè))主設(shè)備,一個(gè)或多個(gè)從設(shè)備。提供時(shí)鐘的為主設(shè)備(Master),接收時(shí)鐘的設(shè)備為從設(shè)備(Slave),SPI接口的讀寫操作,都是由主設(shè)備發(fā)起。當(dāng)存在多個(gè)從設(shè)備時(shí),通過各自的片選信號(hào)進(jìn)行管理。 SPI是全雙工且SPI沒有定義速度限制,一般的實(shí)現(xiàn)通常能達(dá)到甚至超過10 Mbps
SPI 接口一般使用 4 條線通信:
MISO 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。
MOSI 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。
SCLK 時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。
CS 從設(shè)備片選信號(hào),由主設(shè)備控制。
SPI允許至少有一個(gè)主機(jī),一般都是一個(gè)主機(jī)多個(gè)從機(jī),當(dāng)只有一個(gè)從機(jī)時(shí):
這站圖來自于STM32參考手冊(cè),這個(gè)應(yīng)該是STM雙機(jī)通訊的接線,而且主機(jī)從機(jī)都工作在硬件模式(對(duì)于雙擊通訊不太懂),一會(huì)兒再聊移位寄存器的原理,現(xiàn)在先看個(gè)大概接法。
當(dāng)有多個(gè)從機(jī)時(shí),每個(gè)從機(jī)單獨(dú)接一個(gè)片選信號(hào):
這個(gè)圖片很好的描述了主設(shè)備與多個(gè)從設(shè)備的接線
STM32中的SPI_CR寄存器的CPOL和CPHA位,能夠組合成四種可能的時(shí)序關(guān)系。
CPOL=0:SCLK=0時(shí)處于空閑態(tài);CPOL=1:SCLK=1時(shí)處于空閑態(tài);
CPHA=0:數(shù)據(jù)采樣在第1個(gè)邊沿;CPHA=1:數(shù)據(jù)采樣在第2個(gè)邊沿。
CPOL與CPHA各有兩種狀態(tài),所以可以組成四種不同的工作方式。
為了能讓主機(jī)與從機(jī)正常通訊,主機(jī)與從機(jī)應(yīng)當(dāng)設(shè)置為相同的模式,一般從機(jī)是出場(chǎng)就固定好的(一般在手冊(cè)的SPECIFICATIONS->
TIMING CHARACTERISTICS中說明 ),我們要做的就是在SPI初始化時(shí)設(shè)置成與從機(jī)相同的工作方式。至于他不同模式時(shí)的時(shí)序圖,一百度就能搜到,我覺得也不是重點(diǎn),重點(diǎn)是你能在手冊(cè)找到從機(jī)是哪種工作方式。
SPI的三種模式
SPI工作在3中模式下,分別是運(yùn)行、等待和停止。
運(yùn)行模式(Run Mode)
這是基本的操作模式
等待模式(Wait Mode)
SPI工作在等待模式是一種可配置的低功耗模式,可以通過SPICR2寄存器的SPISWAI位進(jìn)行控制。在等待模式下,如果SPISWAI位清0,SPI操作類似于運(yùn)行模式。如果SPISWAI位置1,SPI進(jìn)入低功耗狀態(tài),并且SPI時(shí)鐘將關(guān)閉。如果SPI配置為主機(jī),所有的傳輸將停止,但是會(huì)在CPU進(jìn)入運(yùn)行模式后重新開始。如果SPI配置為從機(jī),會(huì)繼續(xù)接收和傳輸一個(gè)字節(jié),這樣就保證從機(jī)與主機(jī)同步。
停止模式(Stop Mode)
為了降低功耗,SPI在停止模式是不活躍的。如果SPI配置為主機(jī),正在進(jìn)行的傳輸會(huì)停止,但是在CPU進(jìn)入運(yùn)行模式后會(huì)重新開始。如果SPI配置為從機(jī),會(huì)繼續(xù)接受和發(fā)送一個(gè)字節(jié),這樣就保證了從機(jī)與主機(jī)同步
SPI通訊的優(yōu)勢(shì)
· 全雙工串行通信;
· 高速數(shù)據(jù)傳輸速率。
· 簡(jiǎn)單的軟件配置;
· 極其靈活的數(shù)據(jù)傳輸,不限于8位,它可以是任意大小的字;
· 非常簡(jiǎn)單的硬件結(jié)構(gòu)。從站不需要唯一地址(與I2C不同)。從機(jī)使用主機(jī)時(shí)鐘,不需要精密時(shí)鐘振蕩器/晶振(與UART不同)。不需要收發(fā)器(與CAN不同)。
SPI的缺點(diǎn)
· 沒有硬件從機(jī)應(yīng)答信號(hào)(主機(jī)可能在不知情的情況下無處發(fā)送);
· 通常僅支持一個(gè)主設(shè)備;
· 需要更多的引腳(與I2C不同);
· 沒有定義硬件級(jí)別的錯(cuò)誤檢查協(xié)議;
· 與RS-232和CAN總線相比,只能支持非常短的距離;