溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

什么是GPIO操作原理

發(fā)布時(shí)間:2021-10-22 09:40:28 來源:億速云 閱讀:232 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這篇文章將為大家詳細(xì)講解有關(guān)什么是GPIO操作原理,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

Linux 系統(tǒng)定義了一切皆文件的原則,甚至于硬件:磁盤,軟盤,等……,這樣的好處是,在不同的平臺(tái)和硬件上都能形成統(tǒng)一的調(diào)用方式。

這里,我們從樹莓派,探討下GPIO的操作原理(非內(nèi)核原理):通過 sysfs 方式控制 GPIO。

什么是GPIO操作原理

接觸過 Linux 的,應(yīng)該都了解 echo "0" > test.txt 是將一個(gè)字符串 0 輸入到當(dāng)前目錄的 test.txt 文件中,那么下面所有的操作,均基于這個(gè)操作形式。

GPIO端口

Linux 2.6.21 起,GPIO 作為一個(gè)基礎(chǔ)組件包含到Linux 內(nèi),我們可以根據(jù) GPIO 規(guī)范直接使用。

首先,進(jìn)入 /sys/class/gpio 向目錄下, 我們可以看到以下文件:

# 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

目錄功能具體如下:

  1. gpio_operation 通過 /sys/ 文件接口操作 IO 端口 GPIO 到文件系統(tǒng)的映射。

  2. 控制 GPIO 的目錄位于 /sys/class/gpio。

  3. /sys/class/gpio/export 文件用于通知系統(tǒng)需要導(dǎo)出控制的 GPIO 引腳編號(hào)。

  4. /sys/class/gpio/unexport 用于通知系統(tǒng)取消導(dǎo)出。

  5. /sys/class/gpio/gpiochipX 目錄保存系統(tǒng)中 GPIO 寄存器的信息,包括每個(gè)寄存器控制引腳的起始編號(hào) base,寄存器名稱,引腳總數(shù)

計(jì)算引腳編號(hào)

引腳編號(hào) = 控制引腳的寄存器基數(shù) + 控制引腳寄存器位數(shù)

舉個(gè)栗子(具體 GPIO 需要參考數(shù)據(jù)手冊(cè)),如果使想用 GPIO1_20,那么引腳編號(hào)就可能等于 1 x 32 + 20 = 54

我們操作在 樹莓派2B 下,其中 寄存器基數(shù)為 0 ,所以引腳編號(hào)=引腳寄存器位數(shù);記操作幾號(hào),引腳號(hào)即為幾。

什么是GPIO操作原理

導(dǎo)出引腳

向文件 /sys/class/gpio/export 寫入引腳編號(hào),即可激活引腳。

echo 18 > /sys/class/gpio/export

命令執(zhí)行成功后,目錄下,便會(huì)出現(xiàn) gpio18 文件夾,如果沒有出現(xiàn),則表示引腳不可導(dǎo)出。

控制方向

引腳導(dǎo)出成功后,即可通過寫入 /sys/class/gpio/gpio18/direction 控制引腳 [輸入] 或 [輸出]。

# cd gpio18
# echo "out" > direction

命令無報(bào)錯(cuò),即為操作成功;可輸入值有以下幾種:

in		引腳輸入信號(hào)
out		輸出控制到引腳
high 	輸出一個(gè)高電平(`value`:`1`)
low 	輸出一個(gè)低電平(`value`:`0`)

輸入輸出值

輸入輸出的值,通過 gpioX 下的 value 文件控制

當(dāng)為輸入時(shí),請(qǐng) echo /sys/class/gpio/gpio18/value 讀出值;
當(dāng)為輸出時(shí),請(qǐng) echo 1 > /sys/class/gpio/gpio18/value 輸入值;

這里 value 的值對(duì)應(yīng)著,上面的 highlow 時(shí)的 1 / 0

取消引腳導(dǎo)出

當(dāng)控制完成時(shí),需要釋放掉端口的控制,此時(shí)如導(dǎo)出引腳時(shí)一樣,將引腳編號(hào)輸出到 /sys/class/gpio/unexport 即可。

echo 18 > /sys/class/gpio/unexport

什么是GPIO操作原理

SHELL 控制

上面的講解中,即時(shí)通過 shell 的方式控制 GPIO,這里將所有的命令集合下:

# 進(jìn)入GPIO目錄
cd /sys/class/gpio
# 使用ls查看gpio目錄中的內(nèi)容
ls
# export gpiochip0 unexport
# GPIO操作接口從內(nèi)核空間暴露到用戶空間
# 執(zhí)行該操作之后,該目錄下會(huì)增加一個(gè)gpio18文件目錄
echo 18 > export
# 進(jìn)入GPIO18目錄,該目錄由上一步操作產(chǎn)生
cd gpio18
#   查看gpio18目錄
ls 
#   active_low direction edge power subsystem uevent value
# 設(shè)置GPIO18為輸出方向
echo out > direction
# 輸出邏輯高電平,LED點(diǎn)亮
echo 1 > value
# 輸出邏輯低電平,LED熄滅
echo 0 > value
# 返回上級(jí)目錄
cd ../
# 釋放GPIO4接口
echo 18 > unexport

關(guān)于什么是GPIO操作原理就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI