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

          新聞中心

          SPI總線時序分析

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          SPI,是英語Serial Peripheral Interface的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議。

          主機控制CLK,在CLK低電平期間,主機把數(shù)據(jù)送到MOSI上,從機在CLK上升沿后,就是CLK高電平期間讀MOSI上的數(shù)據(jù)。從機在CLK高電平期間把數(shù)據(jù)送到MISO上,主機在CLK下降沿后,就是低電平期間讀MISO上的數(shù)據(jù)。這樣用兩根線就可以實現(xiàn)全雙工通訊。

          本文引用地址:http://www.ex-cimer.com/article/201612/330333.htm

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

          圖1

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

          由于我使用的器件工作在模式0這種時序(CPOL=0,CPHA=0),所以將圖1簡化為圖2,只關(guān)注模式0的時序。

          圖2


          我們來關(guān)注SCK的第一個時鐘周期,在時鐘的前沿采樣數(shù)據(jù)(上升沿,第一個時鐘沿),在時鐘的后沿輸出數(shù)據(jù)(下降沿,第二個時鐘沿)。首先來看主器件,主器件的輸出口(MOSI)輸出的數(shù)據(jù)bit1,在時鐘的前沿被從器件采樣,那主器件是在何時刻輸出bit1的呢?bit1的輸出時刻實際上在SCK信號有效以前,比SCK的上升沿還要早半個時鐘周期。bit1的輸出時刻與SSEL信號沒有關(guān)系。再來看從器件,主器件的輸入口MISO同樣是在時鐘的前沿采樣從器件輸出的bit1的,那從器件又是在何時刻輸出bit1的呢。從器件是在SSEL信號有效后,立即輸出bit1,盡管此時SCK信號還沒有起效。關(guān)于上面的主器件和從器件輸出bit1位的時刻,可以從圖3、4中得到驗證。


          圖3


          注意圖3中,CS信號有效后(低電平有效,注意CS下降沿后發(fā)生的情況),故意用延時程序延時了一段時間,之后再向數(shù)據(jù)寄存器寫入了要發(fā)送的數(shù)據(jù),來觀察主器件輸出bit1的情況(MOSI)??梢钥闯觯琤it1(值為1)是在SCK信號有效之前的半個時鐘周期的時刻開始輸出的(與CS信號無關(guān)),到了SCK的第一個時鐘周期的上升沿正好被從器件采樣。


          圖4

          圖4中,注意看CS和MISO信號。我們可以看出,CS信號有效后,從器件立刻輸出了bit1(值為1)。

          通常我們進(jìn)行的spi操作都是16位的。圖5記錄了第一個字節(jié)和第二個字節(jié)間的相互銜接的過程。
          第一個字節(jié)的最后一位在SCK的上升沿被采樣,隨后的SCK下降沿,從器件就輸出了第二個字節(jié)的第一位。



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