chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式新手必看!GPIO調(diào)試從0到1:計(jì)算、操作、排錯(cuò)全指南

jf_44130326 ? 來(lái)源:Linux1024 ? 2026-02-01 16:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開(kāi)發(fā)中,GPIO(通用輸入輸出口)是最基礎(chǔ)也最常用的硬件接口——小到控制一顆LED亮滅、讀取一個(gè)按鍵狀態(tài),大到驅(qū)動(dòng)傳感器、控制外設(shè),都離不開(kāi)GPIO。但對(duì)新手來(lái)說(shuō),怎么確定GPIO的編號(hào)?”“怎么手動(dòng)控制GPIO電平?”“為什么GPIO用不了?這些問(wèn)題常常讓人頭疼。

今天就從GPIO編號(hào)計(jì)算、用戶(hù)空間手動(dòng)控制、占用沖突排查三個(gè)核心環(huán)節(jié),手把手教新手搞定GPIO調(diào)試,全程結(jié)合Rockchip平臺(tái)實(shí)操案例(其他平臺(tái)邏輯通用),看完就能上手!

wKgZO2kancKAGuDqAAAd-4ZyqhQ457.png

一、先搞懂:GPIO編號(hào)規(guī)則是啥?

嵌入式芯片的GPIO通常按“Bank(組)→ Group(子組)Pin(引腳)分層管理,比如常見(jiàn)的“GPIO1_D0”,每個(gè)部分都對(duì)應(yīng)具體的數(shù)值,我們需要通過(guò)固定公式計(jì)算出內(nèi)核識(shí)別的GPIO編號(hào)(比如56、125),才能后續(xù)操作。

先明確三個(gè)關(guān)鍵概念(以Rockchip芯片為例):

?Bank(主組):芯片會(huì)把GPIO分成多個(gè)Bank(如GPIO0GPIO1、、GPIO4),每個(gè)Bank包含32個(gè)引腳(固定),編號(hào)范圍[0,4]。

?Group(子組):每個(gè)Bank又分成4個(gè)Group,對(duì)應(yīng)字母A/B/C/D,分別對(duì)應(yīng)編號(hào)0/1/2/3(比如A=0,B=1C=2,D=3),每個(gè)Group包含8個(gè)引腳(固定)。

?X(子組內(nèi)引腳號(hào)):每個(gè)Group里的8個(gè)引腳,編號(hào)[0,7](比如D0對(duì)應(yīng)0,D1對(duì)應(yīng)1,D7對(duì)應(yīng)7)。

核心公式:計(jì)算GPIO編號(hào)

已知某個(gè)GPIO“Bank+Group+X”,就能算出內(nèi)核識(shí)別的唯一編號(hào),公式分兩步:

1.計(jì)算Group內(nèi)偏移量number = Group × 8 + X(因每個(gè)Group8個(gè)Pin);

2.計(jì)算最終GPIO編號(hào)pin = Bank × 32 + number(因每個(gè)Bank32個(gè)Pin)。

實(shí)操案例:GPIO1_D0怎么算?

以開(kāi)頭提到的“GPIO1_D0”為例,一步步拆解

1.拆分參數(shù):

?Bank = 1GPIO1 →主組編號(hào)1);

?Group = 3D對(duì)應(yīng)Group 3,A=0/B=1/C=2/D=3);

?X = 0D0 →子組內(nèi)第0個(gè)Pin)。

1.計(jì)算Group內(nèi)偏移量:number = 3 × 8 + 0 = 24;

2.計(jì)算最終GPIO編號(hào):pin = 1 × 32 + 24 = 56。

??結(jié)論:GPIO1_D0對(duì)應(yīng)的內(nèi)核編號(hào)是56,后續(xù)操作都要用這個(gè)“56”來(lái)指定引腳。

新手注意:別踩這2個(gè)計(jì)算坑!

?1Group對(duì)應(yīng)錯(cuò)誤(A=0不是1)!比如GPIO1_A1,Group0不是1,否則會(huì)算錯(cuò)編號(hào);

?2Bank編號(hào)從0開(kāi)始!比如GPIO0_C3,Bank0,不是1,每個(gè)Bank固定32個(gè)Pin,別多算或少算。

二、實(shí)操:用sysfs手動(dòng)控制GPIO

Linux內(nèi)核提供了sysfs文件系統(tǒng)接口,新手不需要寫(xiě)驅(qū)動(dòng),直接通過(guò)echo/cat指令就能控制GPIO,步驟超簡(jiǎn)單!核心路徑是/sys/class/gpio/,所有操作都圍繞這個(gè)目錄下的文件展開(kāi)。

前提:確認(rèn)sysfs GPIO已啟用

先檢查系統(tǒng)是否支持sysfs GPIO(大部分嵌入式Linux/Android系統(tǒng)默認(rèn)開(kāi)啟):

#查看sysfs GPIO目錄是否存在

ls /sys/class/gpio/

若能看到exportunexport、gpiochip0等文件/目錄,說(shuō)明支持;若沒(méi)有,需重新編譯內(nèi)核,開(kāi)啟CONFIG_GPIO_SYSFS選項(xiàng)。

步驟1:導(dǎo)出GPIO(告訴內(nèi)核我要操作這個(gè)Pin”

導(dǎo)出是讓內(nèi)核把指定編號(hào)的GPIO暴露到sysfs中,生成對(duì)應(yīng)的控制目錄。比如要操作編號(hào)125GPIO

#導(dǎo)出GPIO125echo編號(hào)> export

echo 125 > /sys/class/gpio/export

?成功:會(huì)在/sys/class/gpio/下生成gpio125目錄,里面包含direction(方向)、value(電平)等文件;

?失?。▓?bào)錯(cuò)“Device or resource busy”):說(shuō)明這個(gè)GPIO已被其他驅(qū)動(dòng)占用(后面會(huì)講怎么排查)。

步驟2:設(shè)置GPIO方向(輸入/輸出)

GPIO有兩種工作模式:輸入(in輸出(out,需先指定方向:

# 1.設(shè)置為輸出模式(echo out > gpioXXX/direction

echo out > /sys/class/gpio/gpio125/direction

# 2.若需要設(shè)置為輸入模式(比如讀按鍵)

# echo in > /sys/class/gpio/gpio125/direction

?驗(yàn)證方向:cat /sys/class/gpio/gpio125/direction,會(huì)輸出outin

步驟3:控制GPIO電平(輸出模式)/讀取電平(輸入模式)

情況1:輸出模式(比如控制LED

GPIO電平只有兩種:高電平(1低電平(0,通過(guò)value文件控制:

# 1.設(shè)置為高電平(echo 1 > value

echo 1 > /sys/class/gpio/gpio125/value

# 2.設(shè)置為低電平(echo 0 > value

echo 0 > /sys/class/gpio/gpio125/value

?驗(yàn)證電平:cat /sys/class/gpio/gpio125/value,會(huì)輸出10。

情況2:輸入模式(比如讀按鍵)

GPIO接了按鍵(一端接GPIO,一端接地),設(shè)置為輸入后,直接讀value即可:

#讀取GPIO輸入電平(按下按鍵可能為0,松開(kāi)為1,取決于硬件電路)

cat /sys/class/gpio/gpio125/value

步驟4:釋放GPIO(不用時(shí)清理)

操作完成后,建議釋放” GPIO,避免占用資源:

#釋放GPIO125echo編號(hào)> unexport

echo 125 > /sys/class/gpio/unexport

釋放后,/sys/class/gpio/gpio125目錄會(huì)被刪除。

三、關(guān)鍵:查看GPIO占用與復(fù)用(排錯(cuò)核心)

新手最常遇到的問(wèn)題:導(dǎo)出GPIO時(shí)提示忙(busy”“設(shè)置電平?jīng)]反應(yīng),本質(zhì)是GPIO被占用——可能被其他驅(qū)動(dòng)(如UART、SPI、I2C)復(fù)用,或已被其他進(jìn)程導(dǎo)出。

下面兩個(gè)debug命令,能幫你快速定位問(wèn)題!

1.debug/gpio查看GPIO占用狀態(tài)

內(nèi)核提供了/sys/kernel/debug/gpio文件,能直觀看到所有GPIO是否占用、方向、電平

#查看GPIO整體狀態(tài)

cat /sys/kernel/debug/gpio

輸出解讀(重點(diǎn)看這幾列):

GPIOs 32-63, platform/pinctrl, gpio1:

gpio-56 ( |gpio1-d0 ) out hi # GPIO56GPIO1_D0),輸出高電平,未被其他驅(qū)動(dòng)占用

gpio-57 ( |spi1_cs0 ) out lo # GPIO57SPI1_CS0驅(qū)動(dòng)占用(復(fù)用為SPI片選)

GPIOs 64-95, platform/pinctrl, gpio2:

gpio-125 ( |export ) out hi # GPIO125已被export(我們手動(dòng)導(dǎo)出的),輸出高電平

關(guān)鍵信息提?。?/span>

?若某GPIO后面跟著“|xxx”(如|spi1_cs0):說(shuō)明被xxx驅(qū)動(dòng)復(fù)用,無(wú)法再作為普通GPIO使用;

?若某GPIO后面是“|export”:說(shuō)明已被手動(dòng)導(dǎo)出,需先unexport才能重新操作;

?out hi/out lo:輸出模式下的電平;in hi/in lo:輸入模式下的當(dāng)前電平。

2.pinmux-pins查看Pin腳復(fù)用詳情

如果想知道某個(gè)GPIO “還能復(fù)用成什么功能,或當(dāng)前復(fù)用功能是誰(shuí),需要看pinmux-pins文件(路徑因芯片不同略有差異,Rockchip平臺(tái)通常在/sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/下):

#查看Pin腳復(fù)用情況(Rockchip平臺(tái)示例路徑)

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

輸出解讀(重點(diǎn)看GPIO1_D0對(duì)應(yīng)的Pin):

Pin 56 (gpio1-d0): rockchip,pins@10000000 10000000.pinctrl:gpio1-d0 (GPIO function)

Pin 57 (gpio1-d1): rockchip,pins@10000000 10000000.pinctrl:spi1-cs0 (SPI1_CS0 function)

關(guān)鍵信息提取:

?Pin 56:對(duì)應(yīng)GPIO1_D0,當(dāng)前復(fù)用為“GPIO function”(普通GPIO功能),可用;

?Pin 57:對(duì)應(yīng)GPIO1_D1,當(dāng)前復(fù)用為“SPI1_CS0 function”SPI片選功能),不可作為普通GPIO;

?若想修改復(fù)用功能:需在設(shè)備樹(shù)(DTS)中修改對(duì)應(yīng)Pinpinmux配置,重新編譯設(shè)備樹(shù)。

四、新手常見(jiàn)問(wèn)題&解決方案

問(wèn)題現(xiàn)象

可能原因

解決方案

導(dǎo)出GPIO報(bào)錯(cuò)“Device or resource busy”

1. GPIO已被其他驅(qū)動(dòng)復(fù)用(如UART);2. GPIO已被其他進(jìn)程export

1.debug/gpio看是否有

設(shè)置電平后硬件沒(méi)反應(yīng)

1. GPIO編號(hào)算錯(cuò);2.方向設(shè)置錯(cuò)誤(輸入模式下無(wú)法改電平);3.硬件電路問(wèn)題(如LED正負(fù)極接反)

1.重新核對(duì)Bank/Group/X,計(jì)算編號(hào);2.確認(rèn)directionout;3.萬(wàn)用表測(cè)GPIO引腳電平,排除硬件問(wèn)題

輸入模式下讀不到正確電平

1.方向沒(méi)設(shè)為in;2.硬件沒(méi)上拉/下拉電阻(按鍵懸空時(shí)電平不穩(wěn)定)

1.重新設(shè)置directionin;2.在設(shè)備樹(shù)中開(kāi)啟GPIO的上拉/下拉(如bias-pull-up

找不到/sys/kernel/debug/gpio

內(nèi)核沒(méi)開(kāi)啟CONFIG_DEBUG_FS選項(xiàng)

重新編譯內(nèi)核,開(kāi)啟CONFIG_DEBUG_FS,并掛載debugfsmount -t debugfs debugfs /sys/kernel/debug

五、實(shí)戰(zhàn)案例:用GPIO控制一顆LED

光說(shuō)不練假把式,我們以控制GPIO1_D0(編號(hào)56)接的LED亮滅為例,走一遍完整流程:

1.硬件連接

?LED正極串聯(lián)1kΩ電阻→ GPIO1_D0Pin56);

?LED負(fù)極接地(GND)。

2.軟件操作(Linux系統(tǒng))

# 1.計(jì)算GPIO編號(hào):GPIO1_D0 → 56(前面已算過(guò))

# 2.導(dǎo)出GPIO56

echo 56 > /sys/class/gpio/export

# 3.設(shè)置為輸出模式

echo out > /sys/class/gpio/gpio56/direction

# 4.點(diǎn)亮LED(高電平,因LED正極接GPIO

echo 1 > /sys/class/gpio/gpio56/value

# 5. 5秒后熄滅LED

sleep 5

echo 0 > /sys/class/gpio/gpio56/value

# 6.釋放GPIO56

echo 56 > /sys/class/gpio/unexport

??效果:執(zhí)行指令后,LED先亮5秒,然后熄滅,完美!

六、總結(jié):GPIO調(diào)試核心流程

新手調(diào)試GPIO,記住先算編號(hào)再查占用后操作的三步法:

1.算編號(hào):根據(jù)“GPIOx_YY”拆分Bank/Group/X,用公式pin=Bank×32 + Group×8 + X計(jì)算;

2.查占用:用cat /sys/kernel/debug/gpio看是否被占用,用pinmux-pins看復(fù)用功能;

3.操作sysfs三步曲(export→設(shè)direction→value),不用時(shí)unexport。

GPIO是嵌入式開(kāi)發(fā)的敲門(mén)磚,只要掌握今天的方法,無(wú)論是控制LED、讀按鍵,還是后續(xù)調(diào)試傳感器,都能舉一反三。如果在實(shí)操中遇到問(wèn)題,歡迎在評(píng)論區(qū)留言,一起交流解決!



聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5196

    文章

    20316

    瀏覽量

    332184
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    626

    瀏覽量

    35496
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1325

    瀏覽量

    56009
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    新手怎么學(xué)嵌入式?

    操作系統(tǒng)示例。 學(xué)習(xí)嵌入式技術(shù)是一個(gè)充滿(mǎn)挑戰(zhàn)但又極具樂(lè)趣的過(guò)程。對(duì)于新手來(lái)說(shuō),只要有耐心和恒心,按照上述步驟逐步學(xué)習(xí),基礎(chǔ)知識(shí)編程語(yǔ)言
    發(fā)表于 12-12 10:51

    嵌入式入門(mén)進(jìn)階,怎么學(xué)?

    嵌入式入門(mén)進(jìn)階,怎么學(xué)? 嵌入式學(xué)習(xí)的核心是 “軟硬結(jié)合的技術(shù)壁壘”,科學(xué)分層才能高效突破。以下是入門(mén)
    發(fā)表于 09-02 09:44

    嵌入式學(xué)習(xí)指南--新手必看

    ,是需要進(jìn)行很多特殊設(shè)計(jì)的。但是本質(zhì)上講,嵌入式系統(tǒng)的核心概念還在計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)學(xué)習(xí)的重點(diǎn)也在計(jì)算機(jī)系統(tǒng)上。一方面,學(xué)習(xí)者需要牢固
    發(fā)表于 04-18 11:50

    嵌入式初學(xué)者學(xué)習(xí)嵌入式必看必看書(shū)籍

    嵌入式初學(xué)者學(xué)習(xí)嵌入式必看必看書(shū)籍列表,有電子檔的同學(xué)可以共享出來(lái),謝謝  Linux基礎(chǔ)   1、《Linux與Unix Shell 編程
    發(fā)表于 07-20 10:29

    嵌入式初學(xué)者學(xué)習(xí)嵌入式必看必看書(shū)籍列表,

    嵌入式初學(xué)者學(xué)習(xí)嵌入式必看必看書(shū)籍列表,有電子檔的同學(xué)可以共享出來(lái),謝謝  Linux基礎(chǔ)   1、《Linux與Unix Shell 編程
    發(fā)表于 12-12 09:49

    新手必看--嵌入式Linux學(xué)習(xí)步驟!

    ,World程序 使用 make命令編譯程序 編寫(xiě)帶有一個(gè)循環(huán)的程序 調(diào)試一個(gè)有問(wèn)題的程序4、嵌入式系統(tǒng)開(kāi)發(fā)基礎(chǔ)嵌入式系統(tǒng)概述 交叉編譯 配置TFTP服務(wù) 配置NFS服務(wù) 下載Bootloader和內(nèi)核
    發(fā)表于 05-30 09:16

    linux 入門(mén)新手必看

    Linux 嵌入式學(xué)習(xí)新手必看,國(guó)嵌培訓(xùn)中的原版教程
    發(fā)表于 07-21 08:23

    如何零基礎(chǔ)入門(mén)嵌入式的分享

    隨著社會(huì)的發(fā)展,物聯(lián)網(wǎng),嵌入式都相繼發(fā)展起來(lái),很多人都踩著這股潮流,爭(zhēng)相學(xué)習(xí)嵌入式,而對(duì)于新手來(lái)說(shuō),學(xué)習(xí)嵌入式可以說(shuō)是是比較困難的,但是也是有方法的,我這只老鳥(niǎo)就是
    發(fā)表于 12-17 07:55

    嵌入式系統(tǒng)的遠(yuǎn)程調(diào)試

      1 基本方法   圖1(a)是傳統(tǒng)的嵌入式調(diào)試方法:主機(jī)PC通過(guò)串口與機(jī)嵌入式系統(tǒng)相連,
    發(fā)表于 08-30 10:23 ?1273次閱讀
    <b class='flag-5'>嵌入式</b>系統(tǒng)的遠(yuǎn)程<b class='flag-5'>調(diào)試</b>

    嵌入式系統(tǒng)嵌入式操作系統(tǒng)

    嵌入式系統(tǒng) 是以 嵌入式 計(jì)算機(jī)為技術(shù)核心,面向用戶(hù)、面向產(chǎn)品、面向應(yīng)用,軟硬件可裁減的;適用于對(duì)功能、可靠性、成本、體積、功耗等綜合性能有嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。
    發(fā)表于 04-18 15:31 ?1041次閱讀

    嵌入式0部分:嵌入式工程師完全學(xué)習(xí)指南

    嵌入式0部分:前言-基礎(chǔ)預(yù)科0.1.嵌入式軟件工程師完全學(xué)習(xí)指南0.1.1課程大綱0.1.2為什么要學(xué)習(xí)嵌入式0.1.3什么人適合學(xué)習(xí)
    發(fā)表于 10-19 18:32 ?10次下載
    <b class='flag-5'>嵌入式</b>第<b class='flag-5'>0</b>部分:<b class='flag-5'>嵌入式</b>工程師完全學(xué)習(xí)<b class='flag-5'>指南</b>

    嵌入式初學(xué)者學(xué)習(xí)嵌入式必看必看書(shū)籍列表,有電子檔的同學(xué)可以共享出來(lái),謝謝 Linux基礎(chǔ) 1、《Linux與Unix Shell 編程指南》 2、《嵌入式Linux應(yīng)用程序開(kāi)發(fā)詳解》

    嵌入式初學(xué)者參考書(shū)目無(wú)論學(xué)習(xí)哪方面的編程,都需要掌握基礎(chǔ)知識(shí)和編程語(yǔ)言,其中《深入理解計(jì)算機(jī)操作系統(tǒng)》是比較重要的。下面是一些計(jì)算機(jī)關(guān)于嵌入式
    發(fā)表于 10-20 12:06 ?4次下載
    <b class='flag-5'>嵌入式</b>初學(xué)者學(xué)習(xí)<b class='flag-5'>嵌入式</b><b class='flag-5'>必看</b><b class='flag-5'>必看</b>書(shū)籍列表,有電子檔的同學(xué)可以共享出來(lái),謝謝  Linux基礎(chǔ)   <b class='flag-5'>1</b>、《Linux與Unix Shell 編程<b class='flag-5'>指南</b>》   2、《<b class='flag-5'>嵌入式</b>Linux應(yīng)用程序開(kāi)發(fā)詳解》

    嵌入式GPIO驅(qū)動(dòng)LED設(shè)計(jì)

    嵌入式GPIO驅(qū)動(dòng)LED設(shè)計(jì)1. 操作內(nèi)容2. 操作步驟2.1 編譯Linux內(nèi)核2.2 編譯LED驅(qū)動(dòng)2.3 運(yùn)行文件3.
    發(fā)表于 10-20 21:51 ?13次下載
    【<b class='flag-5'>嵌入式</b>】<b class='flag-5'>GPIO</b>驅(qū)動(dòng)LED設(shè)計(jì)

    聚徽智控——嵌入式邊緣計(jì)算:平板工控電腦的技術(shù)進(jìn)化論

    演進(jìn)、場(chǎng)景變革與生態(tài)重構(gòu)三個(gè)維度,解析平板工控電腦的技術(shù)進(jìn)化路徑。 一、技術(shù)演進(jìn):嵌入式邊緣計(jì)算的范式突破 1.
    的頭像 發(fā)表于 06-13 13:48 ?749次閱讀

    嵌入式入門(mén)必看!迅為RK3568?V2.0升級(jí),新手也能輕松玩轉(zhuǎn)

    嵌入式入門(mén)必看!迅為RK3568?V2.0升級(jí),新手也能輕松玩轉(zhuǎn)
    的頭像 發(fā)表于 10-28 13:26 ?360次閱讀
    <b class='flag-5'>嵌入式</b>入門(mén)<b class='flag-5'>必看</b>!迅為RK3568?V2.0升級(jí),<b class='flag-5'>新手</b>也能輕松玩轉(zhuǎn)