天天看點

i.MX6 pinctrl解析

一、Pin Controller主要工作

  • pin multiplexing:基于ARM core的嵌入式處理器一般會提供豐富的功能,例如camera interface、LCD interface、USB、I2C、SPI等等。雖然處理器有幾百個pin,但是這些pin還是不夠配置設定,是以有些pin需要複用。
  • pin configuration:這些配置參數包括:pull-up/down電阻的設定, tri-state設定,drive-strength的設定。

注:每個pin controller在dts中應該隻表示一個node,詳見dts。

二、以

imx6qp.dts

配置UART為例

/* UART devices*/

&uart1 {
    pinctrl-names = "default";
    pinctrl- = <&pinctrl_uart1>;
    status = "okay";
};

pinctrl_uart1: uart1grp {
    fsl,pins = <
        MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA    
        MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA    
>;
};
           

<Kernel_Dir>arch\arm\boot\dts\imx6q-pinfunc.h

中對上述宏的定義如下:

//<mux_regconf_reginput_regmux_modeinput_val>

#define MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA        0x280 0x650 0x000 0x3 0x0
#define MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA        0x284 0x654 0x8fc 0x3 0x1
           

其中

MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA

每個值的定義如下:

  • mux_reg: mux_ctrl_ofs = 0x284;
  • conf_reg: pad_ctrl_ofs = 0x654;
  • input_reg: sel_input_ofs = 0x8fc;
  • mux_mode = 0x3;
  • sel_input:input_value = 0x1;
  • pad_ctrl = 0x1b0b1l;

具體值定義的解釋如下:

參數 含義
_mux_ctrl_ofs MUX控制寄存器的偏移位址(16進制), 用于選擇引腳的功能
_pad_ctrl_ofs 控制寄存器的偏移位址(16進制)
_select_input_ofs SELECT_INPUT寄存器偏移位址(16進制)
_mux_mode MUX模式,bit0~3,範圍0~7
_select_input Daisy Chain模式, bit0~1,範圍0~3
_pad_ctrl 控制寄存器的值

三、查找對應的寄存器的值

我們隻知道在硬體電路上使用了uart1來做為調試口,使用了

CSI0_DAT10(TX)

CSI0_DAT11(RX)

兩個管腳。此處以配置

CSI0_DAT11

腳為uart1的RX功能為例。

檢視晶片手冊”iMX6DQPRM.pdf”引腳複用以及配置的功能在”External Signals and Pin Multiplexing”章節都能夠索引到。步驟如下:

i.MX6 pinctrl解析

1、在Pin Assignments中可以找到配置

CSI0_DAT11

引腳對應的寄存器

i.MX6 pinctrl解析

從中我們知道,要配置該引腳為

UART1_RX_DATA

功能,那麼需要設定

Mode=ALT3

,與之對應的寄存器為

SW_PAD_CTL_PAD_CSI0_DATA11

2、SW_PAD_CTL_PAD_CSI0_DATA11寄存器

i.MX6 pinctrl解析

從上面的資訊可知,這個寄存器的

offset=0x654

,複位後的

config=0x0001b01b0

是以,我們就知道在dts中需要填入以下資訊。

conf_reg: pad_ctrl_ofs = 0x654;

pad_ctrl = 0x1b0b0+0x01(Set SRE=1) = 0x1b0b1;

3、查找

CSI0_DAT11

引腳複用的資訊

回到”External Signals and Pin Multiplexing”章節,在Muxing Options 中找到配置

CSI0_DAT11

引腳複用的資訊,需将

ALT3

帶入查找。

i.MX6 pinctrl解析

可知我們需要配置兩個寄存器:

IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA11

IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT

4、IOMUXC_SW_MUX_CTL_PAD_CSI0_DATA11寄存器

i.MX6 pinctrl解析

從上面的資訊可知,這個寄存器的

offset=0x284

,想要使用

UART1_RX_DATA

的功能,需要設定

MUX_MODE=ALT3=011

,是以dts需做如下配置:

mux_reg: mux_ctrl_ofs = 0x284;

mux_mode = 0x3;

5、IOMUXC_UART1_UART_RX_DATA_SELECT_INPUT寄存器

i.MX6 pinctrl解析

從上面的資訊可知,這個寄存器的

offset=0x920

,想要使用

UART1_RX_DATA

的功能,需要設定

DAISY=01

,是以dts需做如下配置:

input_reg: sel_input_ofs = 0x920;

sel_input:input_value = 0x1;

至此,dts中關于

CSI0_DAT11

引腳配置為

UART1_RX_DATA

功能的配置就完成了。

PINS-TOOL-IMX

FSL 為i.MX6系列晶片的引腳配置提供了一個PINS-TOOL-IMX的軟體,可以在下面的路徑下載下傳:

http://www.nxp.com/products/software-and-tools/software-development-tools/processor-expert-and-embedded-components/software-suites/pins-tool-for-i.mx-application-processors:PINS-TOOL-IMX

參考資料

1、Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt

2、Documentation/pinctrl.txt

3、http://blog.csdn.net/michaelcao1980/article/details/50730421

上一篇: i.MX6 GPIO配置
下一篇: i.MX6移植QT

繼續閱讀