在網上看到了很多的/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
... ...