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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > SPI總線協(xié)議及SPI時序圖詳解

          SPI總線協(xié)議及SPI時序圖詳解

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          SPI,是英語Serial Peripheral Interface的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議。
          SPI是一個環(huán)形總線結(jié)構(gòu),由ss(cs)、sck、sdi、sdo構(gòu)成,其時序其實(shí)很簡單,主要是在sck的控制下,兩個雙向移位寄存器進(jìn)行數(shù)據(jù)交換。

          上升沿發(fā)送、下降沿接收、高位先發(fā)送。
          上升沿到來的時候,sdo上的電平將被發(fā)送到從設(shè)備的寄存器中。
          下降沿到來的時候,sdi上的電平將被接收到主設(shè)備的寄存器中。

          假設(shè)主機(jī)和從機(jī)初始化就緒:并且主機(jī)的sbuff=0xaa (10101010),從機(jī)的sbuff=0x55 (01010101),下面將分步對spi的8個時鐘周期的數(shù)據(jù)情況演示一遍(假設(shè)上升沿發(fā)送數(shù)據(jù))。

          ---------------------------------------------------
          脈沖 主機(jī)sbuff 從機(jī)sbuff sdi sdo
          ---------------------------------------------------
          0 00-0 10101010 01010101 0 0
          ---------------------------------------------------
          1 0--1 0101010x 10101011 0 1
          1 1--0 01010100 10101011 0 1
          ---------------------------------------------------
          2 0--1 1010100x 01010110 1 0
          2 1--0 10101001 01010110 1 0
          ---------------------------------------------------
          3 0--1 0101001x 10101101 0 1
          3 1--0 01010010 10101101 0 1
          ---------------------------------------------------
          4 0--1 1010010x 01011010 1 0
          4 1--0 10100101 01011010 1 0
          ---------------------------------------------------
          5 0--1 0100101x 10110101 0 1
          5 1--0 01001010 10110101 0 1
          ---------------------------------------------------
          6 0--1 1001010x 01101010 1 0
          6 1--0 10010101 01101010 1 0
          ---------------------------------------------------
          7 0--1 0010101x 11010101 0 1
          7 1--0 00101010 11010101 0 1
          ---------------------------------------------------
          8 0--1 0101010x 10101010 1 0
          8 1--0 01010101 10101010 1 0
          ---------------------------------------------------

          這樣就完成了兩個寄存器8位的交換,上面的0--1表示上升沿、1--0表示下降沿,sdi、 sdo相對于主機(jī)而言的。根據(jù)以上分析,一個完整的傳送周期是16位,即兩個字節(jié),因?yàn)椋紫戎鳈C(jī)要發(fā)送命令過去,然后從機(jī)根據(jù)主機(jī)的名準(zhǔn)備數(shù)據(jù),主機(jī)在下一個8位時鐘周期才把數(shù)據(jù)讀回來。
          SPI總線是Motorola公司推出的三線同步接口,同步串行3線方式進(jìn)行通信:一條時鐘線SCK,一條數(shù)據(jù)輸入線MOSI,一條數(shù)據(jù)輸出線MISO;用于 CPU與各種外圍器件進(jìn)行全雙工、同步串行通訊。

          SPI主要特點(diǎn)有:可以同時發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時鐘;發(fā)送結(jié)束中斷標(biāo)志;寫沖突保護(hù);總線競爭保護(hù)等。

          SPI總線有四種工作方式(SP0, SP1, SP2, SP3),其中使用的最為廣泛的是SPI0和SPI3方式。

          SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時鐘極性和相位可以進(jìn)行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果 CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果 CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。 SPI主模塊和與之通信的外設(shè)音時鐘相位和極性應(yīng)該一致。

          SPI時序圖詳解-SPI接口在模式0下輸出第一位數(shù)據(jù)的時刻

          SPI接口在模式0下輸出第一位數(shù)據(jù)的時刻

          SPI接口有四種不同的數(shù)據(jù)傳輸時序,取決于CPOL和CPHL這兩位的組合。圖1中表現(xiàn)了這四種時序,
          時序與CPOL、CPHL的關(guān)系也可以從圖中看出。


          圖1

          CPOL是用來決定SCK時鐘信號空閑時的電平,CPOL=0,空閑電平為低電平,CPOL=1時,
          空閑電平為高電平。CPHA是用來決定采樣時刻的,CPHA=0,在每個周期的第一個時鐘沿采樣,
          CPHA=1,在每個周期的第二個時鐘沿采樣。
          上一頁 1 2 下一頁

          關(guān)鍵詞: SPI總線協(xié)議時序

          評論


          技術(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); })();