前言:
接口的存在是使得芯片的設(shè)計(jì)達(dá)到 模塊化 ( modularity ),就像在第一篇文章所講到的,我們可以通過(guò)不同的IP組成一個(gè)功能完備的芯片(或稱之為 SoC )。
芯片的接口可以分為兩大類:片上通信接口與 片外通信接口 。以AMBA為代表的片上接口主要有靈活,效率高的優(yōu)勢(shì),而片外接口的選擇則更加廣泛,根據(jù)不同的成本需求或是性能需求,能夠選擇的片外通信接口有IIC,SPI等。
今天討論的SPI接口是一種十分常用的片外通信接口,經(jīng)常作為芯片與片外存儲(chǔ)器(多為 serial nand flash )的通信接口。同時(shí),硬件物理接口也是應(yīng)屆生面試時(shí)被提問(wèn)最多的問(wèn)題之一。有意在畢業(yè)后從事計(jì)算機(jī)硬件行業(yè)的朋友們可以在準(zhǔn)備應(yīng)聘的時(shí)候多多儲(chǔ)備這方面的知識(shí)。
SPI接口介紹
SPI是一種串行通信接口,全稱是 Serial Peripheral Interface 。它是一種 full-duplex (全雙工:支持發(fā)射端TX與接收端RX同時(shí)雙向傳輸數(shù)據(jù))接口。最基礎(chǔ)的SPI接口由四根線組成:
- SCLK(Serial Clock)
- SS(Slave Select或CS:Chip Select)
- MOSI(Mater Out Slave In)
- MISO(Mater In Slave Out)
如下圖。
SPI接口pin
1. SCLK:
首先是這根時(shí)鐘線,這也是將接口分為 Synchronous (同步接口)與 asynchronous (異步接口)的重要標(biāo)志。由于異步接口發(fā)送與采集數(shù)據(jù)沒有一個(gè)統(tǒng)一控制信號(hào),所以沒法確保發(fā)送端與接收端有相同的收發(fā) data rate, 這給現(xiàn)在許多使用同步設(shè)計(jì)方法的芯片帶來(lái)的很多難題,所以這也是目前同步接口更受歡迎的原因。
異步通信接口
同步通信接口
不過(guò)當(dāng)然了,異步接口也有它的好處??梢栽跀?shù)據(jù)的起始位和終止位來(lái)添加兩個(gè) flag (標(biāo)記符)來(lái)控制數(shù)據(jù)的接收,而且需要在使用前確保兩個(gè)模塊收發(fā)數(shù)據(jù)的速率是相同的。
所以要是有了這個(gè)由 Master (一般是一個(gè) microcontroller )發(fā)出的CLK給slave,slave端就知道什么時(shí)候接受數(shù)據(jù)了,可以是上升沿也可以是下降沿,一般由datasheet決定。時(shí)鐘的頻率也取決于slave能夠正常工作的時(shí)鐘頻率范圍,一般在80MHz左右。
2.SS/CS:
因?yàn)镾PI接口有時(shí)候會(huì)連有多個(gè)Slave(一般不超過(guò)三個(gè)),所以隨著slave的增加,master端就會(huì)需要越來(lái)越多的pin口。當(dāng)Master與slave處于斷鏈狀態(tài)時(shí),SS/CS一般是置成高位的,這樣在master決定要給與哪個(gè)slave交互的時(shí)候就會(huì)把相應(yīng)的SS/CS置低,稱作 active low 。
3.MISO/MOSI:
剩下的幾個(gè)接口都是SPI的數(shù)據(jù)線,在每個(gè)時(shí)鐘周期內(nèi),master都會(huì)向slave發(fā)送1bit數(shù)據(jù),slave也可以同時(shí)向master發(fā)送1bit數(shù)據(jù)。所以說(shuō)假設(shè)某個(gè)SPI接口正工作在50MHz的時(shí)鐘頻率,那么它的數(shù)據(jù)傳輸速率可以達(dá)到50Mbps/100Mbps(隨著數(shù)據(jù)線的增加SPI的數(shù)據(jù)傳輸速率還能增大更多)。相較于普通的IIC接口已經(jīng)高出不少了。這也是為什么對(duì)于許多傳感器來(lái)說(shuō)會(huì)選擇SPI接口。
多位寬數(shù)據(jù)pin口的SPI通信接口
其實(shí)呢,SPI作為一個(gè)常用的外設(shè)接口,卻不存在一個(gè)標(biāo)準(zhǔn),因此沒有用于驗(yàn)證給定產(chǎn)品的接口一致性的基準(zhǔn)。。所以SPI可以說(shuō)是一個(gè) * de facto standard ( 在實(shí)踐中被接受,但尚未經(jīng)過(guò)任何正式程序以達(dá)成共識(shí)的標(biāo)準(zhǔn),甚至可能沒有公開可用的文檔 )。* * *
A de facto standard :is one that has become accepted in practice but has not undergone any formal process to obtain consensus and may not even have publicly available documentation。
并且在SPI中沒有任何通信流程控制單元,SPI的硬件實(shí)現(xiàn)有時(shí)候就是靠一個(gè)簡(jiǎn)單的 shift register ,時(shí)鐘這個(gè)唯一的控制信號(hào)的穩(wěn)定性至關(guān)重要。除此之外,如何確保數(shù)據(jù)的傳輸是否準(zhǔn)確也十分重要,一般只能通過(guò)軟件來(lái)檢測(cè)。在一些 real-time embedded system (實(shí)時(shí)嵌入式系統(tǒng))中,軟件必須以比數(shù)據(jù)到達(dá)更快的速度處理接收到的數(shù)據(jù)。通過(guò)接收端的FIFO Buffer,可以緩解此問(wèn)題。SPI接口中沒有嵌入到錯(cuò)誤檢測(cè)和校正功能中。如果需要,必須在軟件中實(shí)現(xiàn)錯(cuò)誤檢測(cè)/糾正。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7649瀏覽量
167353 -
接口
+關(guān)注
關(guān)注
33文章
9000瀏覽量
153714 -
SPI
+關(guān)注
關(guān)注
17文章
1804瀏覽量
95922 -
通信接口
+關(guān)注
關(guān)注
3文章
251瀏覽量
31472
發(fā)布評(píng)論請(qǐng)先 登錄
基于PC/104 總線與CPLD 的SPI 接口設(shè)計(jì)
理解ATE SPI (串行外設(shè)接口)

串行接口SPI接口應(yīng)用設(shè)計(jì)
AVR單片機(jī)串行接口SPI接口應(yīng)用設(shè)計(jì)
一文讀懂SPI串行外設(shè)接口
基于MSP430F2的SPI串行同步通信

嵌入式硬件通信接口協(xié)議中的串行通信接口-SPI

Firefly-RK328-SPI接口介紹

Firefly-RK3128--SPI接口介紹

基于SPI串行總線接口的Verilog實(shí)現(xiàn)

SPI 串行外設(shè)接口

SPI串行外設(shè)接口設(shè)計(jì)實(shí)現(xiàn)

串行通信接口SPI與QSPI的區(qū)別

評(píng)論