S3C6410的SPI控制器
?********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.12.07
類別:WINCE驅動開發
********************************LoongEmbedded********************************
?
?
1.????? SPI控制器
1.1?? 概述
SPI總線是一種全雙工串行同步通訊協議,SPI(Serial Peripheral Interface)串行外圍接口能夠支持串行數據傳輸,其包含兩個獨立的8/16/32位移位寄存器分別用于發送和接收。在SPI傳輸期間,數據同步發送(串行移出)和接收在(串行移入)。
?
1.2?? SPI控制器支持下面的特征
1)????? 全雙工,表示可以同時發送和接收。
2)????? 用于發送和接收的8/16/32位移位寄存器。
3)????? 8位預分頻邏輯,由時鐘配置寄存器的低八位決定。
4)????? 3個時鐘源,包括PCLK、USBCLK和Epll clock。
5)????? 支持National Semiconductor Microwire的協議和Motorola的串行外設接口。
6)????? 兩個獨立的發送和接收FIFO,each 16 samples deep by 32-bits wide。
7)????? 支持主模式和從模式。
8)????? 支持只接收沒發送的操作。
9)????? 發送/接收的最大頻率為50MHZ,但在CPHA=1,且從發送模式時,最大頻率為20MHz。
?
1.3?? 信號描述
S3C6410的SPI控制器和SPI接口的外部設備之間的外部信號有4個接口,這幾個接口在SPI禁用的時候可以用作通用的GPIO口。
?
XspiCLK:
串行時鐘信號,用于控制傳輸數據的時間,可作為輸入和輸出。
XspiMISO:
在主模式下,主設備通過此引腳獲取從設備的輸出引腳輸出的數據,此時作為輸入;在從模式下,主設備通過此引腳輸出數據到從設備,此時作為輸出。
XspiMOSI:
在主模式下,主設備通過此引腳輸出數據給從設備,此時作為輸出;在從模式下,主設備通過此引腳接收來之從設備輸出的數據,此時作為輸入。
XspiCS:
從選擇信號,當此引腳為低電平的時候,所有的數據發送/接收順序被執行。
?
1.4?? SPI的操作
S3C6410的SPI接口在S3C6410和外設之間傳輸一位串行數據,S3C6410的SPI支持CPU或DMA分別發送或接收FIFO,并且支持同時雙向傳輸數據。SPI有兩個通道,分別為TX通道和RX通道,TX通道有一個從TX FIFO傳輸數據到外設的途徑,RX通道有一個從外設接收數據到RX FIFO的途徑。
?
CPU或DMA如果要寫數據到FIFO中,就必須先寫數據到SPI_TX_DATA寄存器中,這樣此寄存器中的內容就會自動移動到發送FIFO中,同樣的道理;如果要從接收FIFO中讀取數據,CPU或DMA就必須訪問寄存器SPI_RX_DATA,緊接著,接收FIFO的數據就會自動移動到SPI_RX_DATA寄存器中。在此結合前面提到的移位寄存器,我們把數據寄存器、FIFO和移位寄存器的關系以圖1體現:
圖1 數據寄存器、FIFO和移位寄存器的關系圖
為更好去理解SPI的控制邏輯,貼出SPI總線協議的邏輯框圖,如圖2所示:
圖2 SPI總線規范邏輯框圖
?
1.4.1???????? 操作模式
HS_SPI支持主和從這兩個操作模式,在主模式中,主設備產生HS_SPICLK并且發送到外設。XspiCS信號用于選擇從設備,當其為低電平時指示數據有效,也就是,在開始發送或者接收數據包之前必須先設置XspiCS為低電平。
?
1.4.2???????? FIFO訪問
S3C6410的SPI支持CPU和DMA來訪問FIFO,CPU和DMA訪問FIFO數據的大小可以選擇8/16/32位。如果選擇8位的數據大小,有效的數據位為0位到7位。通過觸發用于定義的閾值,CPU對FIFO的訪問正常打開和關閉。每個FIFO的觸發閾值可以設備為0到64字節中任何一個值。如果采用DMA訪問,那么SPI_MODE_CFG寄存器的TxDMAOn或者RxDMAOn位必須置位,DMA訪問只支持單傳輸和4突發式傳輸,在往TX FIFO發送數據時,DMA請求信號在FIFO滿之前一直為高電平。在從RX FIFO接收數據時,只要FIFO非空,DMA請求信號都為高電平。
?
1.4.3???????? RX FIFO中的結尾字節
在中斷模式下,RX FIFO中采樣的數量小于閾值,或是在DMA的4突發式模式下,并且沒有額外的數據被接收,這些留下的字節被稱為結尾字節。為了從RX FIFO中移走這些字節,需要用到內部定時器和中斷信號,基于APB總線時鐘,內部時鐘的值可以設置到1024個時鐘。當此定時器的值變為0時,中斷信號發生并且CPU能移走RX FIFO中的這些結尾字節。
?
1.4.4???????? 數據包數目控制
在主模式下,SPI能夠控制接收的數據包數量。如果要接收任何數目的數據包,只需要設置PACKET_CNT_REG寄存器,當接收到的數據包的數量和設置的一樣時,SPI停止產生SPICLK,如果要重新裝載此功能,需要強制性遵循軟件或是硬件復位,其中軟件復位能夠清除除了特殊功能寄存器之外的所有寄存器,而硬件復位則清除所有的寄存器。
?
1.4.5???????? 片選控制
XspiCS可以選擇為手動控制或是自動控制。對于手動控制模式,需要對從選擇信號控制寄存器CS_REG的AUTO_N_MANUAL位清零,此模式的XspiCS電平由此寄存器的NSSOUT位控制;對于自動控制模式,需要對從選擇信號控制寄存器CS_REG的AUTO_N_MANUAL位置位,XspiCS電平被自動確定在包與包之前,其非活動期間有NCS_TIME_COUNT的值來決定,此模式下的NSSOUT是無效的,見下圖:
圖3 自動片選模式波形圖
1.4.6???????? SPI傳輸格式
為了支持不同傳輸特性的外圍設備,S3C6410的SPI支持4種數據傳輸格式,這是由CPOL和CPHA來決定的,下面先來學習這兩個概念。
?
CPOL:
CPOL(clock polarity)時鐘極性控制位指定串行時鐘是active high(也就是當SCLK時鐘有效的時候為高電平的時候)還是active low(也就是當SCLK時鐘有效的時候為低電平的時候),此控制位對傳輸格式沒有重大的影響。CPOL=0時,表示SCLK空閑時候為低電平;CPOL=1時,表示SCLK空閑的時候為高電平
?
CPHA:
CPHA(clock phase)時鐘相位控制位選擇兩個不同的基礎傳輸格式中的一種,CPHA表示數據采樣的時刻,如果數據采樣時刻對應是SCLK的第一個跳變沿,則CPHA=0;如果數據采樣時刻對應是SCLK的第二個跳變沿,則CPHA=1。
?
SPI主設備和從設備的時鐘相位和極性應該一致,這樣,SPI主設備就需要根據從設備的時鐘相位和極性這兩個特性來確定CPOL和CPHA的值了。在一些情況下,為了允許一個主設備和多個有不同要求的從設備通訊,需要主設備來改變時鐘相位和極性的值。
?
接下來,我們來學習SPI總線規范中CPHA=0和CPHA=1的傳輸格式
圖4 CPHA=0時的時序圖
第1個跳變沿:
SCLK的第一個跳變沿,從設備的第一個數據位輸入到主設備(也即鎖存到主設備,這里的鎖存也可以理解為采樣)和主設備的第一個數據位輸入到從設備(也即鎖存到從設備)中。對于一些設備,只要從設備被選擇,從設備數據輸出引腳輸出的數據的第一位是有效的,在這種格式中,在/SS引腳變低后的半個時鐘周期就產生第一個跳變沿。SPI控制器部分CPOL=0,CPHA=0的時序圖就屬于這種情形
圖5 CPOL=0和CPHA=0的波形圖
?
接著繼續描述圖4的時序圖
第2個跳變沿:
前面一個跳變沿從串行數據輸入引腳鎖存到主設備和從設備的數據位被移入到對應的移位寄存器的LSB或MSB,這由LSBFE位來決定。
?
這樣前面的兩個跳變沿就完成了一個數據位的傳輸了,也說明了對應于一個跳變沿,發送和接收時同時進行的,而不是一個跳變沿對應發送,另一個跳變沿對應接收。
?
第3個跳變沿:
SPI主設備的下一位數據從輸出引腳輸入到從設備的輸入引腳,與此同時,從設備的下一位數據從輸出引腳輸入到主設備的輸入引腳,如此循環,此過程繼續SCLK的16個跳變沿,可以總結出來的規律是:在跳變沿奇數的時候,數據被鎖存到設備中,在跳變沿偶數的時候,數據被移入到移位寄存器中。
?
這樣在16個SCLK的跳變沿之后,之前在SPI主設備數據寄存器中的數據已經為移入到從設備數據寄存器中,而之前從設備數據寄存器中的數據已經移入到主設備的數據寄存器中了。
圖6 CPHA=1的時序圖
一些設備在數據輸出引腳輸出的第一個數據位有效之前需要第一個SCK跳變沿,在第二個跳變沿的時候才同步數據輸入到主設備和從設備中,在這種格式中,在8個時鐘傳輸操作周期的開始的時候通過設置CPHA位(CPHA=1)來產生第一個跳變沿。
?
第1個跳變沿:
在SCK時鐘同步延時半個周期后馬上產生第一個跳變沿,此時主設備指示從設備發送其第一個數據位到主設備的數據輸入引腳,但是此數據位并不是即將要發送的數據字節有效的數據位,S3C6410的SPI控制器的CPOL=0和CPHA=1的時序圖如下:
圖7? SPI控制器CPOL=0和CPHA=1的時序圖
第2個跳變沿
這是主設備和從設備的鎖存跳變沿,也就是說在此跳變沿的時候,從設備的第一個數據位輸入到主設備(也即鎖存到主設備)和主設備的第一個數據位輸入到從設備(也即鎖存到從設備)中。
?
第3個跳變沿:
前面一個跳變沿從串行數據輸入引腳鎖存到主設備和從設備的數據位被移入到對應的移位寄存器的LSB或MSB,這由LSBFE位來決定,到此就完成了一個數據位的傳輸了。
?
第4個跳變沿:
SPI主設備的下一位數據從輸出引腳輸入到從設備的輸入引腳,與此同時,從設備的下一位數據從輸出引腳輸入到主設備的輸入引腳,如此循環,此過程繼續SCLK的16個跳變沿,可以總結出來的規律是:在跳變沿偶數的時候,數據被鎖存到設備中,在跳變沿奇數的時候,數據被移入到移位寄存器中。
?
這樣在16個SCLK的跳變沿之后,之前在SPI主設備數據寄存器中的數據已經為移入到從設備數據寄存器中,而之前從設備數據寄存器中的數據已經移入到主設備的數據寄存器中了。
?
下面來看S3C6410的SPI控制器支持的4中傳輸格式的波形圖
圖8? SPI控制器支持的4中波形圖
?
?
總結
以上是生活随笔為你收集整理的S3C6410的SPI控制器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE6.0在应用程序中调用控制面板
- 下一篇: S3C6410 KeyPad驱动(上)