国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解

這篇具有很好參考價值的文章主要介紹了RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、RK3588設(shè)備樹結(jié)構(gòu)

firefly的官方說明文檔RK3588gpio系統(tǒng)說明

function {
	group {
			rockchip,pin = <bank gpio func &ref>;
		};
};

其中,bank是所屬的組,Core-3588J 有 5 組 GPIO bank:GPIO0-GPIO4,每組又以 A0-A7, B0-B7, C0-C7, D0-D7 作為編號區(qū)分。
首先,對于firefly的rk3588j的開發(fā)板,其設(shè)備樹有幾個比較重要的文件,
分別是/kernel/arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi;
/kernel/arch/arm64/boot/dts/rockchip/rk3588s.dtsi;
kernel/arch/arm64/boot/dts/rockchip/rk3588-firefly-itx-3588j.dtsi;
/kernel/arch/arm64/boot/dts/rockchip/rk3588.dtsi;
Tips:如果有些外設(shè)描述沒有找到,可以先編譯一下,會生成一個總的dts在當(dāng)前目錄下,例如3588的臨時文件名字是:.rk3588-firefly-itx-3588j.dtb.dts.tmp,這是一個隱藏文件,里面包含了所有的將會進(jìn)行編譯的設(shè)備樹信息。
這個幾個文件將其外圍設(shè)備基本描述完全了,另外還有一些可能位于/kernel/arch/arm64/boot/dts/rockchip/rk3588-diff.dtsi內(nèi),
第一個文件rk3588s-pinctrl.dtsi,該文件枚舉了3588所有的iomux實例(3588s和3588是firefly的兩款開發(fā)板,頻腳基本一致,所有有些3588會引用3588s的設(shè)備樹文件);例如rk3588s-pinctrl.dtsi文件中關(guān)于uart6的設(shè)備樹描述:
RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解,rk3588,單片機,嵌入式硬件

上圖是串口6的一個設(shè)備樹,

rockchip,pins =
				/* uart6_rx_m1 */
				<1 RK_PA0 10 &pcfg_pull_up>,

該描述就是說明使用的引腳是GPIO1_A0;
可以看到4個引腳rx/tx/rtsn/ctsn。另外多了一個rx/tx是串口6的復(fù)用,這里是將串口6的所有可以的復(fù)用全部羅列出來,其他的外設(shè)也是類似,最終實際用的哪一路復(fù)用在文件rk3588-firefly-itx-3588j.dtsi中確定,還是串口6,在該文件中的描述為:
RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解,rk3588,單片機,嵌入式硬件

二、RK3588 GPIO口上拉下拉失敗

在調(diào)試中發(fā)現(xiàn)有些gpio口無法正確的實現(xiàn)上下拉,其原因在于該io口被其他外設(shè)復(fù)用使能。解決方法就是將該外設(shè)disabled。
使用如下指令查看引腳的復(fù)用情況:

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

上下拉設(shè)置方法:

:/ # ls /sys/class/gpio/
export     gpiochip128  gpiochip32   gpiochip64  unexport
gpiochip0  gpiochip200  gpiochip509  gpiochip96
:/ # echo 56 > /sys/class/gpio/export
:/ # ls /sys/class/gpio/
export  gpiochip0    gpiochip200  gpiochip509  gpiochip96
gpio56  gpiochip128  gpiochip32   gpiochip64   unexport
:/ # ls /sys/class/gpio/gpio56
active_low  device  direction  edge  power  subsystem  uevent  value
:/ # cat /sys/class/gpio/gpio56/direction
in
:/ # cat /sys/class/gpio/gpio56/value
0

以GPIO3_D4為例,該IO口在原開發(fā)板上被用作了HDMI1的rx引腳,其設(shè)備樹描述位于rk3588-firefly-itx-3588j.dtsi文件中,如下:
RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解,rk3588,單片機,嵌入式硬件
hdmim1_rx是一個設(shè)備使用gpio引腳的描述,在文件rk3588.dtsi中被引用,如下:
RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解,rk3588,單片機,嵌入式硬件
但是我們發(fā)現(xiàn)其實,該外設(shè)在此文件中的狀態(tài)是disabled,其實,一般而言,每個廠家的芯片可能對應(yīng)很多開發(fā)板,有些開發(fā)板沒有這個功能,有些開發(fā)板有這個功能,因此,在公共文件中一般都會把該芯片支持的共有外設(shè)都失能,然后在開發(fā)板對應(yīng)的文件中再使能,這里就是如此。
打開文件rk3588-firefly-itx-3588j.dtsi找到hdmirx_ctrler,可以看到
RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解,rk3588,單片機,嵌入式硬件
我們只需要將okay改成disabled即可。

還有一些gpio,通過指令:

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解,rk3588,單片機,嵌入式硬件

可以看到本身就是用作gpio的,但是在linux通用的gpio管理中,并不能被導(dǎo)出.例如下面的提示:

root@firefly:/sys/class/gpio# echo 119 > export
-bash: echo: write error: Device or resource busy

這是因為被其他外設(shè)復(fù)用成gpio了,不再歸屬到linux通用gpio管理器。
例如,rk3588的usbdp_phy0節(jié)點。設(shè)備樹如下:

&usbdp_phy0 {
	orientation-switch;
	svid = <0xff01>;
	sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
	sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;

	port {
		#address-cells = <1>;
		#size-cells = <0>;
		usbdp_phy0_orientation_switch: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&usbc0_orien_sw>;
		};

		usbdp_phy0_dp_altmode_mux: endpoint@1 {
			reg = <1>;
			remote-endpoint = <&dp_altmode_mux>;
		};
	};
};

其中的:

sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;

就是將GPIO4_A6和GPIO4_A7作為sbu1和sbu2。
那么此時查看復(fù)用的話,其實就會顯示用作了gpio,但是卻不能導(dǎo)出到通用的gpio管理器里面。如果需要使用類似的io口就需要將使用的設(shè)備禁用掉。

三、RK3588頻腳計算方式

與一般的計算方式?jīng)]有區(qū)別:

GPIO pin腳計算公式:pin = bank * 32 + number

GPIO 小組編號計算公式:number = group * 8 + X

以下,摘自官網(wǎng):

下面演示GPIO1_D0 pin腳計算方法:

bank = 1;      //GPIO1_D0 => 1, bank ∈ [0,4]

group = 3;      //GPIO1_D0 => 3, group ∈ {(A=0), (B=1), (C=2), (D=3)}

X = 0;       //GPIO1_D0 => 0, X ∈ [0,7]

number = group * 8 + X = 3 * 8 + 0 = 24

pin = bank*32 + number= 1 * 32 + 24 = 56;

GPIO1_D0 對應(yīng)的設(shè)備樹屬性描述為:<&gpio1 24 GPIO_ACTIVE_HIGH>,由kernel-5.10/include/dt-bindings/pinctrl/rockchip.h的宏定義可知,也可以將GPIO1_D0描述為<&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>

另外提供個簡單的計算小程序源碼:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    while(1){
    char gpio_group;
    int bank;
    int X;
    int group;
    printf("++++++++++++++++++++++++++++++++++++++++++++\n");
    printf("bank number eg.GPIO1_D2,bank is 1\n");
    printf("group number eg.GPIO1_D2,group is 'D'\n");
    printf("code number eg.GPIO1_D2,code is 2\n");
    printf("++++++++++++++++++++++++++++++++++++++++++++\n");

    printf("Input Example:1,d,2\n");
    scanf("%d,%c,%d", &bank,&gpio_group,&X);
    switch (gpio_group)
    {
    case 'a':
    case 'A'/* constant-expression */:
        /* code */
        group = 0;
        break;
    case 'b':
    case 'B':
        group = 1;
        break;
    case 'c':
    case 'C':
        group = 2;
        break;
    case 'd':
    case 'D':
        group = 3;
        break;
    default:
        printf("group number error!\n");
        return 1;
        break;
    };
    int number = group * 8 + X ;
    int pin = bank*32 + number;
    printf("GPIO pin is %d\n", pin);
    system("pause");}
    return 0;
}

只需要輸入bank,code和序號即可,例如計算GPIO1_D0 ,輸入1,D,0
回車:
RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解,rk3588,單片機,嵌入式硬件
引腳為56號。

最后:雖然由于每家芯片的驅(qū)動不同,設(shè)備樹的書寫格式可能有所不同,但是基本的設(shè)備樹格式都是一樣的。大道至簡,殊途同歸。文章來源地址http://www.zghlxwxcb.cn/news/detail-737621.html

到了這里,關(guān)于RK3588 設(shè)備樹pinctrl gpio子系統(tǒng)解析,解決GPIO無法正確拉高拉低的問題,RK3588設(shè)備樹詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第128章 GPIO入門實驗

    RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第128章 GPIO入門實驗

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

    2024年01月21日
    瀏覽(30)
  • HCIA-HarmonyOS設(shè)備開發(fā)認(rèn)證V2.0-IOT硬件子系統(tǒng)-GPIO

    HCIA-HarmonyOS設(shè)備開發(fā)認(rèn)證V2.0-IOT硬件子系統(tǒng)-GPIO

    輕量系統(tǒng)設(shè)備通常需要進(jìn)行外設(shè)控制,例如溫濕度數(shù)據(jù)的采集、燈開關(guān)的控制,因此在完成內(nèi)核開發(fā)后,需要進(jìn)行設(shè)備驅(qū)動的開發(fā)。 主要Hi3861芯片介紹如何運用 IoT 硬件子系統(tǒng)進(jìn)行輕量系統(tǒng)設(shè)備的驅(qū)動開發(fā)。 在輕量系統(tǒng)的聯(lián)接模組中,智能家居遠(yuǎn)程控制能力的實現(xiàn),最終是通

    2024年02月21日
    瀏覽(28)
  • 【Linux】Pinctrl子系統(tǒng)簡介

    【Linux】Pinctrl子系統(tǒng)簡介

    我們工作開發(fā)中非常常用的就是GPIO,在Linux開發(fā)中,是有必要去熟悉并理解的。在Linux內(nèi)核中也有提供相應(yīng)的子系統(tǒng)pinctrl子系統(tǒng), 本文從大的面上去了解它 。 參考學(xué)習(xí):Linux筆記老師課程(Pinctrl子系統(tǒng)) https://live.csdn.net/v/219059?spm=1001.2014.3001.5501 https://xuesong.blog.csdn.net/arti

    2024年02月07日
    瀏覽(22)
  • 【IMX6ULL驅(qū)動開發(fā)學(xué)習(xí)】14.Linux驅(qū)動開發(fā) - GPIO中斷(設(shè)備樹 + GPIO子系統(tǒng))

    【IMX6ULL驅(qū)動開發(fā)學(xué)習(xí)】14.Linux驅(qū)動開發(fā) - GPIO中斷(設(shè)備樹 + GPIO子系統(tǒng))

    代碼自取 【14.key_tree_pinctrl_gpios_interrupt】: https://gitee.com/chenshao777/imx6-ull_-drivers 主要接口函數(shù): 1. of_gpio_count (獲得GPIO的數(shù)量) 2. kzalloc (向內(nèi)核申請空間) 3. of_get_gpio (獲取GPIO子系統(tǒng)標(biāo)號) 4. gpio_to_irq (根據(jù)GPIO子系統(tǒng)標(biāo)號得到軟件中斷號) 5. request_irq (根據(jù)軟件中斷號

    2024年02月12日
    瀏覽(35)
  • 【Linux驅(qū)動開發(fā)】010 pinctrl子系統(tǒng)

    【Linux驅(qū)動開發(fā)】010 pinctrl子系統(tǒng)

    上一章我們編寫了基于設(shè)備樹的 LED 驅(qū)動,但是驅(qū)動的本質(zhì)還是沒變,都是配置 LED 燈所使用的 GPIO 寄存器,驅(qū)動開發(fā)方式和裸機基本沒啥區(qū)別。本章我們就來學(xué)習(xí)一下如何借助 pinctrl 和 gpio 子系統(tǒng)來簡化 GPIO 驅(qū)動開發(fā)。? ?Linux 內(nèi)核針對 PIN 的配置推出了 pinctrl 子系統(tǒng),對于

    2024年02月14日
    瀏覽(21)
  • 9.GPIO子系統(tǒng)

    9.GPIO子系統(tǒng)

    目錄 GPIO1節(jié)點 內(nèi)核設(shè)備樹新增rgb_led節(jié)點(使用gpio子系統(tǒng)) 常用的對外接口 頭文件 of_find_node_by_path()函數(shù) of_get_named_gpio()函數(shù) gpio_request()函數(shù) gpio_free()函數(shù) gpio_direction_output()函數(shù) gpio_direction_input()函數(shù) gpio_get_value()函數(shù) gpio_set_value()函數(shù) GPIO子系統(tǒng)實驗:IO引腳高低電平控制 修

    2024年02月11日
    瀏覽(24)
  • gpio 子系統(tǒng)

    Linux的GPIO子系統(tǒng)驅(qū)動框架的組成部分 Linux的GPIO子系統(tǒng)驅(qū)動框架由三個主要部分組成: GPIO控制器驅(qū)動程序、平臺驅(qū)動程序和GPIO字符設(shè)備驅(qū)動程序 。 GPIO控制器驅(qū)動程序 GPIO控制器驅(qū)動程序是與硬件相關(guān)的代碼,用于處理GPIO控制器與系統(tǒng)總線之間的通信。該部分代碼通常由芯片

    2024年02月10日
    瀏覽(19)
  • 驅(qū)動開發(fā)作業(yè)3——GPIO子系統(tǒng)

    作業(yè)1:在內(nèi)核模塊中啟用定時器,定時1s,讓LED1以1s為周期實現(xiàn)流水燈 ?myled.c(驅(qū)動文件) ? ?作業(yè)2:基于GPIO子系統(tǒng)完成LED燈驅(qū)動的注冊,并利用應(yīng)用程序測試 ?chrdevled.c(驅(qū)動文件) test.c(測試文件)

    2024年02月16日
    瀏覽(41)
  • Linux驅(qū)動開發(fā):gpio子系統(tǒng)

    目錄 1、GPIO配置流程 2、GPIO子系統(tǒng)API 2.1?of_find_node_by_path 2.2 of_get_named_gpio 2.3 gpio_request 與?gpiod_get 與?gpiod_get_index 2.4?gpio_direction_input 與?gpiod_direction_input 2.5?gpio_direction_output 與?gpiod_direction_output 2.6?gpio_get_value 與?gpiod_get_value 2.7?gpio_set_value 與?gpiod_set_value 2.8? gpiod_get_from

    2024年02月12日
    瀏覽(17)
  • 【Linux驅(qū)動開發(fā)】011 gpio子系統(tǒng)

    【Linux驅(qū)動開發(fā)】011 gpio子系統(tǒng)

    前面我們編寫了基于設(shè)備樹的 LED 驅(qū)動,但是驅(qū)動的本質(zhì)還是沒變,都是配置 LED 燈所使用的 GPIO 寄存器,驅(qū)動開發(fā)方式和裸機基本沒啥區(qū)別。本章我們就來學(xué)習(xí)一下如何借助 pinctrl 和 gpio 子系統(tǒng)來簡化 GPIO 驅(qū)動開發(fā)。? ?Linux 內(nèi)核針對 PIN 的配置推出了 pinctrl 子系統(tǒng),對于

    2024年02月03日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包