GPIO控制

GPIO是General Purpose I/O的縮寫,即通用輸入輸出端口,簡單來說就是MCU/CPU可控制的引腳, 這些引腳通常有多種功能,最基本的是高低電平輸入檢測和輸出,部分引腳還會與主控器的片上外設綁定, 如作為串口、I2C、網絡、電壓檢測的通訊引腳。

Linux提供了GPIO子系統驅動框架,使用該驅動框架即可靈活地控制板子上的GPIO。

2.1.?GPIO命名

Rockchip Pin的ID按照 控制器(bank)+端口(port)+索引序號(pin) 組成。

  • 控制器和GPIO控制器數量?致

  • 端口固定 A、B、C和D,每個端口僅有8個索引號,(a=0,b=1,c=2,d=3)

  • 索引序號固定 0、1、2、3、4、5、6、7

rk3588具有5個GPIO控制器,每個控制器可以控制32個IO,作為GPIO功能時,端口?為由GPIO控制器寄存器配置。

GPIO1_C4表達的意思為第1組控制器,端口號為C,索引號為4。該引腳號的計算公式為32 x 1 + 2 x 8 + 4 = 52

部分板卡除了主控芯片原生IO,也有使用i2c擴展gpio,例如魯班貓5,使用兩顆XL9535芯片,每個擴展芯片可以擴展16路gpio,使用與原生gpio無異。

2.2.?使用GPIO sysfs接口控制IO

在Linux中,最常見的讀寫GPIO方式就是用GPIO sysfs interface, 是通過操作?/sys/class/gpio?目錄下的?export?、?unexport?、gpio{N}/direction,?gpio{N} /value?(用實際引腳號替代{N})等文件實現的,經常出現shell腳本里面。 在kernel 4.8開始,加入了libgpiod的支持;而原有基于sysfs的訪問方式,將被逐漸放棄。

GPIO舉例計算

引腳

控制器

端口號

索引號

計算結果

GPIO1_C4

1

C

4

52 (32 x 1 + 8 x 2 + 4)

GPIO3_B2

3

B

2

106 (32 x 3 + 8 x 1 + 2)

GPIO0_D6

0

D

6

30 (32 x 0 + 8 x 3 + 6)

 123456789
10
11
12
13
14
15
16
17
18
#以下所有操作均需要打開管理者權限使用
#使能引腳GPIO1_C4
echo 52 > /sys/class/gpio/export#設置引腳為輸入模式
echo in > /sys/class/gpio/gpio52/direction
#讀取引腳的值
cat /sys/class/gpio/gpio52/value#設置引腳為輸出模式
echo out > /sys/class/gpio/gpio52/direction
#設置引腳為低電平
echo 0 > /sys/class/gpio/gpio52/value
#設置引腳為高電平
echo 1 > /sys/class/gpio/gpio52/value#復位引腳
echo 52 > /sys/class/gpio/unexport

2.3.?使用libgpiod控制IO

libgpiod是一種字符設備接口,GPIO訪問控制是通過操作字符設備文件(比如?/dev/gpiodchip0?)實現的, 并通過libgpiod提供一些命令工具、c庫以及python封裝。

1
2
#安裝gpiod 命令行工具
sudo apt install gpiod
  • gpiod工具的使用方法與sysfs接口的不同,gpiod是以控制器為單位,然后再詳細到端口號和索引號,即gpiod使用兩個數據確定引腳

GPIO舉例計算

引腳

控制器

端口號

索引號

gpiod的使用結果

GPIO1_C4

1

C

4

1 20(8 x 2 + 4)

GPIO3_B2

3

B

2

3 10(8 x 1 + 2)

GPIO0_D6

0

D

6

0 30(8 x 3 + 6)

常用的命令行如下,可使用?-h?查看命令相對應的使用說明(以GPIO1_C4為例)

libgpiod命令

命令

作用

使用舉例

說明

gpiodetect

列出所有的GPIO控制器

gpiodetect(無參數)

列出所有的GPIO控制器

gpioinfo

列出gpio控制器的引腳情況

gpioinfo 1

列出第一組控制器引腳組情況

gpioset

設置gpio

gpioset 1 20=0

設置第一組控制器編號20引腳為低電平

gpioget

獲取gpio引腳狀態

gpioget 1 20

獲取第一組控制器編號20的引腳狀態

gpiomon

監控gpio的狀態

gpiomon 1 20

監控第一組控制器編號20的引腳狀態

重要

Rockchip Pin的ID按照 控制器(bank)+端口(port)+索引序號(pin) 組成。其中端口號和索引號會合并成一個數值傳入到gpiod里去 并不是所有的引腳都能夠使用libgpiod控制,例如led之類的一些已經被使用的引腳。當使用這些被定義的引腳就會出現,設備繁忙,進而無法使用

2.4.?FAQs

Q1:當使用GPIO時出現?gpioset:?error?setting?the?GPIO?line?values:?Device?or?resource?busy?或者?-bash:?echo:?寫錯誤:?設備或資源忙

A1:說明GPIO被占用了,占用的原因可能是設備樹里把該引腳作為gpio或者其他復用功能被使用了。

Next??Previous

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82644.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82644.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82644.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 部署Nexus倉庫 搭建Maven私服倉庫 公司內部倉庫

介紹 Nexus 是廣泛使用的倉庫管理工具,常用于管理 Java 構件(如 JAR、WAR、EAR 文件)。它可以作為一個本地的 Maven 倉庫,用來存儲和管理項目的依賴包和構建產物。支持多種倉庫類型,能夠幫助開發團隊更高效地管理構件…

Android 13 默認打開 使用屏幕鍵盤

原生設置里,系統-語言和輸入法-實體鍵盤-使用屏幕鍵盤 選項, 關閉時,外接物理鍵盤,如USB鍵盤,輸入時不會彈出軟鍵盤。 打開時,外接物理鍵盤,如USB鍵盤,輸入時會彈出軟鍵盤。 這個選…

關于ubuntu下交叉編譯arrch64下的gtsam報錯問題,boost中boost_regex.so中連接libicui18n.so.55報錯的問題

交叉編譯gtsam時遇到的報錯信息如下:gtsam需要連接boost, 解決辦法: 1.重新編譯boost可解決。 2.自己搞定生成一個libicui18n.so.55。 由于我們的boost是公用的,因此1不太可能(我試過重新編譯完boost,在編譯gtsam完…

android-ndk開發(9): undefined reference to `__aarch64_ldadd4_acq_rel` 報錯分析

1. 概要 基礎庫 libbase.a 基于 android ndk r18b 編譯, 被算法庫 libfoo.so 和算法庫 libbar.a 依賴, 算法庫則分別被 libapp1.so 和 libapp2.so 依賴。 libapp1.so 的開發者向 libfoo.so 的開發者反饋了鏈接報錯: error: undefined symb…

如何清除windows 遠程桌面連接的IP記錄

問題 在遠程桌面連接后,會在輸入列表留下歷史IP記錄,無用的IP多了會影響我們查找效率,也不安全。 現介紹如何手動刪除這些IP記錄。 解決方案 1、打開注冊表 按 Win R,輸入 regedit,回車定位到遠程桌面記錄的注冊表…

使用 React Native實現鴻蒙開發的詳細方案

一、環境準備 1. 基礎環境要求 操作系統:Windows 10/11 或 macOS (建議版本最新)Node.js: v16.x 或更高版本npm: v8.x 或更高版本Java JDK: 11 或更高版本DevEco Studio: 3.1 或更高版本 (鴻蒙官方IDE)2. 安裝 DevEco Studio 從華為開發者官網下載安裝時選擇以下組件: Harmo…

貪心算法應用:頂點覆蓋問題詳解

貪心算法應用:頂點覆蓋問題詳解 貪心算法是解決頂點覆蓋問題的經典方法之一。下面我將從基礎概念到高級優化,全面詳細地講解頂點覆蓋問題及其貪心算法解決方案。 一、頂點覆蓋問題基礎 1. 問題定義 頂點覆蓋問題(Vertex Cover Problem&am…

Excel安全防護:開源批量加密工具推薦與使用指南

先放下載鏈接:https://tool.nineya.com/s/1iqsn2sh0 在日常辦公里,像財務數據、客戶信息、項目報表這類核心資料,常常是以 Excel 文件的形式來存儲的。要是手動一個一個地給這些文件加密,那可太費時間和精力了,而且還…

【C++】學習、項目時Debug總結

這里寫目錄標題 1. 內存問題1.1. 內存泄漏1.1.1. 內存泄漏案例檢查方法1.1.2. 主線程提前退出導致【控】1.1.3. PostThreadMessage失敗導致的內存泄漏**【控】**1.1.4. SendMessage 時關閉客戶端【控】1.1.5. 線程機制導致【**控】**1.1.6. exit(0)導致【…

2025 后端自學UNIAPP【項目實戰:旅游項目】1、創建項目框架

1、創建項目 ①項目名稱:自定義,【我是travel】 ②vue版本:vue3 ③其他默認,最后創建 2、創建頁面 ①展開自己剛才創建的項目 ②單擊選中pages文件夾 --->鼠標右鍵---->新建頁面 ③頁面名稱:自定義favouri…

WPF 子界面修改后通知到主頁面

子頁面: public partial class MyPopupWindow : Window { public event Action OnClose; private void CloseWindowButton_Click(object sender, RoutedEventArgs e) { OnClose?.Invoke(); this.Close(); } } 主界面&#xff1a…

Python中的標識、相等性與別名:深入理解對象引用機制

在Python編程中,理解變量如何引用對象以及對象之間的比較方式是至關重要的基礎概念。本文將通過Lewis Carroll的筆名示例,深入探討Python中的對象標識、相等性判斷以及別名機制。 別名現象:變量共享同一對象 >>> charles {name: …

python 閉包獲取循環數據經典 bug

問題代碼 def create_functions():functions []for i in range(3):# 創建一個函數,期望捕獲當前循環的i值functions.append(lambda: print(f"My value is: {i}"))return functions# 創建三個函數 f0, f1, f2 create_functions()# 調用這些函數 f0() # 期望輸出 &…

克里金模型+多目標優化+多屬性決策!Kriging+NSGAII+熵權TOPSIS!

目錄 效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 克里金模型多目標優化多屬性決策!KrigingNSGAII熵權TOPSIS!!matlab2023b語言運行! 1.克里金模型(Kriging Model)是一種基于空間統計學的插值方法…

Prompt Engineering 提示詞工程學習

一、Prompt Engineering 簡介 Prompt Engineering 是設計和優化輸入提示(Prompt)以獲得預期輸出的過程。在與大型語言模型(如 GPT-4)交互時,如何構造提示會顯著影響模型的回答質量。 二、Prompt 的重要性 提高生成準確性:通過正確的 Prompt 引導,模型能夠更好地理解用…

MATLAB安裝常見問題及解決方案詳解(含代碼示例)

MATLAB作為科學計算和工程分析的核心工具,其安裝過程可能因操作系統版本、硬件配置或網絡環境等因素而出現各種問題。本文基于MATLAB官方文檔和社區經驗,系統總結了安裝過程中常見的問題,并提供詳細的解決方案和代碼示例,幫助用戶…

免安裝 + 快速響應Photoshop CS6 精簡版低配置電腦修圖

各位PS小白和修圖大神們,今天來給大家聊聊Photoshop CS6精簡版這個寶藏軟件! Photoshop CS6精簡版就是Adobe Photoshop CS6的“瘦身版”,它把一些不常用的功能給簡化了,只留下核心工具,特別適合那些想高效操作、節省系…

微服務架構實戰:從服務拆分到RestTemplate遠程調用

微服務架構實戰:從服務拆分到RestTemplate遠程調用 一 . 服務拆分1.1 服務拆分注意事項1.2 導入服務拆分 Demo1.3 小結 二 . 服務間調用2.1 注冊 RestTemplate2.2 實現遠程調用2.3 小結 三 . 提供方和消費方 在分布式系統設計中,微服務架構因其靈活性、可…

MySQL 索引與事務詳解

目錄 一、索引(Index) 二、事務(Transaction) 三、總結 一、索引(Index) 索引的本質:一種數據結構(如 BTree、Hash),用于快速定位數據,避免全…

macOS Python 環境配置指南

1. 檢查現有 Python 環境 python3 --version # 檢查 Python 3 版本 pip3 --version # 檢查 pip 版本 2. 安裝 pyenv(Python 版本管理工具) # 使用 Homebrew 安裝 pyenvbrew install pyenv# 配置 pyenv 環境變量(添加到 ~/.zshrc&#…