<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式硬件通信接口協(xié)議中的串行通信接口-SPI

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

作者: 時(shí)間:2018-12-26 來(lái)源:ofweek 收藏

  本節繼續講硬件通信接口協(xié)議中的另外一個(gè)串行通信接口-。相比于UART串口協(xié)議,又有著(zhù)其獨特之處。

本文引用地址:http://dyxdggzs.com/article/201812/396060.htm

  簡(jiǎn)介

  (全稱(chēng)SerialPeripheral Interface),串行外設接口。

  SPI是串行外設接口(SerialPeripheral Interface)的縮寫(xiě)。SPI,是一種高速的,全雙工,同步的通信總線(xiàn),并且在芯片的管腳上只占用四根線(xiàn),節約了芯片的管腳,同時(shí)為PCB的布局上節省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,如今越來(lái)越多的芯片集成了這種通信協(xié)議,比如AT91RM9200。

  --from 百度百科

  該接口由摩托羅拉在20世紀80年代中期開(kāi)發(fā),并已成為事實(shí)標準。

  --from Wiki

  從維基百科查閱的的“事實(shí)標準”,在這來(lái)科普一下知識盲點(diǎn):

  事實(shí)標準是指非由標準化組織制定的,而是由處于技術(shù)領(lǐng)先地位的企業(yè)、企業(yè)集團制定(有的還需行業(yè)聯(lián)盟組織認可,如DVD標準需經(jīng)DVD論壇認可),由市場(chǎng)實(shí)際接納的技術(shù)標準。

  --from 百度百科

  SPI接口定義了一主多從這樣的一個(gè)通信架構,在同一SPI總線(xiàn)上只有一個(gè)主機,可以有多個(gè)從機。這樣的架構就限制了通信的主動(dòng)權只能在主機端,主機發(fā)起一次通信,從機做出想要。

  信號線(xiàn)

  SPI被稱(chēng)為四線(xiàn)串行總線(xiàn),其信號線(xiàn)分別有:

  SCLK:串行時(shí)鐘(主機輸出)

  MOSI:主輸出從機輸入或主機輸出從機輸入(主機輸出的數據)

  MISO:主輸入從輸出或主輸入從輸出(從輸出的數據輸出)

  SS:從機選擇(通常為低電平有效,主機輸出)

  信號線(xiàn)命名也是五花八門(mén),以下的命名也是會(huì )遇見(jiàn)的:

  串口時(shí)鐘:

  SCLK:SCK

  主輸出--->從輸入(MOSI):

  SIMO,MTSR - 對應主設備和從設備上的MOSI,相互連接

  SDI,DI,DIN,SI - 在從設備上; 連接到主設備上的MOSI,或連接到下面的連接

  SDO,DO,DOUT,SO - 在主設備上; 連接到從站上的MOSI,或連接到上面的連接

  主輸入<---從輸出(MISO):

  SOMI,MRST - 對應主設備和從設備上的MISO,相互連接

  SDO,DO,DOUT,SO - 在從設備上; 連接到主設備上的MISO,或連接到下面的連接

  SDI,DI,DIN,SI - 主設備; 連接到奴隸上的MISO或上面的連接

  從機選擇:

  SS:SSEL,CS,CE,nSS,/ SS,SS#

  以上容易讓人混淆的名字是SDO、SDI、DOUT、DIN等,這些都需要看具體印在主設備還是從設備上單獨討論。但是一般的還是盡量寫(xiě)清寫(xiě)規范,這樣不容易產(chǎn)生歧義。

  SPI作為同步串行接口,可以認為有兩個(gè)同步信號,第一個(gè)是從機選擇SS信號,告知被選中的從機,準備開(kāi)始進(jìn)行SPI通信,第二個(gè)是同步時(shí)鐘信號SCLK,收發(fā)雙方進(jìn)行數據的交互時(shí),都是基于SCLK的跳變進(jìn)行逐bit輸出和采樣的。

  四根信號線(xiàn)并非全部都需要,根據工作模式,可以配置成兩線(xiàn)、三線(xiàn)。

  在STM32CubeMX工具的配置頁(yè)面,可以很清楚看到,配置不同的工作模式時(shí),對應被使能的芯片管腳有何不同:

  


  


  


  對比發(fā)現,全雙工的四線(xiàn)和三線(xiàn)的區別是從機選擇信號NSS。這種情況一般是因為SPI總線(xiàn)上只有一主一從的通信架構,從機的NSS信號一直接低電平,不需要做從機選擇。

  信號時(shí)序

  四線(xiàn)SPI接口的時(shí)序一般的總是先拉低從機選擇信號線(xiàn)SS,然后輸出SCLK,帶著(zhù)數據MOSI,此時(shí)MISO為高阻態(tài)。大致如下如:

  


  一般有SPI接口的器件,在Spec上都會(huì )有對應的時(shí)序圖,這里分別截取SPI接口FLASH型號為GD25Q32C、SPI接口OLED型號為QG-2832TLBFG04,這兩器件的Spec內關(guān)于SPI時(shí)序部分的介紹,如下兩張截圖:

  


  


  對比不難發(fā)現,時(shí)序圖的規范,定義了各個(gè)信號線(xiàn)輸出電平的順序和時(shí)延,還定義了時(shí)鐘信號跳變沿與數據信號的“對齊”,這里的“對齊”實(shí)際上就是數據的輸出和采樣。

  同樣的,這個(gè)時(shí)序規范了SPI器件所呈現的SPI接口信號線(xiàn)特性,包括:時(shí)鐘上升、下降沿時(shí)長(cháng);片選與時(shí)鐘跳變沿之間的時(shí)延;時(shí)鐘邊緣與數據線(xiàn)保持的時(shí)長(cháng)…

  這些時(shí)序特性,都在明確了SPI主機與其通信時(shí),要求不超出其定義的范圍,否則從機器件響應不及時(shí)而導致通信異常。

  不同的器件,對SPI接口的信號時(shí)序要求也會(huì )不同。第一張簡(jiǎn)明的時(shí)序圖,而基于這樣的時(shí)序圖,SPI接口又可以配置不同的接口配置參數。

  接口配置項

  一般在開(kāi)發(fā)時(shí),接口的可選配置有:接口模式(實(shí)際配置的是單、雙工模式選擇)、設備主從模式、數據寬度、時(shí)鐘極性(CPOL:)、時(shí)鐘相位(CPHA)、時(shí)鐘速率、數據bit位大小端選擇。

  接口模式

  標準的四線(xiàn)SPI接口,使用的場(chǎng)景是主從機進(jìn)行數據交互的通信,兩方都有數據的收發(fā)過(guò)程,而在LCD/OLED這樣的SPI接口作為從設備的器件中,就不需要數據返回給主機,只需要接收來(lái)自主機的控制信息和顯示的數據。

  基于這樣的使用場(chǎng)景,就可以配置成三線(xiàn)的單工通信,即僅需要從機選擇SS、時(shí)鐘SCLK、數據輸出MOSI即可。

  設備主從模式

  這個(gè)配置一般需要看芯片是否支持,可將芯片配置成SPI主機或者從機,能更好地集成在項目的系統中。

  數據寬度

  顧名思義,就是發(fā)送數據可以配置成8bit、16bit等,這也是根據芯片而定。

  時(shí)鐘極性、時(shí)鐘相位

  這兩者分別是CPOL(Clock Polarity)、CPHA(Clock Phase),極性就是指高低電平,這個(gè)定義了SPI總線(xiàn)在空閑狀態(tài)下,時(shí)鐘保持高電平還是低電平,因為這個(gè)關(guān)系到了SPI通信時(shí)第一個(gè)時(shí)鐘跳變沿是上升還是下降沿;相位指的是時(shí)鐘的跳變沿,指定了數據信號的輸出和采樣如何與時(shí)鐘對齊。

  這兩個(gè)配置,在Wiki和百度百科上都做了非常清晰的解釋?zhuān)@里截圖引用如下:

  


  


  時(shí)鐘速率

  速率選擇定義了時(shí)鐘信號線(xiàn)在數據傳輸是的翻轉速率,這體現到每個(gè)芯片定義的接口時(shí)序圖中,即可承受的速率范圍,如果主機設的速率太快,而從機響應過(guò)慢會(huì )導致通信失敗。

  數據bit位大小端選擇

  數據的發(fā)送優(yōu)先bit可配置,從上篇的UART協(xié)議可以知道,UART規定了數據優(yōu)先發(fā)bit0,而這個(gè)SPI是可配置優(yōu)先發(fā)送bit的,可設置最低位或者最高位。

  從FLASH型號為GD25Q32和OLED型號為QG-2832TLBFG04的時(shí)序截圖可看到,這兩個(gè)器件都是優(yōu)先發(fā)MSB,也就是最高位優(yōu)先。

  再對比一款字庫芯片型號為GT21L16S2W的讀取指令:

  


  可見(jiàn)SPI器件普遍采用MSB的發(fā)送優(yōu)先順序。

  總結SPI通信接口,一主多從的通信架構,標準模式有四根信號線(xiàn)、依靠選擇信號SS開(kāi)始通信、時(shí)鐘信號SCLK進(jìn)行逐bit輸出和采樣、可配置的采樣時(shí)刻和可選擇的優(yōu)先發(fā)出bit。

  參考資料:

  《SPI》@百度百科

  《SPI》@Wiki



關(guān)鍵詞: 嵌入式 SPI

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>