SPI接口的出錯(cuò)分析及其改進(jìn)
圖5偏移錯(cuò)誤
在一個(gè)數(shù)據(jù)的傳輸過程中,SPR是不允許改變的,即SCK是均勻的,而從圖5可以看出,從器件接收到的8個(gè)SCK并不均勻,它們是分別屬于兩個(gè)數(shù)據(jù)的,因此可以計(jì)算SCK的占空時(shí)間來判斷是否發(fā)生了偏移錯(cuò)誤。經(jīng)分析,正常時(shí)候SCK=1時(shí)的時(shí)鐘周期數(shù)n的取值滿足如下關(guān)系:
但由于主從時(shí)鐘之間是異步的,并且經(jīng)過了取整,所以正常時(shí)候SCK=1時(shí)的時(shí)鐘周期計(jì)數(shù)值COUNT應(yīng)滿足:
比如在圖5中,COUNT的最大值COUNT(max)=2或者1,都可認(rèn)為是正常的。但當(dāng)出現(xiàn)COUNT(max)=8時(shí),可以判定出現(xiàn)了偏移錯(cuò)誤。在實(shí)際設(shè)計(jì)中,先記錄下第一個(gè)COUNT(max)的值,如果后面又出現(xiàn)與記錄值相差1以上的COUNT(max)出現(xiàn),可知有偏移錯(cuò)誤OFST
發(fā)生。SPI接口在“不均勻”的地方令SPIF=1,然后準(zhǔn)備等待下一個(gè)數(shù)據(jù)的第一個(gè)SCK。其中COUNT的位數(shù)固定為8位,為了避免溢出時(shí)重新從00H開始計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到ffH時(shí)停止計(jì)數(shù)。
5、其他錯(cuò)誤
設(shè)定不當(dāng),或者受到外界干擾,數(shù)據(jù)傳輸難免會(huì)發(fā)生錯(cuò)誤,或者有時(shí)軟件對(duì)錯(cuò)誤的種類判斷不清,必須要有一種方法強(qiáng)制SPI接口從錯(cuò)誤狀態(tài)中恢復(fù)過來。在SPI不工作,即SPEN=0的時(shí)候,清除SPI模塊內(nèi)部幾乎所有的狀態(tài)(專用寄存器除外)。如果軟件在接收數(shù)據(jù)的時(shí)候,能夠發(fā)現(xiàn)數(shù)據(jù)有錯(cuò)誤,無論是什么錯(cuò)誤,都可以強(qiáng)制停止SPI的工作,重新進(jìn)行數(shù)據(jù)傳輸。例如,在偏移錯(cuò)誤(OFST)中,如果SPR2、SPR1和SPR0的設(shè)置適當(dāng),也可以使SCK顯得比較“均勻”。SPI接口硬件本身不可能檢測(cè)到有錯(cuò)誤,若用戶軟件能夠發(fā)現(xiàn)錯(cuò)誤,這時(shí)就可以強(qiáng)制停止SPI的傳輸工作,這樣就可以避免錯(cuò)誤一直持續(xù)下去。
結(jié)語
本文對(duì)SPI接口之間數(shù)據(jù)傳輸中各種出錯(cuò)情況進(jìn)行分析,并對(duì)SPI接口處理錯(cuò)誤的能力進(jìn)行增強(qiáng)。對(duì)一些傳輸錯(cuò)誤,SPI接口可以檢測(cè)出來,通過對(duì)各種錯(cuò)誤狀態(tài)寄存器進(jìn)行置位,并做相應(yīng)的處理解決。但是有些錯(cuò)誤由硬件本身造成,是檢測(cè)不到的。因此,在應(yīng)用中,如果對(duì)數(shù)據(jù)的正確性要求較高,除了要在軟件上滿足SPI接口的時(shí)序要求外,還需要在軟件上作適當(dāng)?shù)奶幚怼?/FONT>
參考文獻(xiàn)
1 ATMEL 8bit Flash Microcontroller with 2wire Interface
2 高谷剛,羅春. 可復(fù)用SPI模塊IP核的設(shè)計(jì)與驗(yàn)證. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2004(11)
3 李剛. ADμC8XX系列單片機(jī)原理與應(yīng)用技術(shù). 北京:北京航空航天大學(xué)出版社,2002
評(píng)論