GPIO基本概念 GPIO,即General-Purpose Input/Output,指的是可以由軟件控制的通用輸入輸出引腳。每個GPIO引腳可以配置為輸入或輸出,用來讀取外部設備的狀態(如按鍵)或控制外設(如LED、馬達等) GPIO應用領域 GPIO作為嵌入式設備中不可或缺的接口,在以下多個領域有廣泛應用: ● 智能家居:用于控制和監測家電、燈光、窗簾、傳感器等智能設備,通過GPIO引腳讀取傳感器狀態或發送控制信號。 ● 汽車電子:在車載系統中,GPIO用于與各種車載傳感器和執行器連接,提供控制信號,如車燈、門鎖、報警器等的控制。 ● 機器人技術:GPIO用于控制機器人中的電機、傳感器和其他外部設備,實現精準的硬件控制和反饋處理。 ![]() 使用RK3588處理器上的GPIO接口 在RK3588平臺上,GPIO的使用非常靈活,既可以通過內核提供的sysfs接口進行控制,也可以通過debugfs進行調試。下面我們將介紹如何通過這兩種方式來操作GPIO。 01 GPIO選擇 ![]() 可以看到5號管腳的網絡標號為UART9_RX_M0_BT,然后打開pin腳復用手冊,根據這個網絡標號進行搜索,查找到的復用內容如下所示: ![]() 可以看到GPIO引腳編號GPIO2_C4,我們將LED的正極連接到這GPIO,負極連接到GND。 02 使用sysfs接口控制GPIO GPIO軟件編程方式有多種,可以寫驅動程序調用GPIO函數操作GPIO,也可以直接通過操作寄存器的方式操作GPIO,還可以通過sysfs方式實現對GPIO的控制。 sysfs接口是Linux內核提供的一種標準方式,允許用戶在用戶空間操作GPIO。通過簡單的命令行操作,就可以控制GPIO引腳,點亮或熄滅LED。這里我們使用較為簡單的用戶空間控制GPIO的方法,通過配置GPIO為輸出模式,向其寫入高電平(1)或低電平(0)來控制LED的開關。 ▸引腳號計算 引腳編號=控制寄存器的寄存器基數+控制引腳寄存器位數。 GPIO2_PC4 pin腳計算方法: bank = 2; //GPIO2_C4=> 2, bank ∈ [0,4]group = 2; //GPIO2_C4 => 2, group ∈ {(A=0), (B=1), (C=2), (D=3)}X = 4; //GPIO2_C4=>4, X ∈ [0,7]number = group * 8 + X = 2 * 8 + 4 =20;pin = bank*32 + number= 2 * 32 + 20 = 84; ▸ 導出GPIO引腳 echo 84 > /sys/class/gpio/export ![]() ▸ 配置GPIO為輸出模式 接下來,設置該GPIO引腳為輸出模式: echo "out" > /sys/class/gpio/gpio84/direction ![]() ▸ 控制LED開關 通過向GPIO的value文件寫入1或0來控制LED的狀態: 打開LED: echo 1 > /sys/class/gpio/gpio84/value ![]() 關閉LED: echo 0 > /sys/class/gpio/gpio84/value ![]() ▸ 釋放GPIO引腳 使用完畢后,可以將GPIO從用戶空間移除: echo 84 > /sys/class/gpio/unexport ![]() 03 GPIO調試 在更高級的調試場景中,debugfs文件系統提供了對GPIO引腳狀態和復用情況的深入查看和調試能力?梢酝ㄟ^以下步驟獲取GPIO的詳細信息: ▸ 查看GPIO的輸入/輸出模式、上拉/下拉設置等電氣屬性 cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinconf-pins | grep 84 ![]() ▸ 查看每個引腳的功能模式、引腳復用選擇以及其他相關的配置信息 cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins | grep 84 ![]() 通過這個文件,你可以確認每個引腳的當前復用配置,例如某個引腳可能被復用為UART、SPI等設備的控制引腳。如果想要重新配置為GPIO引腳,可以通過設備樹進行調整。 |