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