linux下imx6ul處理器用戶空間操作GPIO方法
一、在用戶空間配置並操作GPIO的必要性
有時,爲了快速方便的測試IO口,我們可以將GPIO暴露給用戶空間,直接在用戶空間配置並操作GPIO,前提是沒有驅動使用這個GPIO。
二、IMX6UL處理器GPIO編號算法
GPIO計算公式:
id = (m - 1) * 32 + n
例如:
有gpio3.13,則m = 3,n = 13,則id = (3 - 1) * 32 + 13 = 77
這是IMX6UL GPIO的編號算法,理論上所有IMX6處理其都是這樣的編號算法。
三、用戶空間配置操作GPIO方法
1. 使能linux內核選項CONFIG_GPIO_SYSFS
CONFIG_GPIO_SYSFS=y
2. 測試方法
2.1 關注/sys/class/gpio下的文件
--export 使能gpio配置
--unexport 取消gpio配置
--gpioX 指代具體的gpio引腳
--gpio_chipY 指代gpio控制器
2.2 申請將某個gpio(假設申請gpio3的第13個gpio)的控制權導出到用戶空間,按照前面的算法,gpio3.13的id爲77。
echo 77 > /sys/class/gpio/export
此操作會生成目錄/sys/class/gpio/gpio77, 指代具體的gpio引腳gpio77目錄下有以下文件:
direction: 表示gpio端口的方向,讀取結果是in或out。該文件也可以寫,寫入out 時該gpio設爲輸出同時電平默認爲低。寫入low或high則不僅可以設置爲輸出還可以設置輸出的電平。
value: 表示gpio引腳的電平,0(低電平)1(高電平),如果gpio被配置爲輸出,這個值是可寫的,記住任何非零的值都將輸出高電平。
edge: 表示中斷的觸發方式,edge文件有如下四個值:none, rising, falling,both。
none表示引腳爲輸入,不是中斷引腳
rising表示引腳爲中斷輸入,上升沿觸發
falling表示引腳爲中斷輸入,下降沿觸發
both表示引腳爲中斷輸入,邊沿觸發
這個文件節點只有在引腳被配置爲輸入引腳的時候才存在。 當值是none時可以通過如下方法將變爲中斷引腳, echo “both” > edge;對於是both,falling還是rising依賴具體硬件的中斷的觸發方式。此方法即用戶態gpio轉換爲中斷引腳的方式
***active_low:***目前還不知其功能。
2.3 /sys/class/gpio/gpiochipN
gpiochipN表示的就是一個gpio_chip,用來管理和控制一組gpio端口的控制器,該目錄下存在以下屬性文件:
base: 和N相同,表示控制器管理的小的端口編號。
lable: 診斷使用的標誌(並不總是唯一的)
ngpio: 表示控制器管理的gpio端口數量