1. 程式人生 > >GPIO應用開發方法【ZT】

GPIO應用開發方法【ZT】

Linux的應用層程式中,可以使用系統中的GPIOLIB模組在使用者空間提供的sysfs介面,實現應用層對GPIO的獨立控制。本節介紹的GPIO的這種操作方式是在Linux 2.6.35核心之後引入的一種GPIOLIB的管理機制,GPIOLIB提供了很好的使用者介面封裝,為使用者提供了一個動態匯出的介面。

在實驗箱中執行的Linux系統的/sys/class/gpio目錄下,共有5個檔案,其中有3個檔案為符號連結(gpiochip0、gpiochip5、gpiochip244),指向管理對應裝置的目錄。這3個符號連結分別對應實驗箱中能夠分別控制對應GPIO的3個管理晶片。上一節中涉及的GPIO都是從與gpiochip244對應的晶片中引出的。因此,本節主要討論gpiochip244對應晶片的GPIO管理,但是此處介紹的操作方法同樣也適用於gpiochip0和gpiochip5。

在/sys/class/gpio/gpiochip244目錄下,共有3個檔案和3個資料夾,主要作用見表4-2。

表4-2  gphichip244目錄下檔案的作用


文 件 名 類    型 屬    性 作    用
label 檔案 只讀 裝置資訊
base 檔案 只讀 裝置所管理的GPIO初始編號
ngpio 檔案 只讀 裝置所管理的GPIO總數
power 目錄   裝置供電方面的相關資訊
subsystem 目錄   符號連結,指向父目錄
uevent 檔案 讀寫 核心與udev(自動裝置發現程式)之間的通訊介面
 在這個目錄下,base和ngpio這兩個檔案為開發人員提供了重要的資訊。在gpiochip244目錄下,base檔案中的內容為“244”(字串型別),ngpio檔案中的內容為“12”。這兩條資訊說明,該外設管理了編號從244到255的12個GPIO介面。在實驗箱中只有編號在248到255之間的8個GPIO被引出。

對其中某個GPIO介面的控制主要需要進行如下包含3個步驟的操作:

(1) 匯出GPIO介面

在/sys/class/gpio目錄中有兩個只具有寫屬性的檔案:export和unexport。通過對這兩個檔案進行操作可以實現對GPIO介面的匯出。

下面舉例說明,為了對255號GPIO介面進行匯出,可以在終端中通過下面的操作來完成:
cd  /sys/class/gpio   //進入相應的目錄
echo 255 > export   //將“255”(字串型別)寫入檔案export

將“255”寫入export檔案後,系統會自動在/sys/class/gpio下建立gpio255目錄。這說明對編號為255的GPIO介面匯出成功。

(2) 設定GPIO屬性

在gpio255目錄下,系統會自動產生6個檔案。其中,power、subsystem和uevent這3個檔案的功能與表4-2中描述的功能相同。

其他的3個檔案——value、direction和active_low都具有讀寫屬性,用於完成對GPIO介面的控制。

value:具有讀寫屬性,表示當前GPIO介面的電平狀態。當GPIO的方向為輸入時,可以通過value讀出當前GPIO介面的電平狀態高低(“1”/“0”,均以ASCII碼錶示);當GPIO方向為輸出時,可以向該檔案寫入“1”/“0”,控制當前GPIO介面的高/低電平。

direction:具有讀寫屬性,控制GPIO介面的輸入輸出方向。如果將“out”寫入該檔案,該GPIO介面為輸出狀態;如果將“in”寫入該檔案,該GPIO介面為輸入狀態;如果將“high”寫入該檔案,那麼在將GPIO介面置為輸出狀態的同時,也將value的值置為“1”;如果將“low”寫入value檔案,那麼在將GPIO介面置為輸出狀態的同時,將“0”寫入value檔案。通過對direction檔案的讀操作還可以判斷當前GPIO介面的輸入/輸出狀態(“in”/“out”)。

active_low:具有讀寫屬性,值為“0”或“1”,用於決定value中的值是否進行翻轉。當值為“0”時,value中的“0”表示低電平,“1”表示高電平;當值為“1”時,value中的“1”表示低電平,“0”表示高電平。

(3) GPIO介面匯出的取消

將取消匯出的GPIO編號寫入檔案unexport中,對應的GPIO介面將會被取消匯出。相對的,在檔案系統中建立的目錄也會消失。

例如,取消255號GPIO介面的匯出:
echo 255 > unexport   //將“255”(字串型別)寫入檔案unexport