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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > SPI接口的出錯分析及其改進

          SPI接口的出錯分析及其改進

          作者: 時間:2012-07-19 來源:網(wǎng)絡(luò) 收藏

          點擊在新窗口中瀏覽產(chǎn)品
          圖5偏移錯誤

            在一個數(shù)據(jù)的中,是不允許改變的,即SCK是均勻的,而從圖5可以看出,從器件接收到的8個SCK并不均勻,它們是分別屬于兩個數(shù)據(jù)的,因此可以計算SCK的占空時間來判斷是否發(fā)生了偏移錯誤。經(jīng)分析,正常時候SCK=1時的時鐘周期數(shù)n的取值滿足如下關(guān)系:

          點擊在新窗口中瀏覽產(chǎn)品

            但由于主從時鐘之間是異步的,并且經(jīng)過了取整,所以正常時候SCK=1時的時鐘周期計數(shù)值COUNT應(yīng)滿足:

          點擊在新窗口中瀏覽產(chǎn)品

            比如在圖5中,COUNT的最大值COUNT(max)=2或者1,都可認為是正常的。但當出現(xiàn)COUNT(max)=8時,可以判定出現(xiàn)了偏移錯誤。在實際設(shè)計中,先記錄下第一個COUNT(max)的值,如果后面又出現(xiàn)與記錄值相差1以上的COUNT(max)出現(xiàn),可知有偏移錯誤OFST
          發(fā)生。在“不均勻”的地方令SPIF=1,然后準備等待下一個數(shù)據(jù)的第一個SCK。其中COUNT的位數(shù)固定為8位,為了避免溢出時重新從00H開始計數(shù),當計數(shù)達到ffH時停止計數(shù)。

          5、其他錯誤

            設(shè)定不當,或者受到外界干擾,數(shù)據(jù)傳輸難免會發(fā)生錯誤,或者有時軟件對錯誤的種類判斷不清,必須要有一種方法強制從錯誤狀態(tài)中恢復過來。在SPI不工作,即SPEN=0的時候,清除SPI模塊內(nèi)部幾乎所有的狀態(tài)(專用寄存器除外)。如果軟件在接收數(shù)據(jù)的時候,能夠發(fā)現(xiàn)數(shù)據(jù)有錯誤,無論是什么錯誤,都可以強制停止SPI的工作,重新進行數(shù)據(jù)傳輸。例如,在偏移錯誤(OFST)中,如果2、1和SPR0的設(shè)置適當,也可以使SCK顯得比較“均勻”。硬件本身不可能檢測到有錯誤,若用戶軟件能夠發(fā)現(xiàn)錯誤,這時就可以強制停止SPI的傳輸工作,這樣就可以避免錯誤一直持續(xù)下去。

          結(jié)語

            本文對SPI接口之間數(shù)據(jù)傳輸中各種出錯情況進行分析,并對SPI接口處理錯誤的能力進行增強。對一些傳輸錯誤,SPI接口可以檢測出來,通過對各種錯誤狀態(tài)寄存器進行置位,并做相應(yīng)的處理解決。但是有些錯誤由硬件本身造成,是檢測不到的。因此,在應(yīng)用中,如果對數(shù)據(jù)的正確性要求較高,除了要在軟件上滿足SPI接口的時序要求外,還需要在軟件上作適當?shù)奶幚怼?/FONT>

          參考文獻

          1 ATMEL 8bit Flash Microcontroller with 2wire Interface
          2 高谷剛,羅春. 可復用SPI模塊IP核的設(shè)計與驗證. 單片機與嵌入式系統(tǒng)應(yīng)用, 2004(11)
          3 李剛. ADμC8XX系列單片機原理與應(yīng)用技術(shù). 北京:北京航空航天大學出版社,2002


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: SPI接口 傳輸過程 SPR

          評論


          相關(guān)推薦

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