1. 程式人生 > >MTK平臺SPI匯流排的引數意義,重點講解的是speed和mode兩個引數的講解

MTK平臺SPI匯流排的引數意義,重點講解的是speed和mode兩個引數的講解

解釋MTK平臺SPI匯流排引數的含義
 
檔案kernel-3.10/drivers/misc/mediatek/spi/mt6795/spi.c是MTK的spi控制器的驅動,具體引數的設定是在chip_config檔案中。
chip_config就是從裝置spi_device。對應的時間就是:設定的數值×9.6ns。如low_time = 10*9.6ns =96ns.,

修改:mt_spi_setup的函式中的chip_config變數的內容

chip_config->setuptime = 7,//15,cs    cs 建立時間  看上圖 7*9.6ns=67.2ns
chip_config->holdtime = 7,//15, cs    cs 保持時間  看上圖
chip_config->high_time = 16,//6 sck  clk 高電平時間 看上圖
chip_config->low_time =  17,//6  sck   clk 低電平時間 看上圖
chip_config->cs_idletime = 3,//20,      cs 休眠時間  看上圖

chip_config->cpol = 0, // cpol:時鐘極性選擇,為0時SPI匯流排空閒為低電平,為1時SPI匯流排空閒為高電平
chip_config->cpha = 0, //   cpha:  時鐘相位選擇,為0時在SCK第一個跳變沿取樣,為1時在SCK第二個跳變沿取樣
chip_config->rx_mlsb = 1, //  rx_mlsb & tx_mlsb:傳輸資料時,先從低bit傳送還是高bit傳送,1時代表先從低bit傳送
chip_config->tx_mlsb = 1,    
chip_config->tx_endian = 0, //  傳輸資料時,以大端模式傳輸或者小端模式傳輸,只對DMA傳輸有效,0時,代表小端模式傳輸; fifo mode為小端模式。
chip_config->rx_endian = 0,
chip_config->com_mod = DMA_TRANSFER, //  DMA或者fifo 傳輸

時鐘極性和相位看下圖


工作方式1:
當CPHA=0、CPOL=0時SPI匯流排工作在方式1。MISO引腳上的資料在第一個SPSCK沿跳變之前已經上線了,而 為了保證正確傳輸,MOSI引腳的MSB位必須與SPSCK的第一個邊沿同步,在SPI傳輸過程中,首先將資料上線,然後在同步時鐘訊號的上升沿 時,SPI的接收方捕捉位訊號,在時鐘訊號的一個週期結束時(下降沿),下一位資料訊號上線,再重複上述過程,直到一個位元組的8位訊號傳輸結束。
工作方式2:
當CPHA=0、CPOL=1時SPI匯流排工作在方式2。與前者唯一不同之處只是在同步時鐘訊號的下降沿時捕捉位訊號,上升沿時下一位資料上線。
工作方式3:
當CPHA=1、CPOL=0時SPI匯流排工作在方式3。MISO引腳和MOSI引腳上的資料的MSB位必須與SPSCK的 第一個邊沿同步,在SPI傳輸過程中,在同步時鐘訊號週期開始時(上升沿)資料上線,然後在同步時鐘訊號的下降沿時,SPI的接收方捕捉位訊號,在時鐘信 號的一個週期結束時(上升沿),下一位資料訊號上線,再重複上述過程,直到一個位元組的8位訊號傳輸結束。
工作方式4:
當CPHA=1、CPOL=1時SPI匯流排工作在方式4。與前者唯一不同之處只是在同步時鐘訊號的上升沿時捕捉位訊號,下降沿時下一位資料上線。