Linux SPI 原理and驅動介紹

技術的東西,混是混不過去的!


一、SPI基礎知識

SPI是英語Serial Peripheral interface的縮寫,是串行外圍設備接口,是一種**高速,全雙工,同步的通信總線。

SPI總線定義兩個及以上設備間的數據通信,提供時鐘的設備爲主設備Master,接收時鐘的設備爲從設備Slave。

信號定義如下:
SCK : Serial Clock 串行時鐘
​
MOSI : Master Output, Slave Input 主發從收信號
​
MISO : Master Input, Slave Output 主收從發信號
​
SS/CS : Slave Select 片選信號

電路連接如下:

單個主設備和單個從設備:

單個主設備和多個從設備,通過多個片選信號或者菊花鏈方式實現:(其實就是串並聯兩種方式)

片選時,主機的NSS信號爲高電平,從機的NSS信號被主機片選,即低電平的被選中。

 

二、Linux SPI驅動總體架構

在2.6的linux內核中,SPI的驅動架構可以分爲如下三個層次:SPI 核心層、SPI控制器驅動層和SPI設備驅動層。Linux 中SPI驅動代碼位於drivers/spi目錄。

1.SPI核心層

SPI核心層是Linux的SPI核心部分,提供了核心數據結構的定義、SPI控制器驅動和設備驅動的註冊、註銷管理等API。其爲硬件平臺無關層,向下屏蔽了物理總線控制器的差異,定義了統一的訪問策略和接口;其向上提供了統一的接口,以便SPI設備驅動通過總線控制器進行數據收發。 Linux中,SPI核心層的代碼位於driver/spi/spi.c。

2.SPI控制器驅動層

SPI控制器驅動層,每種處理器平臺都有自己的控制器驅動,屬於平臺移植相關層。它的職責是爲系統中每條SPI總線實現相應的讀寫方法。在物理上,每個SPI控制器可以連接若干個SPI從設備。 在系統開機時,SPI控制器驅動被首先裝載。一個控制器驅動用於支持一條特定的SPI總線的讀寫。一個控制器驅動可以用數據結構struct spi_master來描述。

3.SPI設備驅動層

SPI設備驅動層爲用戶接口層,其爲用戶提供了通過SPI總線訪問具體設備的接口。 SPI設備驅動層可以用兩個模塊來描述,struct spi_driver和struct spi_device。 Driver是爲device服務的,spi_driver註冊時會掃描SPI bus上的設備,進行驅動和設備的綁定,probe函數用於驅動和設備匹配時被調用

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章