GPIO操做原理(Linux一切皆文件)

Linux 系統定義了一切皆文件的原則,甚至於硬件:磁盤軟盤,等……,這樣的好處是,在不一樣的平臺和硬件上都能造成統一的調用方式。shell

這裏,咱們從樹莓派,探討下GPIO的操做原理(非內核原理):經過 sysfs 方式控制 GPIO。學習

接觸過 Linux 的,應該都瞭解 echo "0" > test.txt 是將一個字符串 0 輸入到當前目錄的 test.txt 文件中,那麼下面全部的操做,均基於這個操做形式。.net

GPIO端口

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

  1. gpio_operation 經過 /sys/ 文件接口操做 IO 端口 GPIO 到文件系統的映射。
  2. 控制 GPIO 的目錄位於 /sys/class/gpio。
  3. /sys/class/gpio/export 文件用於通知系統須要導出控制的 GPIO 引腳編號。
  4. /sys/class/gpio/unexport 用於通知系統取消導出。
  5. /sys/class/gpio/gpiochipX 目錄保存系統中 GPIO 寄存器的信息,包括每一個寄存器控制引腳的起始編號 base,寄存器名稱,引腳總數

計算引腳編號

引腳編號 = 控制引腳的寄存器基數 + 控制引腳寄存器位數接口

舉個栗子(具體 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 的值對應着,上面的 highlow 時的 1 / 0

取消引腳導出

當控制完成時,須要釋放掉端口的控制,此時如導出引腳時同樣,將引腳編號輸出到 /sys/class/gpio/unexport 便可。

echo 18 > /sys/class/gpio/unexport

SHELL 控制

上面的講解中,即時經過 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

相關連接

  1. 樹莓派學習筆記——使用文件IO操做GPIO SysFs方式
  2. 樹莓派學習筆記——Shell腳本操做GPIO
  3. Linux下用文件IO的方式操做GPIO(/sys/class/gpio)
  4. 嵌入式 Linux 如何操做 GPIO ?
相關文章
相關標籤/搜索