핀먹스 (Pinmux, Pin Multiplexer) 개념

Mux (Multiplexer)

pinmux는 pin을 mux하는 것이다. 따라서 pinmux를 이해하기 위해서는 먼저 mux를 이해할 필요가 있다.

디지털 논리회로 중 mux(멀티플렉서)라고 있다. Select신호를 이용하여 여러 개의 입력 중 하나를 선택하는 장치다. 아래 그림은 입력이 두개, 출력이 하나인 2X1 MUX다. SELECT신호가 0이면 OUTPUT은 입력 신호 중 하나인 A가 출력되고 SELECT신호가 1이면 B가 출력된다.

Pinmux (Pin Multiplexer)

아두이노의 ADC에 센서를 연결하면 센서값을 읽어올 수 있다. 이때 외부의 센서와 아두이노가 물리적으로 연결되는 것이 pin이다. 아래 그림은 아두이노의 pinmap으로 각 pin들을 설명하고 있다.

https://coolcomponents.co.uk/products/arduino-uno-revision-3

아두이노도 핀들이 많지만 다양한 기능을 가지는 SoC는 훨씬 많은 핀들이 요구될 수 있다. 핀이 늘어나면 패키지 사이즈(SoC의 물리적 크기)도 당연히 늘어날 수밖에 없는데, 전자제품의 소형화를 원하는 세상은 큰 패키지사이즈를 용납할 수 없다. 그래서 이 딜레마를 해결하기 위해 사용자가 핀을 커스터마이징 할 수 있는 pinmux를 사용한다.

예를 들어 어떤 SoC에 GPIO 10개, UART 10개, I2C 10개가 있고, GPIO, UART, I2C 하나당 하나의 핀이 필요하다고 하자. 그렇다면 SoC에는 총 30개의 핀이 있어야 하지만 10개의 핀만 만들어둔다. 그리고 GPIO를 10개 사용하던지 UART를 10개 사용하던지 GPIO 5개와 UART 5개를 사용하던지 사용자가 10개의 핀 안에서 자유롭게 사용할 기능을 선택할 수 있게 한다. 물론 이렇게 하면 핀이 10개밖에 없기 때문에 30개의 기능을 모두 사용하지는 못한다. 혹시 모를 약간의 리스크를 감수하고 핀의 개수를 줄일 수 있다. 경험상 일반적으로 모든 핀을 pinmux로 설정할 수 있게 하는게 아닌 일부 기능들을 pinmux로 설정하게 한다.

pinmux는 소프트웨어로 pin을 선택한다. 아래 AT03262의 데이터시트를 보면 pinmux 사용 예제가 나오는데, 핀을 GPIO에 할당한 것을 볼 수 있다.

*AT03262는 칩 자체가 Pinmux인것 같지만 딱히 다른 예제를 못 찾아서 가져왔다.

pinmux를 제공하는 SoC는 데이터시트에 pinmux 할당 방법이 나와있기 때문에 참고하면 된다.

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42121-SAM-Pin-Multiplexer-PINMUX-Driver_ApplicationNote_AT03262.pdf

칩 제조사에서 pinmux 툴을 제공해주는 경우도 있는 것 같다.

https://www.ti.com/tool/PINMUXTOOL

Leave a Comment