spi協(xié)議及工作原理分析 作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 一、概述.SPI, Serial Perripheral Interface, 串行外圍設備接口, 是 Motorola 公司推出的一種同步串行接口技術(shù). SPI 總線(xiàn)在物理上是通過(guò)接在外圍設備微控制器(PICmicro) 上面的微處理控制單元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模塊(Module)來(lái)實(shí)現的, 它允許 MCU 以全雙工的同步串行方式, 與各種外圍設備進(jìn)行高速數據通信.SPI 主要應用在 EEPROM, Flash, 實(shí)時(shí)時(shí)鐘(RTC), 數模轉換器(ADC), 數字信號處理器(DSP) 以及數字信號解碼器之間. 它在芯片中只占用四根管腳 (Pin) 用來(lái)控制以及數據傳輸, 節約了芯片的 pin 數目, 同時(shí)為 PCB 在布局上節省了空間. 正是出于這種簡(jiǎn)單易用的特性, 現在越來(lái)越多的芯片上都集成了 SPI技術(shù).二、 特點(diǎn)1. 采用主-從模式(Master-Slave) 的控制方式SPI 規定了兩個(gè) SPI 設備之間通信必須由主設備 (Master) 來(lái)控制次設備 (Slave). 一個(gè) Master 設備可以通過(guò)提供 Clock 以及對 Slave 設備進(jìn)行片選 (Slave Select) 來(lái)控制多個(gè) Slave 設備, SPI 協(xié)議還規定 Slave 設備的 Clock 由 Master 設備通過(guò) SCK 管腳提供給 Slave 設備, Slave 設備本身不能產(chǎn)生或控制 Clock, 沒(méi)有 Clock 則 Slave 設備不能正常工作.2. 采用同步方式(Synchronous)傳輸數據Master 設備會(huì )根據將要交換的數據來(lái)產(chǎn)生相應的時(shí)鐘脈沖(Clock Pulse), 時(shí)鐘脈沖組成了時(shí)鐘信號(Clock Signal) , 時(shí)鐘信號通過(guò)時(shí)鐘極性 (CPOL) 和 時(shí)鐘相位 (CPHA) 控制著(zhù)兩個(gè) SPI 設備間何時(shí)數據交換以及何時(shí)對接收到的數據進(jìn)行采樣, 來(lái)保證數據在兩個(gè)設備之間是同步傳輸的.3. 數據交換(Data Exchanges)SPI 設備間的數據傳輸之所以又被稱(chēng)為數據交換, 是因為 SPI 協(xié)議規定一個(gè) SPI 設備不能在數據通信過(guò)程中僅僅只充當一個(gè) "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)". 在每個(gè) Clock 周期內, SPI 設備都會(huì )發(fā)送并接收一個(gè) bit 大小的數據, 相當于該設備有一個(gè) bit 大小的數據被交換了.一個(gè) Slave 設備要想能夠接收到 Master 發(fā)過(guò)來(lái)的控制信號, 必須在此之前能夠被 Master 設備進(jìn)行訪(fǎng)問(wèn) (Access). 所以, Master 設備必須首先通過(guò) SS/CS pin 對 Slave 設備進(jìn)行片選, 把想要訪(fǎng)問(wèn)的 Slave 設備選上.在數據傳輸的過(guò)程中,每次接收到的數據必須在下一次數據傳輸之前被采樣. 如果之前接收到的數據沒(méi)有被讀取, 那么這些已經(jīng)接收完成的數據將有可能會(huì )被丟棄,導致 SPI 物理模塊最終失效. 因此, 在程序中一般都會(huì )在 SPI 傳輸完數據后, 去讀取 SPI 設備里的數據, 即使這些數據(Dummy Data)在我們的程序里是無(wú)用的.三、 工作機制1. 概述上圖只是對 SPI 設備間通信的一個(gè)簡(jiǎn)單的描述, 下面就來(lái)解釋一下圖中所示的幾個(gè)組件(Module):SSPBUF, Synchronous Serial Port Buffer, 泛指 SPI 設備里面的內部緩沖區, 一般在物理上是以 FIFO 的形式, 保存傳輸過(guò)程中的臨時(shí)數據;SSPSR, Synchronous Serial Port Register, 泛指 SPI 設備里面的移位寄存器(Shift Regitser), 它的作用是根據設置好的數據位寬(bit-width) 把數據移入或者移出 SSPBUF;Controller, 泛指 SPI 設備里面的控制寄存器, 可以通過(guò)配置它們來(lái)設置 SPI 總線(xiàn)的傳輸模式.通常情況下, 我們只需要對上圖所描述的四個(gè)管腳(pin) 進(jìn)行編程即可控制整個(gè) SPI 設備之間的數據通信:SCK, Serial Clock, 主要的作用是 Master 設備往 Slave 設備傳輸時(shí)鐘信號, 控制數據交換的時(shí)機以及速率;SS/CS, Slave Select/Chip Select, 用于 Master 設備片選 Slave 設備, 使被選中的 Slave 設備能夠被 Master 設備所訪(fǎng)問(wèn);SDO/MOSI, Serial Data Output/Master Out Slave In, 在 Master 上面也被稱(chēng)為 Tx-Channel, 作為數據的出口, 主要用于 SPI 設備發(fā)送數據;SDI/MISO, Serial Data Input/Master In Slave Out, 在 Master 上面也被稱(chēng)為 Rx-Channel, 作為數據的入口, 主要用于SPI 設備接收數據;SPI 設備在進(jìn)行通信的過(guò)程中, Master 設備和 Slave 設備之間會(huì )產(chǎn)生一個(gè)數據鏈路回環(huán)(Data Loop), 就像上圖所畫(huà)的那樣, 通過(guò) SDO 和 SDI 管腳, SSPSR 控制數據移入移出 SSPBUF, Controller 確定 SPI 總線(xiàn)的通信模式, SCK 傳輸時(shí)鐘信號.2. Timing.上圖通過(guò) Master 設備與 Slave 設備之間交換1 Byte 數據來(lái)說(shuō)明 SPI 協(xié)議的工作機制.首先,在這里解釋一下兩個(gè)概念:CPOL: 時(shí)鐘極性, 表示 SPI 在空閑時(shí), 時(shí)鐘信號是高電平還是低電平. 若 CPOL 被設為 1, 那么該設備在空閑時(shí) SCK 管腳下的時(shí)鐘信號為高電平. 當 CPOL 被設為 0 時(shí)則正好相反.CPHA: 時(shí)鐘相位, 表示 SPI 設備是在 SCK 管腳上的時(shí)鐘信號變?yōu)樯仙貢r(shí)觸發(fā)數據采樣, 還是在時(shí)鐘信號變?yōu)橄陆笛貢r(shí)觸發(fā)數據采樣. 若 CPHA 被設置為 1, 則 SPI 設備在時(shí)鐘信號變?yōu)橄陆笛貢r(shí)觸發(fā)數據采樣, 在上升沿時(shí)發(fā)送數據. 當 CPHA 被設為 0 時(shí)也正好相反.上圖里的 "Mode 1, 1" 說(shuō)明了本例所使用的 SPI 數據傳輸模式被設置成 CPOL = 1, CPHA = 1. 這樣, 在一個(gè) Clock 周期內, 每個(gè)單獨的 SPI 設備都能以全雙工(Full-Duplex) 的方式, 同時(shí)發(fā)送和接收 1 bit 數據, 即相當于交換了 1 bit 大小的數據. 如果 SPI 總線(xiàn)的 Channel-Width 被設置成 Byte, 表示 SPI 總線(xiàn)上每次數據傳輸的最小單位為 Byte, 那么掛載在該 SPI 總線(xiàn)的設備每次數據傳輸的過(guò)程至少需要 8 個(gè) Clock 周期(忽略設備的物理延遲). 因此, SPI 總線(xiàn)的頻率越快, Clock 周期越短, 則 SPI 設備間數據交換的速率就越快. 上一頁(yè) 1 2 下一頁(yè)
評論