SPI接口的出錯分析及其改進
單片機(MCU)系統(tǒng)為了與SPI標準外圍接口器件進行通信,必須使用SPI( Serial Peripheral Interface,串行外設接口)總線。SPI總線系統(tǒng)是Motorola提出的一種同步串行外設接口,有信號線少、協(xié)議簡單、傳輸速度快的特點,因此有不少外圍器件都采用SPI總線,如Flash RAM、A/ D轉換器、LED顯示器、MCU以及計算機網(wǎng)絡等。MCU中的SPI接口通過配置可與各個廠家生產(chǎn)的多種標準外圍器件直接連接。
對于那些沒有SPI接口功能的MCU來說,SPI接口的功能靠軟件控制MCU的I/O口的方法來模擬。不過,用軟件來模擬SPI接口的功能,工作速度非常慢,并且需要主從器件的軟件之間配合得非常好。如果在單片機芯片內部用硬件電路來完成SPI接口功能,在硬件增加不多的情況下,能夠極大地提高傳輸速度(最高頻率可達主器件的頻率的1/4),減輕軟件的負擔,使用極為方便。
SPI接口工作的時候,沒有應答信號,并且數(shù)據(jù)在發(fā)送的時候無需校驗位,所以,要求主從器件的軟件必須完全符合SPI的時序要求,否則數(shù)據(jù)傳輸很容易出現(xiàn)錯誤。本文通過MCU中SPI接口模塊的設計,分析數(shù)據(jù)傳輸?shù)母鞣N出錯情況,并針對各種情況,增強SPI接口的錯誤處理能力。
1、SPR設定錯誤
在從器件時鐘頻率小于主器件時鐘頻率時,如果SCK的速率設得太快,將導致接收到的數(shù)據(jù)不正確(SPI接口本身難以判斷收到的數(shù)據(jù)是否正確,要在軟件中處理)。
整個系統(tǒng)的速度受三個因素影響:主器件時鐘CLK主、從器件時鐘CLK從和同步串行時鐘SCK,其中SCK是對CLK主的分頻,CLK從和CLK主是異步的。要使SCK無差錯無遺漏地被從器件所檢測到,從器件的時鐘CLK從必須要足夠快。下面以SCK設置為CLK主的4分頻的波形為例,分析同步串行時鐘、主時鐘和從時鐘之間的關系。
圖1主從時鐘和SCK的關系
如圖1所示,當T從Tsck/2,即T從<2T主時,無論主時鐘和從時鐘之間的相位關系如何,在從器件CLK從的上升沿必然能夠檢測到SCK的低電平,即SCK=0的范圍內至少包含一個CLK從的上升沿。
圖2中,當T從≥TSCK/2=2T主時,在clk_s的兩個上升沿都檢測不到SCK的低電平,這樣從器件就會漏掉一個SCK。在某些相位條件下,即使CLK從僥幸能檢測到SCK的低電平,也不能保證可以繼續(xù)檢測到下一個SCK。只要遺漏了一個SCK,就相當于串行數(shù)據(jù)漏掉了一個位,后面繼續(xù)接收/發(fā)送的數(shù)據(jù)就都是錯誤的了。
圖2主從時鐘和SCK的關系
根據(jù)以上的分析,SPR和主從時鐘比的關系如表1所列。
表1SPR的設置和主從時鐘周期比值之間的關系
在發(fā)送數(shù)據(jù)之前按照表1對SPR進行設置,SPR設定錯誤可以完全避免。
評論