linux下對/sys/class/gpio中的gpio的編號確定


  在網上看到了很多的/sys/class/gpio中的控制,大部分都是抄的,特別是關於GPIO編號的確認,很多基本沒有幾個說得明白。

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

  但如何確定控制引腳的寄存器基數和控制引腳寄存器位數?

  1. 首先進入gpio目錄,並查看文件

# cd /sys/class/gpio/
# ls

  文件下有若干個 gpiochipX 文件夾,X代表數字。gpiochipX目錄保存系統中GPIO寄存器的信息,包括每個寄存器控制引腳的起始編號

  2. 查看每個gpiochipX目錄中的信息

# for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done

  對於不同的Linux系統打印出的結果會有所不同。

  1)最方便的情況

  打印出的結果標識了所有控制引腳的寄存器基數,那么引腳編號就直接計算,如:

GPIOA: 0
GPIOE: 128
GPIOF: 160
GPIOG: 192
GPIOH: 224
GPIOB: 32
GPIOC: 64
GPIOD: 96

則GPIOF_8的編號 = 160 + 8 =168

有些系統顯示的有GPIO的絕對地址,那么就需要查找數據手冊看地址對應的GPIO了

  2)普遍情況

  對於GPIOx_y的編號 = 控制引腳的寄存器基數(32 * x)+ 控制引腳寄存器位數(y)=32*x+y

  若x為字母,則x=x-'A'.

  3)無法直觀確認時

  查找開發板的數據手冊。

  例如CQR40平台開發手冊中寫明端口組號為:

  PA_BASE 0

  PB_BASE 32

  PC_BASE 64

  PD_BASE 96

  ... ...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM