Linux
系統定義了一切皆文件的原則,甚至於硬件:磁盤
,軟盤
,等……,這樣的好處是,在不一樣的平臺和硬件上都能造成統一的調用方式。shell
這裏,咱們從樹莓派
,探討下GPIO
的操做原理(非內核原理):經過 sysfs 方式控制 GPIO。學習
接觸過 Linux 的,應該都瞭解
echo "0" > test.txt
是將一個字符串0
輸入到當前目錄的test.txt
文件中,那麼下面全部的操做,均基於這個操做形式。.net
自 Linux 2.6.21
起,GPIO
做爲一個基礎組件包含到Linux 內,咱們能夠根據 GPIO
規範直接使用。code
首先,進入 /sys/class/gpio
向目錄下, 咱們能夠看到如下文件:orm
# cd /sys/class/gpio && ls -l 總用量 0 -rwxrwx--- 1 root gpio 4096 9月 8 01:37 export lrwxrwxrwx 1 root gpio 0 8月 9 01:16 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0 -rwxrwx--- 1 root gpio 4096 9月 8 01:47 unexport
目錄功能具體以下:blog
引腳編號 = 控制引腳的寄存器基數 + 控制引腳寄存器位數接口
舉個栗子(具體 GPIO 須要參考數據手冊),若是使想用 GPIO1_20,那麼引腳編號就可能等於 1 x 32 + 20 = 54ip
咱們操做在
樹莓派2B
下,其中 寄存器基數爲 0 ,因此引腳編號=引腳寄存器位數;記操做幾號,引腳號即爲幾。字符串
向文件 /sys/class/gpio/export
寫入引腳編號,便可激活引腳。get
echo 18 > /sys/class/gpio/export
命令執行成功後,目錄下,便會出現 gpio18
文件夾,若是沒有出現,則表示引腳不可導出。
引腳導出成功後,便可經過寫入 /sys/class/gpio/gpio18/direction
控制引腳 [輸入] 或 [輸出]。
# cd gpio18 # echo "out" > direction
命令無報錯,即爲操做成功;可輸入值有如下幾種:
in 引腳輸入信號 out 輸出控制到引腳 high 輸出一個高電平(`value`:`1`) low 輸出一個低電平(`value`:`0`)
輸入輸出的值,經過 gpioX
下的 value
文件控制
當爲輸入時,請 echo /sys/class/gpio/gpio18/value
讀出值;
當爲輸出時,請 echo 1 > /sys/class/gpio/gpio18/value
輸入值;
這裏 value
的值對應着,上面的 high
和 low
時的 1
/ 0
當控制完成時,須要釋放掉端口的控制,此時如導出引腳時同樣,將引腳編號輸出到 /sys/class/gpio/unexport
便可。
echo 18 > /sys/class/gpio/unexport
上面的講解中,即時經過 shell
的方式控制 GPIO
,這裏將全部的命令集合下:
# 進入GPIO目錄 cd /sys/class/gpio # 使用ls查看gpio目錄中的內容 ls # export gpiochip0 unexport # GPIO操做接口從內核空間暴露到用戶空間 # 執行該操做以後,該目錄下會增長一個gpio18文件目錄 echo 18 > export # 進入GPIO18目錄,該目錄由上一步操做產生 cd gpio18 # 查看gpio18目錄 ls # active_low direction edge power subsystem uevent value # 設置GPIO18爲輸出方向 echo out > direction # 輸出邏輯高電平,LED點亮 echo 1 > value # 輸出邏輯低電平,LED熄滅 echo 0 > value # 返回上級目錄 cd ../ # 釋放GPIO4接口 echo 18 > unexport