SoC : : Architecture/: : i.MX

i.MX 9 BSP Porting Guide - Configuring IOMUX

Jay.P Morgan 2024. 4. 30. 23:38

 

  8.1  Intro

 

  i.MX 핀(또는 패드)을 사용하기 전에 원하는 기능을 선택하고 전압 레벨, drive strength, 히스테리시스 등 특성에 대한 올바른 값을 선택하십시오. IOMUX 컨트롤러에서 레지스터 세트를 구성할 수 있습니다.

 

  각 핀에 대한 자세한 내용은 " External Signals and Pin Multiplexing" 장을 참조하고, IOMUX 컨트롤러 블록에 대한 내용은 SoC Application References Manual의 " IOMUX Controller (IOMUXC)"를 참조하세요.

 

 

 

  8.1.1  Information for setting IOMUX controller registers

 

  IOMUX 컨트롤러에는 i.MX 6Dual/6Quad/6DualLite/6Solo/6SoloX/6 SoloLite/6UltraLite/7Dual 레지스터에 영향을 미치는 4개의 레지스터 세트가 포함되어 있습니다.

   • 범용 레지스터(IOMUUXC_GPRx): PLL 주파수, 전압 및 기타 범용 세트를 제어하는 레지스터로 구성됩니다.
   • "Daisy Chain" control 레지스터(IOMUXC_<Instance_port>_SELECT_INPUT): 둘 이상의 패드가 모듈의 입력을 구동할 수 있는 경우, 모듈에 대한 입력 경로를 제어합니다.
   • MUX 제어 레지스터(패드 모드 변경):
     * 패드의 8가지 기능(ALT 모드라고도 함) 중 어떤 기능을 사용할지 선택하십시오.

     * 다음 레지스터 중 하나를 사용하여 패드 기능을 개별적으로 또는 그룹별로 설정합니다.
         – IOMUXC_SW_MUX_CTL_PAD_<PAD NAME>
         – IOMUXC_SW_MUX_CTL_GRP_<GROUP NAME>
   • 패드 제어 레지스터(패드 특성 변경):
     * 다음 레지스터 중 하나를 사용하여 개별적으로 또는 그룹별로 패드 특성을 설정하십시오.
        – IOMUXC_SW_PAD_CTL_PAD_<PAD_NAME>
        – IOMUXC_SW_PAD_CTL_GRP_<GROUP NAME>
     * 패드 특성은 다음과 같습니다.
         – SRE(1비트 슬루율 제어): 슬루율 제어 비트; FAST/SLOW 슬루율 출력 중에서 선택합니다. 고주파수 설계에는 빠른 슬루율이 사용됩니다.
         – DSE(2비트 drive strength 제어): 드라이브 강도 제어 비트; 드라이브 강도(낮음, 중간, 높음 또는 최대)를 선택합니다.
         – ODE(1비트 오픈 드레인 제어): 오픈 드레인 활성화 비트; 오픈 드레인 또는 CMOS 출력을 선택합니다.
         – HYS(1비트 히스테리시스 제어): 패드가 입력일 때 CMOS 또는 슈미트 트리거 중에서 선택합니다.
         – PUS(2비트 풀업/다운 구성 값): 풀업 또는 다운과 해당 값을 선택합니다.
         – PUE(1비트 pull/keep 선택): 풀업 또는 키퍼 중에서 선택합니다. 키퍼 회로는 핀이 더 이상 구동되지 않을 때 핀이 마지막 로직 상태를 유지하도록 도와줍니다.
         – PKE(1비트 풀업, 풀다운 또는 키퍼 기능 활성화/비활성화): 풀업, 풀다운 또는 키퍼를 활성화 또는 비활성화합니다.
         – DDR_MODE_SEL(1비트 ddr_mode 제어): DDR 메모리를 인터페이스할 때 필요합니다.
         – DDR_INPUT(1비트 ddr_input 제어): DDR 메모리를 인터페이스할 때 필요합니다.

 

 

  8.1. 2  Using IOMUX in the Device Tree - example

 

    다음 예에서는 장치 트리에서 IOMUX를 사용하는 방법을 보여줍니다.

usdhc@0219c000 { /* uSDHC4 */
 fsl,card-wired;
 vmmc-supply = <&reg_3p3v>;
 status = "okay";  pinctrl-names = "default";  pinctrl-0 = <&pinctrl_usdhc4_1>;
};
iomuxc@020e0000 {
 compatible = "fsl,imx6q-iomuxc";  reg = <0x020e0000 0x4000>;
 /* shared pinctrl settings */
 usdhc4 {
         pinctrl_usdhc4_1: usdhc4grp-1 {
                 fsl,pins = <
                         MX6QDL_PAD_SD4_CMD__SD4_CMD    0x17059
                         MX6QDL_PAD_SD4_CLK__SD4_CLK    0x10059
                         MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
                         MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
                         MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
                         MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
                         MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
                         MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
                         MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
                         MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
                 >;
         };
 };  ....
};

 

    추가 세부사항을 아래에서 확인하세요:

   Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt

   Documentation/devicetree/bindings/pinctrl/fsl,imx6*-pinctrl.txt

   Documentation/devicetree/bindings/pinctrl/fsl,imx7*-pinctrl.txt

   Documentation/devicetree/bindings/pinctrl/fsl,imx8qm-pinctrl.txt

   Documentation/devicetree/bindings/pinctrl/fsl,imx8qxp-pinctrl.txt