• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統(tǒng)之Pinctrl子系統(tǒng)

03/22 08:40
288
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

pinctrl(Pin Control)子系統(tǒng)是Linux內(nèi)核中的一個模塊化子系統(tǒng),用于管理和控制硬件引腳(Pin)的配置和功能。它提供了一種統(tǒng)一的接口,使驅(qū)動程序可以對硬件引腳進行靈活的配置和控制。

pinctrl子系統(tǒng)的主要目的是將引腳的配置和控制與設(shè)備驅(qū)動程序的實現(xiàn)分離開來,從而提高驅(qū)動程序的可移植性和可重用性。通過使用pinctrl子系統(tǒng),設(shè)備驅(qū)動程序可以獨立于特定的硬件平臺,并在不同的平臺上共享或重新使用。

pinctrl子系統(tǒng)的核心是pinctrl核心層和pinctrl驅(qū)動程序兩個部分:

pinctrl核心層:提供了pinctrl子系統(tǒng)的核心功能,包括設(shè)備引腳的注冊、配置和控制等。它負責管理所有的pinctrl驅(qū)動程序和設(shè)備引腳配置數(shù)據(jù),并為設(shè)備驅(qū)動程序提供統(tǒng)一的接口。

pinctrl驅(qū)動程序:每個特定的硬件平臺都需要相應(yīng)的pinctrl驅(qū)動程序來管理和控制硬件引腳。這些驅(qū)動程序負責與硬件平臺的引腳控制器交互,執(zhí)行引腳的配置和控制操作。每個pinctrl驅(qū)動程序通常與特定的硬件平臺或芯片系列相關(guān)聯(lián)。

i.MX6ULL的pinctrl子系統(tǒng)具有以下特點和功能:

一、引腳配置:pinctrl子系統(tǒng)允許驅(qū)動程序?qū)γ總€引腳進行靈活的配置。它提供了一組接口,允許驅(qū)動程序選擇引腳的功能、復(fù)用模式和電氣屬性。通過配置pinctrl,驅(qū)動程序可以將引腳用于不同的外設(shè)接口,例如UART、SPII2C、GPIO等。

二、引腳復(fù)用:i.MX6ULL支持引腳的多功能復(fù)用,即一個引腳可以用于多種不同的功能。pinctrl子系統(tǒng)允許驅(qū)動程序?qū)⒁_設(shè)置為特定功能的輸入或輸出,以適應(yīng)不同的外設(shè)連接需求。

三、中斷控制:對于支持中斷的引腳,pinctrl 子系統(tǒng)提供了接口用于配置中斷模式和觸發(fā)方式。這使得 i.MX6ULL 能夠與外部設(shè)備進行有效的中斷信號傳遞和處理。

四、狀態(tài)保存和恢復(fù):pinctrl 子系統(tǒng)支持狀態(tài)的保存和恢復(fù),以便在系統(tǒng)休眠和喚醒過程中保持引腳配置的一致性。

i.MX6ULL的引腳描述使用設(shè)備樹來定義。設(shè)備樹中定義了引腳的功能選項、復(fù)用模式、電氣屬性等信息。通過設(shè)備樹,可以將引腳與相應(yīng)的功能關(guān)聯(lián)起來。也就是前面將的IOMUX。

在設(shè)備樹中的體現(xiàn)形式如下:

&iomuxc {

????????pinctrl-names = "default";

????????pinctrl-0 = <&pinctrl_hog_1>;

????????imx6ul-evk {

????????????????pinctrl_hog_1: hoggrp-1 {

????????????????????????fsl,pins = <

????????????????????????????????MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 ??????0x17059 /* SD1 CD */

????????????????????????????????MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT ???0x17059 /* SD1 VSELECT */

????????????????????????????????MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 ???????0x17059 /* SD1 RESET */

????????????????????????>;

????????????????};

......

pinctrl_i2c1: i2c1grp {

????????????????????????fsl,pins = <

????????????????????????????????MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0

????????????????????????????????MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0

????????????????????????>;

????????????????};

......

????????????????pinctrl_uart1: uart1grp {

????????????????????????fsl,pins = <

????????????????????????????????MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1

????????????????????????????????MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1

????????????????????????>;

????????????????};

.....

}

可以看出在iomux節(jié)點中定義了各個引腳的復(fù)用功能,需要注意的是一個引腳只能復(fù)用成一種功能,所以在添加引腳復(fù)用時一定要檢查,其它地方有沒有用到選用的引腳,如果選用了要將其屏蔽掉,避免復(fù)用沖突。

相關(guān)推薦