2013-01-04 13:40
14593人閱讀 收藏舉報
分類:
在嵌入式設備中對GPIO的操作是最基本的操作。一般的做法是寫一個單獨驅動程序,網上大多數的例子都是這樣的。其實Linux下面有一個通用的GPIO操作接口,那就是我要介紹的
“/sys/class/gpio” 方式。
首先,看看系統中有沒有“/sys/class/gpio”這個文件夾。如果沒有請在編譯內核的時候加入 Device Drivers —> GPIO Support —> /sys/class/gpio/… (sysfs interface)。
/sys/class/gpio 的使用說明:
01 |
gpio_operation
通過/sys/文件接口操作IO端口 GPIO到文件系統的映射 |
02 |
*
控制GPIO的目錄位於/sys/ class /gpio |
03 |
*
/sys/ class /gpio/export文件用於通知系統需要導出控制的GPIO引腳編號 |
04 |
*
/sys/ class /gpio/unexport
用於通知系統取消導出 |
05 |
*
/sys/ class /gpio/gpiochipX目錄保存系統中GPIO寄存器的信息,包括每個寄存器控制引腳的起始編號base,寄存器名稱,引腳總數
導出一個引腳的操作步驟 |
06 |
*
首先計算此引腳編號,引腳編號 = 控制引腳的寄存器基數 + 控制引腳寄存器位數 |
07 |
*
向/sys/ class /gpio/export寫入此編號,比如12號引腳,在shell中可以通過以下命令實現,命令成功後生成/sys/ class /gpio/gpio12目錄,如果沒有出現相應的目錄,說明此引腳不可導出: |
08 |
echo
12 > /sys/ class /gpio/export |
09 |
*
direction文件,定義輸入輸入方向,可以通過下面命令定義爲輸出 |
10 |
echo
out > direction |
11 |
*
direction接受的參數:in, out, high, low。high/low同時設置方向爲輸出,並將value設置爲相應的1/0。 |
下面在2440下進行一下測試
1.取得GPIO信息,在終端中敲入以下命令
2 |
$ for i
in gpiochip* ; do echo
`cat $i/label`: `cat $i/base` ; done |
終端中顯示如下
高通平臺顯示:
rdbg: 294
rdbg: 326
rdbg: 358
rdbg: 390
master-kernel: 422
slave-kernel: 454
master-kernel: 486
slave-kernel: 518
master-kernel: 550
slave-kernel: 582
smp2p: 614
smp2p: 646
smp2p: 678
smp2p: 710
smp2p: 742
smp2p: 774
smp2p: 806
smp2p: 838
pm8004-mpp: 870
pm8950-gpio: 874
pm8950-mpp: 877
msm_tlmm_gpio: 879
2.計算GPIO號碼
我們把GPE11用來控制LED。
GPE0的頭是128,GPE11 就是128+11 = 139.
高通平臺:
msm_tlmm_gpio: 879
顯示gpio是從879 開始的,
如果要控制gpio_64 : 879+64
echo 943 > /sys/class/gpio/export
1 |
$
echo 139 >; /sys/ class /gpio/export
|
ls 一下看看有沒有 gpio139 這個目錄
3.GPIO控制測試。
控制LED所以是輸出。
所以我們應該執行
1 |
$
echo out > /sys/ class /gpio/gpio139/direction |
之後就可以進行輸出設置了。
1 |
$
echo 1 > /sys/ class /gpio/gpio139/value |
or
1 |
$
echo 0 > /sys/ class /gpio/gpio139/value
|