串行外圍接口SPI功能模塊的設計
2.3 工作模式
SPI有兩種工作模式,可以通過外部引腳跳線的方式來切換。
主模式:發送和接收可以同時工作在主模式下。
主模式的顯著特征是不論是發送還是接收始終有SCLK信號,發送操作是由向發送FIFO中寫數據而觸發的。在主模式下,時鐘信號的1次作用對應一位數據的發送(MOSI)和另一位數據的接收(MISO)。
如圖3所示,在主片中數據從移位寄存器中自右向左發出送到從片(MOSI),同時從片中的數據自左向右發到主片(MISO),經過8位時鐘周期完成1個字節的發送。輸入字節保留在移位寄存器中,此時SPI INT FLAG位自動置位(如果有中斷設置,則產生中斷),移位寄存器的數據將被鎖存到接收FIFO中,此后對接收FIFO的讀操作將把數據讀出。
從模式:發送和接收同時工作在從模式下。從模式的顯著特征是:不論是發送還是接收始終必須在SCLK信號作用下進行,并且SSN信號必須有效。
當SSN信號無效時,數據的發送無法進行并且輸入的數據視為無效。數據的發送和接收過程見圖3所示,與主模式下基本相似,只是移位寄存器的數據移出和輸入方向與之相反。
圖3 主片和從片發送和接收操作
3 SPI模塊功能設計
3.1 模塊劃分
根據功能定義及SPI的工作原理,將整個SPI IP劃分為8個子模塊:APB接口模塊、時鐘分頻模塊、發送數據FIFO模塊、接收數據FIFO模塊、寄存器控制模塊、命令解析模塊、中斷處理模塊及發送接收數據模塊。整個SPI模塊劃分結構圖如圖4所示。
圖4 數據傳輸結構
在這些模塊中,Tx—FIFO和Rx—FIFO用來做接收發送數據的FIFO。DMA/INT是中斷控制模塊,通知MCU或者DMA發送或者接收數據的FIFO。CMD ANALYSIS模塊用來解析在從模式下Host發過來的命令。CTRl/Register用來放置寄存器,供MCU讀寫配置SPI的各種參數。Shifter用來做串并轉換,收發送數據。Clock模塊用來產生主模式下時鐘。
3.2 設計方案
通過深入分析SPI的四種傳輸協議可以發現,根據一種協議,只要對串行同步時鐘進行轉換,就能得到其余的三種協議。為了簡化設計,規定如果要連續傳輸多個數據,在兩個數據傳輸之問插入一個串行時鐘的空閑等待,這樣狀態機只需兩種狀態(空閑和工作)就能正確工作。相比其它設計,在基本不降低性能的前提下,思路比較精煉、清晰,能夠大大縮短寫代碼的時間,降低出錯率。
此SPI模塊有兩種工作方式:查詢方式和DMA方式。查詢方式通過處理器核監視SPI的狀態寄存器來獲取其所處的狀態,從而決定下一步動作。
DMA方式由DMA模塊控制數據在內存和SPI間的交換,而不需要處理器核的參與,有效提高了總線利用率。
外部MCU可以通過和內部MCU通訊的方式,把從模式的SPI配置成可以解析命令的模式,這樣外部主模式的SPI可以在SSN低電平的時候連續傳輸多位數據,在下降沿的第一個數據被認為是命令。從模式的SPI可以解析這些命令然后做相應的操作。這些操作主要包括,清除接收FIFO或者發送FIFO中的數據,選擇MCU或者DMA來作為數據交互的對象等,可以大大節省和MCU交互所需要的帶寬。
作為主要組成部分的寄存器控制模塊和SPI核心模塊采用同步電路設計,它們之間的通訊采用異步電路設計。這些主要是考慮到SPI的帶寬通過MCU的控制是可調的。SPI核心部分的時鐘頻率可調,可實現多種帶寬,增加了本設計SPI的靈活性。
評論