LinuxGPIO操作和MTK平台GPIO
GPIO口配置是一個(gè)歷史性的問(wèn)題,不管我們使用什么MCU,單片機(jī)也好,ARM也好,都離不開(kāi)驅(qū)動(dòng)GPIO口。Linux下有一個(gè)宏,GPIO_GPIO_SYSFS,打開(kāi)這個(gè)宏后,編譯燒錄到設(shè)備端,去看看sys/class/gpio/這個(gè)目錄。你會(huì)發(fā)現(xiàn)很多驚喜。
雖然是一個(gè)小知識(shí)點(diǎn),但是我覺(jué)得對(duì)做Linux和安卓驅(qū)動(dòng)開(kāi)發(fā)的同學(xué)非常有用,當(dāng)別人問(wèn)你怎么操作一個(gè)GPIO口的時(shí)候,你不妨直接把這個(gè)鏈接發(fā)給他。
#GPIO_GPIO_SYSFS打開(kāi)后,GPIO基本操作
導(dǎo)出 ? /sys/class/gpio# echo 12> export
設(shè)置方向 ? ? ?/sys/class/gpio/gpio12# echo out > direction
查看方向 ? ? ?/sys/class/gpio/gpio12# cat direction
設(shè)置輸出 ? ? ?/sys/class/gpio/gpio12# echo 1 > value
查看輸出值 ?/sys/class/gpio/gpio12# cat value
取消導(dǎo)出 ? ? /sys/class/gpio# echo 12> unexport
#MTK平臺(tái)提供節(jié)點(diǎn)給我們?cè)诿钚邢聦?duì)GPIO口進(jìn)行配置,節(jié)點(diǎn)如下
MTK的GPIO口有點(diǎn)奇怪,他需要一個(gè)excel表格來(lái)對(duì)比后才能知道GPIO口是哪個(gè)。
比如:
AB2對(duì)應(yīng)的是UART1的RX,對(duì)應(yīng)的GPIO口編號(hào)是64。這個(gè)EXCEL表格我就不給出來(lái)了,因?yàn)椴煌腃PU的GPIO口標(biāo)號(hào)也是有所不同。
#所有的GPIO口配置信息都能看到,其中每一位的含義如下
[MODE]:每個(gè)GPIO可以配置的模式可以參考這個(gè)頭文件kernel-4.4/arch/arm64/boot/dts/mediatek/mt8167-pinfunc.h
[DIR]:0=輸入;1=輸出
[DOUT]:作為輸出引腳的高低電平,0=低;1=高
[DIN]:輸入引腳的電平
[PULL_EN]:是指GPIO是否使能上拉或下拉,只有當(dāng)GPIO作為輸入模式時(shí)才生效
[PULL_SEL]:上面只設(shè)置了是否使能上拉或下拉,但并沒(méi)有指出到底是上拉還是下拉。0=下拉;1=上拉
[IES]:輸入使能,控制輸入是否有效。
[SMT]:是否使能斯密特觸發(fā)器
[DRIVE]:驅(qū)動(dòng)能力,一般可取值0~7
( [R1] [R0] ):
當(dāng)前GPIO pin的(上下拉)并聯(lián)電阻的使能狀態(tài)
1 0表示enable R1,disable R0 0 1表示disable R1,enable R0 1 1表示enable R1, enable R0不打印出來(lái),表示當(dāng)前的GPIO pin不支持PUPD狀況,即只有一個(gè)上拉電阻、一個(gè)下拉電阻。
#示例
一般作為GPIO模式的時(shí)候,可以這么調(diào)試:
echo mode 66 0 > mt_gpio /*設(shè)置66號(hào)位IO模式*/ echo dir 66 1 > mt_gpio /*設(shè)置66號(hào) io為輸出方向*/ echo out 66 1 > mt_gpio /*拉高66號(hào)io*/? 回復(fù)「?籃球的大肚子」進(jìn)入技術(shù)群聊
回復(fù)「1024」獲取1000G學(xué)習(xí)資料
總結(jié)
以上是生活随笔為你收集整理的LinuxGPIO操作和MTK平台GPIO的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 〖Python APP 自动化测试实战篇
- 下一篇: iperf3 linux源码下载