瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE圖形處理器。RK3568支持4K解碼和1080P編碼,支持SATA/PCIE/USB3.0外圍接口。RK3568內(nèi)置獨立NPU,可用于輕量級人工智能應用。RK3568支持安卓11和linux系統(tǒng),主要面向物聯(lián)網(wǎng)網(wǎng)關(guān)、NVR存儲、工控平板、工業(yè)檢測、工控盒、卡拉OK、云終端、車載中控等行業(yè)。

?
【本文摘自】【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)
【相關(guān)視頻】OpenHarmony學習開發(fā)系列教程(第1期 北向基礎(chǔ)篇一)
OpenHarmony學習開發(fā)系列教程(第2期 南向基礎(chǔ)篇一)
實戰(zhàn):第一篇OpenHarmony配置HDF驅(qū)動控制LED
第1章GPIO基礎(chǔ)知識
1.1什么是GPIO
GPIO意為通用輸入/輸出接口,GPIO端口可以配置為輸入或輸出狀態(tài),用于產(chǎn)生或讀取高低電平信號。其高低電平的數(shù)量、波形組合及變化方式?jīng)]有任何協(xié)議限制,用戶可以根據(jù)需求自由設定。GPIO廣泛應用于驅(qū)動簡單外設,如LED、按鍵、開關(guān)等,不需要復雜的協(xié)議支持。
與GPIO不同,專用IO端口通常是為特定通信協(xié)議設計的,具有更嚴格的協(xié)議要求。它們的高低電平數(shù)量、波形組合以及波形的持續(xù)時間必須嚴格遵循相應協(xié)議的規(guī)范。常見的專用IO協(xié)議包括I2C、SPI、UART和PWM等。這些接口通常用于數(shù)據(jù)傳輸或信號控制,如在傳感器、顯示模塊、通信設備等應用中,要求精確的時序和信號格式。
芯片通常需要提供豐富的功能和外部接口,以滿足各種應用需求。然而,由于芯片的管腳(pin)數(shù)量有限,為了最大化資源的利用,許多IO管腳支持多功能設計,并通過軟件配置實現(xiàn)管腳的分時復用。也就是說,同一個管腳可以根據(jù)需求在不同的功能模式之間切換。需要注意的是,并非所有IO管腳都可以用作GPIO。某些管腳被專門設計用于支持特定的專用接口(例如用于連接外部存儲芯片或通信模塊),這些管腳的功能是固定的,無法配置為GPIO。而另一些管腳則可以自由配置為GPIO,供用戶根據(jù)實際需求靈活使用。
1.2 GPIO引腳計算
為了更高效地管理數(shù)量眾多的GPIO,通常會將GPIO管腳按照一定規(guī)則進行分組管理。每個GPIO管腳都會被分配一個組號和組內(nèi)偏移(offset)值,后者表示該管腳在所在組中的位置。通過這種分組方式,可以簡化GPIO的訪問和配置。
不同的芯片,其GPIO的分組數(shù)量和每組內(nèi)包含的管腳數(shù)量可能有所不同。這些設計差異通常取決于芯片的架構(gòu)和應用需求。例如,在RK3568芯片中有5組GPIO bank:GPIO0~GPIO4,每組又以A0~A7, B0~B7, C0~C7, D0~D7作為編號區(qū)分,常用以下公式計算引腳:
GPIO pin腳計算公式:pin = bank * 32 + number //bank為組號,number為小組編號
GPIO小組編號計算公式:number = group * 8 + X
引腳編號=控制寄存器的寄存器基數(shù)+控制引腳寄存器位數(shù)。 在rk3568中,GPIO_number的計算方法為:n*32 + (K-A)*8 + x;括號里面的A、B、C、D分別代表數(shù)值0、1、2、3, 在計算時候分別對應即可。
下面演示LED9用戶LED燈的GPIO0_PB7 pin腳計算方法:
bank = 0; //GPIO0_B7=> 0, bank∈[0,4]
group = 1; //GPIO0_B7 => 1, group∈{(A=0), (B=1), (C=2), (D=3)}
X = 7; //GPIO4_D7 => 5, X∈[0,7]
number = group * 8 + X = 1 * 8 + 7 =15
pin = bank*32 + number= 0 * 32 + 15 = 15;
1.3 GPIO用戶態(tài)測試
sysfs控制接口為/sys/class/gpio/export和/sys/class/gpio/unexport。如下圖所示:

?
/sys/class/gpio/export用于將GPIO控制從內(nèi)核空間導出到用戶空間。/sys/class/gpio/unexport用于取消GPIO控制從內(nèi)核空間到用戶空間的導出。export和unexport,他們都是只寫的。GpiochipX代表GPIO控制器。
export:用于將指定編號的GPIO引腳導出。在使用GPIO引腳之前,需要將其導出,導出成功之后才能使用它。注意export文件是只寫文件,不能讀取,將一個指定的編號寫入到export文件中即可將對應的GPIO引腳導出,以GPIO0_PB7為例(pin計算值為15)使用export文件進行導出,導出成功如下圖所示:
echo 15 > export
?

會發(fā)現(xiàn)在/sys/class/gpio目錄下生成了一個名為gpio15的文件夾(gpioX,X表示對應的編 號),該文件夾就是導出來的GPIO引腳對應的文件夾,用于管理、控制該GPIO引腳。
unexport:將導出的GPIO引腳刪除。當使用完GPIO引腳之后,需要將導出的引腳刪除,同樣該文件也是只寫文件、不可讀,使用unexport文件進行刪除GPIO0_PB7,刪除成功如下圖所示:
echo 15 > unexport

可以看到之前生成的 gpio15文件夾就會消失!
需要注意的是,并不是所有 GPIO引腳都可以成功導出,如果對應的GPIO已經(jīng)被導出或者在內(nèi)核中被使用了,那便無法成功導出,導出失敗如下圖所示:
?

出現(xiàn)上圖報錯的原因是該GPIO已經(jīng)被其他GPIO使用,需要在內(nèi)核中找到使用GPIO的驅(qū)動,并取消該驅(qū)動才可以正常使用GPIO。在使用GPIO15時,需要取消Linux內(nèi)核源碼中LED燈的配置,如下所示:
?

再次使用以下命令導出GPIO0_PB7引腳,導出成功之后進入gpio15文件夾如下圖所示:
echo 15 > export

?
可以看到gpio15文件夾下分別有active_low、device、direction、edge、power、subsystem、uevent、value八個文件,需要關(guān)心的文件是active_low、direction、edge以及value這四個屬性文件,接下來分別介紹這四個屬性文件的作用:
direction:配置GPIO引腳為輸入或輸出模式。該文件可讀、可寫,讀表示查看GPIO當前是輸入還是輸出模式,寫表示將GPIO配置為輸入或輸出模式;讀取或?qū)懭氩僮骺扇〉闹禐?out"(輸出模式)和"in"(輸入模式)。
在“/sys/class/gpio/gpio15”目錄下使用cat命令查看direction輸入輸出模式,如下圖所示:
cat direction

默認狀態(tài)下的輸入輸出狀態(tài)為“in”,由于direction為可讀可寫,可以使用以下命令將模式配置為輸出,配置完成如下圖所示
echo out > direction
cat direction

active_low:用于控制極性得屬性文件,可讀可寫,默認情況下為0,使用cat命令進行文件內(nèi)容的查看,如下圖所示 :
cat active_low
當 active_low等于0時,value值若為1則引腳輸出高電平,value值若為0則引腳輸出低電平。當active_low等于1時 ,value值若為0則引腳輸出高電平,value值若為1則引腳輸出低電平。
edge:控制中斷的觸發(fā)模式,該文件可讀可寫。在配置GPIO引腳的中斷觸發(fā)模式之前,需將其設置為輸入模式,四種觸發(fā)模式的設置如下所示:
非中斷引腳:echo "none" > edge
上升沿觸發(fā):echo "rising" > edge
下降沿觸發(fā):echo "falling" > edge
邊沿觸發(fā): echo "both" > edge
value:設置高低電平,如果我們要把這個管腳設置成高電平,我們只需要給value設置成1即可,反之,則設置成0。使用命令
echo 1 > value
反之,把GPIO設置成低電平,使用命令
echo 0 > value

-
GPIO
+關(guān)注
關(guān)注
16文章
1237瀏覽量
53261 -
驅(qū)動開發(fā)
+關(guān)注
關(guān)注
0文章
133瀏覽量
12215 -
OpenHarmony
+關(guān)注
關(guān)注
26文章
3802瀏覽量
17774 -
RK3568
+關(guān)注
關(guān)注
5文章
559瀏覽量
5902
發(fā)布評論請先 登錄
相關(guān)推薦
北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)內(nèi)核HDF驅(qū)動框架架構(gòu)

鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)板
迅為RK3568開發(fā)板鴻蒙OpenHarmony系統(tǒng)固件燒寫步驟
系統(tǒng)升級 | RK3568體驗 OpenHarmony 3.2
迅為RK3568開發(fā)板2800頁手冊+220集視頻
【北京迅為】itop-RK3568開發(fā)板驅(qū)動開發(fā)指南
北京迅為iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)實操-HDF驅(qū)動配置LED

【北京迅為】iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)-第4章 UART基礎(chǔ)知識

【北京迅為】iTOP-RK3568開發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)實操-HDF驅(qū)動配置UART

評論