• 正文
  • 相關推薦
申請入駐 產業(yè)圖譜

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

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

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

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

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

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

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

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

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

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

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

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

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

在設備樹中的體現(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é)點中定義了各個引腳的復用功能,需要注意的是一個引腳只能復用成一種功能,所以在添加引腳復用時一定要檢查,其它地方有沒有用到選用的引腳,如果選用了要將其屏蔽掉,避免復用沖突。

相關推薦