91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

驅(qū)動(dòng)之路#20:Pinctrl 在手,引腳復(fù)用很順手

BSP調(diào)試從0到1 ? 來(lái)源:嵌入式分享 ? 作者:嵌入式分享 ? 2026-04-07 21:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

歡迎關(guān)注,每周更新!?

本合集分享的是,我當(dāng)初學(xué)習(xí)Linux驅(qū)動(dòng)的來(lái)時(shí)路——《《驅(qū)動(dòng)之路》開(kāi)篇:自序&前言》。

正文

嵌入式 Linux 開(kāi)發(fā)中,你是否遇到過(guò)這些困惑:

為什么同樣一個(gè) GPIO引腳,既能做普通輸入輸出,又能做 I2CSDA、SPI 的 CS 等功能?

驅(qū)動(dòng)中沒(méi)寫(xiě)引腳配置代碼,芯片卻能自動(dòng)切換引腳功能,底層是怎么實(shí)現(xiàn)的?

設(shè)備樹(shù)中pinctrl-0 pinctrl-names這些屬性到底有什么用?

這一切的答案,都藏在 Linux 內(nèi)核的Pinctrl 子系統(tǒng)里。它是管理芯片引腳的 “總管家”,負(fù)責(zé)引腳的復(fù)用配置、電氣屬性設(shè)置,讓驅(qū)動(dòng)開(kāi)發(fā)者徹底擺脫 “寄存器操作引腳” 的繁瑣。

1 為什么需要 Pinctrl 子系統(tǒng)?

如果沒(méi)有 Pinctrl 子系統(tǒng),嵌入式引腳配置全靠 “硬編碼”,痛點(diǎn)極其明顯:

(1)引腳復(fù)用沖突

芯片的引腳資源有限,一個(gè)引腳往往對(duì)應(yīng)多種功能(如 GPIO、I2C、UART、SPI)。比如 RK3576 的GPIO2_PB4,支持如下功能復(fù)用。

wKgZPGnVBIKABAtIAAGAIr8UqrE187.png

如果驅(qū)動(dòng)直接操作寄存器配置功能,很容易出現(xiàn) “多個(gè)驅(qū)動(dòng)搶占同一引腳” 的沖突。

(2)配置繁瑣且易出錯(cuò)

引腳配置不僅要選 “功能”,還要設(shè)置電氣屬性:

上拉 / 下拉電阻(如 I2C 引腳需要上拉);

驅(qū)動(dòng)能力(如大電流引腳需要增強(qiáng)驅(qū)動(dòng)能力);

電平標(biāo)準(zhǔn)(如 LVCMOS3.3V、LVDS)。

這些都需要操作復(fù)雜的寄存器,不同芯片的寄存器地址還不一樣,移植性極差。

(3)驅(qū)動(dòng)與硬件耦合嚴(yán)重

驅(qū)動(dòng)代碼中硬編碼引腳配置,更換硬件平臺(tái)或修改引腳時(shí),必須修改驅(qū)動(dòng)代碼,違背了 “硬件描述與驅(qū)動(dòng)分離” 的設(shè)計(jì)思想。

而 Pinctrl 子系統(tǒng)的核心目標(biāo),就是解決這些問(wèn)題:

統(tǒng)一管理引腳:集中處理引腳復(fù)用、電氣屬性配置,避免沖突;

設(shè)備樹(shù)驅(qū)動(dòng)解耦:引腳配置寫(xiě)在設(shè)備樹(shù)中,驅(qū)動(dòng)無(wú)需關(guān)心硬件細(xì)節(jié);

標(biāo)準(zhǔn)化接口:提供統(tǒng)一的內(nèi)核 API,驅(qū)動(dòng)通過(guò)設(shè)備樹(shù)即可獲取引腳配置。

2 Pinctrl 的 3 個(gè)關(guān)鍵術(shù)語(yǔ)

想要理解 Pinctrl,必須先搞懂這 3 個(gè)核心概念,否則后續(xù)流程會(huì) confusion:

(1)Pin(引腳)

指芯片物理引腳的抽象,每個(gè)引腳都有唯一的編號(hào)(如 RK3576 的GPIO2_PB4對(duì)應(yīng)引腳編號(hào)52)。Pinctrl 子系統(tǒng)通過(guò) “引腳編號(hào)” 識(shí)別和管理硬件引腳。

(2)Pinmux(引腳復(fù)用)

“Pin Multiplexing” 的縮寫(xiě),核心作用是選擇引腳的功能模式。比如:

把GPIO2_PB4配置為 “普通 GPIO 模式”;

把GPIO2_PB4配置為 “UART7_CTSN 模式”;

把GPIO2_PB4配置為 “SPI4_MOSI 模式”。

每個(gè)引腳的可用模式,由芯片的 datasheet 明確規(guī)定(如瑞芯微提供的 RK3576_PinOut 表格)。

(3)Pinctrl(引腳配置)

“Pin Control” 的縮寫(xiě),核心作用是設(shè)置引腳的電氣屬性,常見(jiàn)配置包括:

上拉電阻(pull-up):引腳默認(rèn)拉高,如 I2C、按鍵引腳;

下拉電阻(pull-down):引腳默認(rèn)拉低,如復(fù)位引腳;

驅(qū)動(dòng)能力(drive strength):引腳輸出電流大小,如 LED 引腳需要 10mA 驅(qū)動(dòng);

電平標(biāo)準(zhǔn)(voltage level):如 LVCMOS3.3V、LVCMOS1.8V;

slew rate(轉(zhuǎn)換速率):引腳電平變化的快慢,高頻場(chǎng)景需調(diào)整。

簡(jiǎn)單總結(jié):Pinmux 負(fù)責(zé) “引腳做什么功能”,Pinctrl 負(fù)責(zé) “引腳的電氣特性是什么”,兩者結(jié)合完成引腳的完整配置。

3 Pinctrl 工作流程

Pinctrl 子系統(tǒng)的工作,本質(zhì)是 “設(shè)備樹(shù)配置 → 內(nèi)核解析 → 驅(qū)動(dòng)使用” 的流程。

步驟 1:設(shè)備樹(shù)中定義引腳配置

開(kāi)發(fā)者需要在設(shè)備樹(shù)中,為每個(gè)設(shè)備(如 I2C、SPI、傳感器)定義 “引腳復(fù)用 + 電氣屬性”,核心是 3 類(lèi)節(jié)點(diǎn):

(1)Pinctrl 控制器節(jié)點(diǎn)

描述芯片的引腳控制器硬件信息,由芯片廠商在 dtsi 文件中預(yù)定義(無(wú)需開(kāi)發(fā)者修改)。例如 RK3576 的 rk3576.dtsi(如下圖)。

核心作用:告訴內(nèi)核 “引腳控制器的硬件位置、支持的功能”,內(nèi)核通過(guò)該節(jié)點(diǎn)初始化 Pinctrl 驅(qū)動(dòng)。

wKgZPGnVBIKAVaJSAAGCnl2_t2k195.png

(2)引腳配置子節(jié)點(diǎn)

在&pinctrl節(jié)點(diǎn)下(rk3576-pinctrl.dtsi),定義具體的引腳配置(復(fù)用 + 電氣屬性),通常以 “功能 + 場(chǎng)景”命名。例如 I2C0 的引腳配置:

wKgZPGnVBIKAEeDhAAC5avd7Anw388.png

(3)設(shè)備節(jié)點(diǎn)引用引腳配置

在具體設(shè)備節(jié)點(diǎn)(如 I2C0)中,通過(guò)pinctrl-names和pinctrl-0引用上述配置:

wKgZPGnVBIKAO9KgAADERO8Qr_w966.png

步驟 2:內(nèi)核解析設(shè)備樹(shù),初始化引腳配置

Linux 內(nèi)核啟動(dòng)時(shí),Pinctrl 子系統(tǒng)會(huì)執(zhí)行以下操作:

解析&pinctrl控制器節(jié)點(diǎn),加載對(duì)應(yīng)的 Pinctrl 驅(qū)動(dòng)(如drivers/pinctrl/pinctrl-rockchip.c);

解析引腳配置子節(jié)點(diǎn)(如i2c0_default),提取pinmux(功能)和pinconf(電氣屬性)信息;

檢查引腳是否被其他設(shè)備占用(避免復(fù)用沖突);

若引腳空閑,通過(guò) Pinctrl 驅(qū)動(dòng)操作寄存器,配置引腳的復(fù)用模式和電氣屬性;

把配置好的引腳與設(shè)備節(jié)點(diǎn)(如&i2c0)綁定,等待驅(qū)動(dòng)使用。

步驟 3:驅(qū)動(dòng)匹配成功,直接使用配置好的引腳

當(dāng)設(shè)備節(jié)點(diǎn)(如&i2c0)與驅(qū)動(dòng)(如 I2C 驅(qū)動(dòng))匹配成功后,驅(qū)動(dòng)無(wú)需再配置引腳 ——Pinctrl 子系統(tǒng)已提前完成所有工作:

I2C 驅(qū)動(dòng)直接通過(guò) I2C 控制器收發(fā)數(shù)據(jù),SDA/SCL 引腳已被配置為 I2C 功能,且啟用了上拉電阻;

傳感器驅(qū)動(dòng)通過(guò)devm_gpiod_get獲取復(fù)位引腳時(shí),該引腳已被配置為 GPIO 功能,無(wú)需手動(dòng)設(shè)置復(fù)用。

這就是為什么驅(qū)動(dòng)中不用寫(xiě)引腳配置代碼 ——Pinctrl 子系統(tǒng)已經(jīng) “提前打理好一切”。

總結(jié)

Pinctrl 子系統(tǒng)的本質(zhì)是 “內(nèi)核提供的引腳管理框架”,核心作用是統(tǒng)一處理引腳復(fù)用和電氣屬性配置,實(shí)現(xiàn) “硬件描述與驅(qū)動(dòng)分離”。

關(guān)鍵要點(diǎn)回顧:

3 個(gè)核心概念:Pin(引腳)、Pinmux(復(fù)用)、Pinconf(配置);

工作流程:設(shè)備樹(shù)定義配置 → 內(nèi)核解析初始化 → 驅(qū)動(dòng)直接使用;

開(kāi)發(fā)重點(diǎn):在設(shè)備樹(shù)中正確定義引腳組、功能、電氣屬性,并讓設(shè)備節(jié)點(diǎn)引用。

記?。呵度胧?Linux 中,所有引腳的復(fù)用和配置,都應(yīng)該通過(guò) Pinctrl 子系統(tǒng)實(shí)現(xiàn),而非驅(qū)動(dòng)硬編碼 —— 這是規(guī)范,也是避免踩坑的關(guān)鍵。

(完)

本人專(zhuān)注 Linux 驅(qū)動(dòng) & Linux/Android BSP 開(kāi)發(fā)調(diào)試,可接外包項(xiàng)目/技術(shù)支持/問(wèn)題定位。有需求或交個(gè)朋友可加微信:【Chen_WeChat2026】。

更多原創(chuàng)技術(shù)文章:《README 2026》。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11798

    瀏覽量

    219395
  • 引腳
    +關(guān)注

    關(guān)注

    16

    文章

    2116

    瀏覽量

    55959
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    驅(qū)動(dòng)之路#04:LCD 驅(qū)動(dòng)程序分析(基于RK3576)

    ? 題圖:河北太行山脈,山頭密密麻麻都被太陽(yáng)能板覆蓋了。 歡迎關(guān)注,每周更新!? 本合集分享的是,我當(dāng)初學(xué)習(xí)Linux驅(qū)動(dòng)的來(lái)時(shí)路——《《驅(qū)動(dòng)之路》開(kāi)篇:自序 ? ? ?// 通用面板數(shù)據(jù)結(jié)構(gòu)
    的頭像 發(fā)表于 02-17 08:20 ?1w次閱讀
    <b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>之路</b>#04:LCD <b class='flag-5'>驅(qū)動(dòng)</b>程序分析(基于RK3576)

    驅(qū)動(dòng)之路#03:LCD 時(shí)序參數(shù)分析

    ? 題圖:浙江普陀山客運(yùn)中心最近獲得2021年度凡爾賽建筑獎(jiǎng)。 歡迎關(guān)注,每周更新!? 本合集分享的是,我當(dāng)初學(xué)習(xí)Linux驅(qū)動(dòng)的來(lái)時(shí)路——《《驅(qū)動(dòng)之路》開(kāi)篇:自序13 tvb: 垂直上寬/后肩
    的頭像 發(fā)表于 02-10 08:27 ?1376次閱讀
    <b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>之路</b>#03:LCD 時(shí)序參數(shù)分析

    深入解析RK3568引腳控制核心:rk3568-pinctrl.dtsi文件的作用與實(shí)踐(可應(yīng)用rk全系列)

    在嵌入式 Linux 開(kāi)發(fā)中,設(shè)備樹(shù)(Device Tree) 是連接硬件與軟件的關(guān)鍵橋梁,而針對(duì) Rockchip RK3568 芯片的rk3568-pinctrl.dtsi文件,更是掌控芯片引腳
    的頭像 發(fā)表于 02-05 14:01 ?1000次閱讀
    深入解析RK3568<b class='flag-5'>引腳</b>控制核心:rk3568-<b class='flag-5'>pinctrl</b>.dtsi文件的作用與實(shí)踐(可應(yīng)用rk全系列)

    CD405xB系列多路復(fù)用器與解復(fù)用器的技術(shù)解析與應(yīng)用探討

    的CD4051B、CD4052B和CD4053B這三款CMOS單8通道模擬多路復(fù)用器或解復(fù)用器。 文件下載: cd4053b.pdf 1. 產(chǎn)品特性亮點(diǎn) 1.1 信號(hào)范圍廣泛 CD405xB系列能夠處理寬范圍的數(shù)字和模擬信號(hào)。數(shù)字信號(hào)范圍從3V到
    的頭像 發(fā)表于 01-16 14:10 ?324次閱讀

    解析TS3DV520E:適用于DVI/HDMI應(yīng)用的5通道差分10:20多路復(fù)用開(kāi)關(guān)

    TS3DV520E是一款20位到10位的復(fù)用/解復(fù)用數(shù)字視頻開(kāi)關(guān),配備單選擇(SEL)輸入,通過(guò)SEL引腳可控制復(fù)用/解
    的頭像 發(fā)表于 01-14 16:15 ?414次閱讀

    高速信號(hào)處理利器:TMUXHS4412 4通道 20Gbps差分2:1/1:2復(fù)用器/解復(fù)用器深度解析

    高速信號(hào)處理利器:TMUXHS4412 4通道 20Gbps差分2:1/1:2復(fù)用器/解復(fù)用器深度解析 在高速電子設(shè)計(jì)領(lǐng)域,信號(hào)的高效傳輸與處理一直是工程師們關(guān)注的焦點(diǎn)。今天,我們要深入探討
    的頭像 發(fā)表于 01-13 11:15 ?409次閱讀

    ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開(kāi)發(fā)板上進(jìn)行UART引腳復(fù)用配置

    IOMUX(引腳功能復(fù)用)是芯片廠商為高效利用有限硬件引腳資源而設(shè)計(jì)的關(guān)鍵技術(shù),它允許單個(gè)物理引腳通過(guò)軟件配置為多種不同的功能(如GPIO、UART、I2C等)。不同SoC芯片的配置方
    的頭像 發(fā)表于 11-18 16:54 ?5615次閱讀
    ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開(kāi)發(fā)板上進(jìn)行UART<b class='flag-5'>引腳</b><b class='flag-5'>復(fù)用</b>配置

    2025玄奘之路20挑戰(zhàn)賽,神眸AI智能影像實(shí)現(xiàn)全賽道守護(hù)實(shí)時(shí)直播

    玄奘之路20戈壁挑戰(zhàn)賽2025年9月28日-10月4日在甘肅敦煌圓滿(mǎn)完賽。5500余名來(lái)自全球近百所商學(xué)院、知名品牌企業(yè)的參賽者齊聚瓜洲。作為戈2AI智能影像戰(zhàn)略合作伙伴,在茫茫戈壁無(wú)人區(qū),200
    的頭像 發(fā)表于 10-15 09:16 ?1005次閱讀
    2025玄奘<b class='flag-5'>之路</b>戈<b class='flag-5'>20</b>挑戰(zhàn)賽,神眸AI智能影像實(shí)現(xiàn)全賽道守護(hù)實(shí)時(shí)直播

    Texas Instruments TDP20MB421四通道DisplayPort 2.1再驅(qū)動(dòng)器數(shù)據(jù)手冊(cè)

    Texas Instruments TDP20MB421四通道 DisplayPort 2.1復(fù)用器是四通道線(xiàn)性復(fù)用器,集成2:1 MUX。這款低功耗、高性能線(xiàn)性再驅(qū)動(dòng)器可支持 Dis
    的頭像 發(fā)表于 07-23 14:16 ?862次閱讀
    Texas Instruments TDP<b class='flag-5'>20</b>MB421四通道DisplayPort 2.1再<b class='flag-5'>驅(qū)動(dòng)</b>器數(shù)據(jù)手冊(cè)

    達(dá)實(shí)智能分享AI時(shí)代的心力驅(qū)動(dòng)之路

    近日,由知名媒體IP《首席訪(fǎng)談》發(fā)起成立的企業(yè)決策人社群“首席朋友圈”走進(jìn)達(dá)實(shí)智能,深入了解達(dá)實(shí)智能企業(yè)創(chuàng)新發(fā)展之路,共同探討企業(yè)家的“心力驅(qū)動(dòng)”實(shí)踐。
    的頭像 發(fā)表于 07-23 11:23 ?965次閱讀

    Texas Instruments TUSB1021-Q1 10Gbps線(xiàn)性轉(zhuǎn)接驅(qū)動(dòng)器多路復(fù)用器和多路解復(fù)用器數(shù)據(jù)手冊(cè)

    Texas Instruments TUSB1021-Q1 10Gbps線(xiàn)性轉(zhuǎn)接驅(qū)動(dòng)器多路復(fù)用器和解復(fù)用器是一款線(xiàn)性轉(zhuǎn)接驅(qū)動(dòng)器,具有1:2解復(fù)用
    的頭像 發(fā)表于 07-16 09:47 ?885次閱讀
    Texas Instruments TUSB1021-Q1 10Gbps線(xiàn)性轉(zhuǎn)接<b class='flag-5'>驅(qū)動(dòng)</b>器多路<b class='flag-5'>復(fù)用</b>器和多路解<b class='flag-5'>復(fù)用</b>器數(shù)據(jù)手冊(cè)

    Texas Instruments TMUXHS4512 2:1多路復(fù)用器/1:2解復(fù)用器開(kāi)關(guān)數(shù)據(jù)手冊(cè)

    Texas Instruments TMUXHS4512 2:1多路復(fù)用器/1:2解復(fù)用器開(kāi)關(guān)是與協(xié)議無(wú)關(guān)的高速雙向無(wú)源開(kāi)關(guān),采用復(fù)用或解復(fù)用兩種配置。這些開(kāi)關(guān)具有低導(dǎo)通電阻和低I/O
    的頭像 發(fā)表于 07-10 09:31 ?863次閱讀
    Texas Instruments TMUXHS4512 2:1多路<b class='flag-5'>復(fù)用</b>器/1:2解<b class='flag-5'>復(fù)用</b>器開(kāi)關(guān)數(shù)據(jù)手冊(cè)

    STM32L433VCT6 LCD復(fù)用引腳如何分配?

    背景:使用STM32L433VCT6驅(qū)動(dòng)段碼屏,33個(gè)段,其中用到一個(gè)PC10引腳,使用STM32CubeMX配置,只配置了LCD復(fù)用功能,但是用于LCD_SEG40還是LCD_SEG28,沒(méi)有指定。 數(shù)據(jù)手冊(cè): 問(wèn)題:如何
    發(fā)表于 06-20 08:26

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)
    的頭像 發(fā)表于 05-23 13:47 ?1144次閱讀
    RK3568<b class='flag-5'>驅(qū)動(dòng)</b>指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與<b class='flag-5'>pinctrl</b>子系統(tǒng)相結(jié)合實(shí)驗(yàn)

    迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng)實(shí)戰(zhàn):實(shí)現(xiàn)動(dòng)態(tài)切換引腳復(fù)用功能

    迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng)實(shí)戰(zhàn):實(shí)現(xiàn)動(dòng)態(tài)切換引腳復(fù)用功能
    的頭像 發(fā)表于 05-22 14:27 ?2283次閱讀
    迅為RK3568<b class='flag-5'>驅(qū)動(dòng)</b>指南GPIO子系統(tǒng)實(shí)戰(zhàn):實(shí)現(xiàn)動(dòng)態(tài)切換<b class='flag-5'>引腳</b><b class='flag-5'>復(fù)用</b>功能