<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > SPI總線接口與簡單配置

          SPI總線接口與簡單配置

          作者: 時間:2016-12-14 來源:網(wǎng)絡(luò) 收藏
          SPI 總線接口
          SPI總線主要由4條線組成:
          n SCLK —Serial Clock (output from master)
          n MOSI/SIMO —Master Output, Slave Input (output from master)
          n MISO/SOMI —Master Input, Slave Output (output from slave)
          n SS — (; output from master)
          有另一種命名方式也經(jīng)??梢姡?br />n SCK — Serial Clock (output from master)
          n SDI, DI, SI — Serial Data In
          n SDO, DO, SO — Serial Data Out
          n nCS,笛莎旗艦店, CS, nSS, STE — ,美駱世家官網(wǎng), Slave Transmit Enable (; output from master)

          SPI通訊時Master首先需要配置一個時鐘(clock),這個值一般選擇小于或者大于Slave設(shè)備支持的頻率。 通用的頻率范圍為1-70MHz。
          SPI工作在全雙工模式,這意味著數(shù)據(jù)可以在同一時間發(fā)送和接收。



          時鐘極性polarity與時鐘相位phase

          時鐘極性(CPOL)和時鐘相位(CPHA)用于設(shè)定從設(shè)備何時采樣數(shù)據(jù)。CPOL決定SCLK為高時總線為空閑(CPOL=1)還是SCLK為低時總線為空閑(CPOL=0)。CPHA決定在SCLK的哪一個邊沿將數(shù)據(jù)寫入。
          按照下面的時序圖,
          CPOL=0, SCLK為低時總線空閑:
          CPHA=0 數(shù)據(jù)在SCLK的上升沿(rising edge)被讀取;數(shù)據(jù)在下降沿(falling edge)寫入;
          CPHA=1 數(shù)據(jù)在SCLK的下降沿(falling edge)被讀?。粩?shù)據(jù)在上升沿(rising edge)寫入;
          CPOL=1, SCLK為高時總線空閑:
          CPHA=0 數(shù)據(jù)在SCLK的下降沿(falling edge)被讀?。粩?shù)據(jù)在上升沿(falling edge)寫入;
          CPHA=1 數(shù)據(jù)在SCLK的上升沿(falling edge)被讀取;數(shù)據(jù)在下降沿(rising edge)寫入;
          以下是時序圖:



          CPOL和CPHA的兩個狀態(tài)允許四種時鐘極性和相位的不同組合。每一種都與其他三種不兼容。為了實現(xiàn)主、從設(shè)備間的通訊,主、從設(shè)備的CPOL和CPHA必須有相同的設(shè)置。以下是CPOL,CPHA與4種模式的關(guān)系圖。



          SPI的菊花鏈配置



          一個Master 與3個獨立的Slave組合, 每個Slave都有一個獨立的SS(Slave Select)。



          一個Master與一組使用公用SS(Slave Select)的Slave組合。

          以AD7873為例做一些SPI的典型的設(shè)置



          根據(jù)時序圖,當(dāng)CS變成低電平時,DCLK為低電平空閑,DIN在DCLK的上升沿數(shù)據(jù)鎖存.所以SPI的polarity與phase設(shè)置為Mode 0。

          Figure 38 -SPI設(shè)置為8bits通信模式,通信周期分為3個階段:
          1> DCLK前8個DCLK對應(yīng)指令周期。在這8個DCLK中,通過DIN向AD7873發(fā)送8bits命令字控制隨后進(jìn)行的串行數(shù)據(jù)傳輸。
          2> 數(shù)據(jù)傳輸周期從第9個上升沿開始,輸入數(shù)據(jù)在時鐘上升沿寫入,輸出的數(shù)據(jù)則在時鐘的下降沿讀出。這里的輸入數(shù)據(jù)為8bits的0數(shù)據(jù)。DOUT同時也從DCLK的第10個上升沿開始數(shù)據(jù)輸出,到第二個DCLK周期結(jié)束時,DOUT輸出位數(shù)為7bits。
          3> 重新開始8個DCLK的指令周期,繼續(xù)通過DIN傳送8bits命令控制字,紅蜻蜓官網(wǎng),同時DOUT在第17個DCLK輸出最后的5bits數(shù)據(jù),紅蜻蜓皮鞋。
          可見在Figure 38中8bits數(shù)據(jù)通信模式下,AD7873要完成一個完整的SPI數(shù)據(jù)讀寫,需要3個周期,即發(fā)送24bits數(shù)據(jù)才能達(dá)到目標(biāo)。

          Figure 39 -SPI設(shè)置為15bits通信模式,通信周期分為2個階段:
          1> DCLK前15個DCLK對應(yīng)指令周期。在這15個DCLK中,通過DIN向AD7873發(fā)送15bits命令字控制隨后進(jìn)行的串行數(shù)據(jù)傳輸(MSB 8bits為命令字, LSB 7bits為數(shù)據(jù)0)。DOUT同時也從DCLK的第9個上升沿開始數(shù)據(jù)輸出,第一次15 DLCK周期結(jié)束時,DOUT輸出位數(shù)為MSB 6bits。
          2>重新開始15個DCLK的指令周期,繼續(xù)通過DIN傳送15bits命令控制字。同時DOUT在第16個DCLK輸出最后的LSB 6bits數(shù)據(jù)。

          可見在Figure 39中8bits數(shù)據(jù)通信模式下,AD7873要完成一個完整的SPI數(shù)據(jù)讀寫,需要2個周期,即發(fā)送30bits 數(shù)據(jù)才能達(dá)到目標(biāo)。

          可見Figure 38使用的DCLK最少,效率最高。不過再8bits傳送模式下需要采用連續(xù)發(fā)送3次8bits數(shù)據(jù)方式。
          如果SPI想在一個周期內(nèi)一次性將數(shù)據(jù)讀取上來,可以把SPI通信設(shè)置為 傳送bits>= DIN+DOUT所需的時鐘數(shù)目,這里根據(jù)時序圖為22個DCLK。 就可以在22個DCLK中一次性完成寫8bits的命令字與讀12bits的數(shù)據(jù)了。不過這里的8bits命令字是22bits中的 MSB 8bits。
          不過此方法就沒有上面兩種通信模式的效率高了。:-)

          以Freescale i.mx系列CSPI作為例:
          采用CSPI1,POL=0,PHA=0,BIT_COUNT=22
          CSPI1_CONTROL.bits.EN=1
          CSPI1_CONTROL.bits.MODE=1
          CSPI1_CONTROL.bits.POL = 0
          CSPI1_CONTROL.bits.PHA = 0
          CSPI1_CONTROL.bits.BIT_COUNT= 22

          參考資料
          1.Serial Peripheral Interface Bus
          2.SPI Background


          關(guān)鍵詞: SPI總線接口簡單配

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();