使用者空間控制GPIO的方式

2021-10-11 10:51:48 字數 4757 閱讀 3188

在sysfs中訪問gpio的方法

(a)kernel/arch/arm/boot/dts/晶元廠名字(比如rockchip,imx)/***x-pinctrl.dtsi

gpioa :  0 -31

gpiob:  32-60

gpioc:  61-90

gpiod:  91-112

gpioe: : 113-132

gpiof:  133-164

gpiog  165:-175

gpioh: 176-187

gpiok: 188-206

gpioma:  207-236

gpsd0: 237-251

gpsd1: 252-262

gpsd2: 263-272

(b).從板子中獲取gpio的資訊:在板子的串列埠輸入 ls /sys/class/gpio

# ls -l sys/class/gpio/

--w-------    1 root     root          4096 apr 23 03:43 export

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip0 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip0

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip113 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip113

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip133 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip133

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip165 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip165

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip176 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip176

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip188 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip188

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip207 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip207

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip237 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip237

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip252 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip252

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip263 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip263

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip32 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip32

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip61 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip61

lrwxrwxrwx    1 root     root             0 apr 23 03:43 gpiochip91 -> ../../devices/platform/14200000.pinctrl/gpio/gpiochip91

--w-------    1 root     root          4096 apr 23 03:43 unexport

可以看出以上結果從/sys/devices/platform/14200000.pinctrl/gpio鏈結過來的。0x14200000是gpio的基位址。

/sys/devices/platform/14200000.pinctrl/gpio# ls -l

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip0

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip113

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip133

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip165

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip176

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip188

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip207

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip237

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip252

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip263

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip32

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip61

drwxr-xr-x    3 root     root             0 apr 23 03:43 gpiochip91

在每個檔案下面都有下面的內容:

base       device     label      ngpio      power      subsystem  uevent

/sys/devices/platform/14200000.pinctrl/gpio/gpiochip32# cat lable

gpb/sys/devices/platform/14200000.pinctrl/gpio/gpiochip32# cat base

32/sys/devices/platform/14200000.pinctrl/gpio/gpiochip32# cat ngpio

29gpiochip32所在的gpio組名為gpb。base的表明gpb這組gpio的基準引腳號是32(從32號開始)。ngpio表示gpb這組gpio的總數量為29.(這樣,gpb的下一組gpio基準引腳號就是61)

通過上面的步驟,可以得到每一組gpio包含所少個gpio pin數目,對某一具體的gpio也可以知道它的gpio號碼是多少。

(c). 通過串列埠讀取gpio的狀態:

讀取gpio91的狀態:

#echo 91 > /sys/class/gpio/export   //向export檔案寫入gpio編號,暴露該gpio的操作介面到使用者空間

# echo in > /sys/class/gpio/gpio91/direction //設定方向

# cat /sys/class/gpio/gpio91/value //檢視gpio的值

0#echo "rising" > /sys/class/gpio/gpio91/edge 或者 echo "falling" > /sys/class/gpio/gpio77/edge  //當gpio被設定為輸入時,可以配置中斷的觸發方式,rising或falling edge

echo 91 > /sys/class/gpio/unexport 

(d).假設引腳號為191,可以用如下方法設定其為輸出、值為1:

#echo 191 > /sys/class/gpio/export

#echo out > /sys/class/gpio/gpio191/direction

#echo 1 > /sys/class/gpio/gpio191/value

#echo 191 > /sys/class/gpio/unexport

把GPIO 通過sysfs匯出到使用者空間

在嵌入式裝置中對gpio的操作是最基本的操作。一般的做法是寫乙個單獨驅動程式,網上大多數的例子都是這樣的。其實linux下面有乙個通用的gpio操作介面,那就是我要介紹的 sys class gpio 方式。首先,看看系統中有沒有 sys class gpio 這個資料夾。如果沒有請在編譯核心的時候...

linux下控制gpio的輸出電

在超級終端裡面的輸入方法 cd sys class gpio sys class gpio echo 117 export sys class gpio echo out gpio117 direction sys class gpio echo 1 gpio117 value 輸出高電平 這個固然...

zynq中各種GPIO方式的區別

zynq可以提供多種方式提供gpio的能力,早上到公司就想應該先搞清楚裡面的各種區別,因為我自己不自然就只會用自己的最熟悉的方案來實現,所以在此總結一下 很多帖子討論這個,當然是因為簡單了 但是好像都沒有整理完整 zynq中gpio有四種,其中ps中mio emio兩種,而pl中同樣有兩種情況,ax...