佛山微網(wǎng)站建設(shè) 天博廣東省疫情最新
RK3568-GPIO控制
1. Sysfs接口
實(shí)現(xiàn)邏輯
芯片的GPIO由芯片的GPIO控制器來管理,GPIO控制器封裝在芯片內(nèi)部,控制器的驅(qū)動芯片廠家已經(jīng)寫好了。RK3568有五組GPIO控制器,每組管理32個引腳,對應(yīng)/dev
下的gpiochip0~4
的設(shè)備節(jié)點(diǎn)。
Linux系統(tǒng)本身就含有GPIO子系統(tǒng)模塊,它對下接入GPIO控制器的驅(qū)動,對上提供一組API接口給其它驅(qū)動調(diào)用來管理GPIO控制器。
Sysfs-GPIO通過對GPIO子系統(tǒng)的API的調(diào)用實(shí)現(xiàn)了一套對用戶空間的接口,相當(dāng)于這是linux官方實(shí)現(xiàn)的一個通用GPIO驅(qū)動。
使用方法
- 使用時需要打開內(nèi)核編譯選項:Device Drivers-> GPIO Support ->/sys/class/gpio/… (sysfs interface)
- 導(dǎo)出GPIO引腳,
echo <GPIO編號> > /sys/class/gpio/export
- 設(shè)置GPIO方向,
echo <out/in> > /sys/class/gpio/gpiox/direction
- 讀寫GPIO值,
echo <1/0> > /sys/class/gpio/gpiox/value
// pin = bank*32 + group*8 + X
// 導(dǎo)出引腳GPIO2_D1, pin = 2*32+3*8+1=89
echo 89 > /sys/class/gpio/export//配置引腳為輸出
echo out/in > /sys/class/gpio/gpio89/direction//寫高電平
echo 1 > /sys/class/gpio/gpio89/value//讀狀態(tài)
cat /sys/class/gpio/gpio89/value//取消導(dǎo)出
echo 89 > /sys/class/gpio/unexport
2. Libgpiod接口
Libgpiod和Sysfs-GPIO的功能是一樣的,它是Sysfs-GPIO的改進(jìn)版。自Linux 4.8起,Sysfs-GPIO接口已被棄用,內(nèi)核采用libgpiod為用戶空間提供接口。之前的版本需要下載安裝Libgpiod庫才能使用。
參考:https://blog.csdn.net/DRAXY/article/details/125862761
3. 自己寫驅(qū)動
按照字符設(shè)備驅(qū)動框架,調(diào)用GPIO子系統(tǒng)提供的接口,來實(shí)現(xiàn)某些引腳的驅(qū)動。
參考:https://blog.csdn.net/taye_year/article/details/126212692