디지털 I/O 설정


디지털 I/O를 사용하기 전에 반드시 어떤 용도로 사용할 것인지를 설정 해야 합니다. 설정을 위해서는 pid_ioctl함수의 set명령을 사용합니다.

pid_ioctl($pid, "set N1[-N2] mode TYPE");

N1과 N2는 설정할 디지털 I/O의 포트번호의 범위를 나타냅니다. 단일 포트를 설정하는 경우에는 N2를 생략할 수 있습니다.

입/출력 설정

TYPE에 설정 가능한 디지털 I/O의 입/출력 종류는 다음과 같습니다.

TYPE 설명
in 디지털 입력
in_pu 디지털 입력: 풀 업(Pull-Up)
in_pd 디지털 입력: 풀 다운(Pull-Down)
out - 디지털 출력
low 디지털 출력: 초기 값 LOW
high 디지털 출력: 초기 값 HIGH
toggle 디지털 출력: 초기 값 TOGGLE
out_pp - 디지털 출력: 푸쉬 풀(Push-Pull)
low 디지털 출력: 푸쉬 풀 + 초기 값 LOW
high 디지털 출력: 푸쉬 풀 + 초기 값 HIGH
toggle 디지털 출력: 푸쉬 풀 + 초기 값 TOGGLE
out_od - 디지털 출력: 오픈 드레인(Open-Drain)
low 디지털 출력: 오픈 드레인 + 초기 값 LOW
high 디지털 출력: 오픈 드레인 + 초기 값 HIGH
toggle 디지털 출력: 오픈 드레인 + 초기 값 TOGGLE

입력포트 풀 업(Pull-Up)

입력포트 풀 업은 입력포트의 유휴 상태를 HIGH로 만들 때 사용합니다. 입력포트를 풀 업 시키기 위해서는 디지털 입력의 TYPE을 in_pu로 설정합니다.

입력포트 풀 다운(Pull-Down)

입력포트 풀 다운은 입력포트의 유휴 상태를 LOW로 만들 때 사용합니다. 입력포트를 풀 다운 시키기 위해서는 디지털 입력의 TYPE을 in_pd로 설정합니다.

출력포트 푸쉬 풀(Push-Pull)

출력포트 푸쉬 풀은 출력포트의 상태가 ON일때 HIGH를, OFF일때 LOW를 출력하는 가장 기본적인 출력모드입니다. 출력포트를 푸쉬 풀 방식으로 사용하기 위해서는 디지털 출력의 TYPE을 out_pp로 설정합니다.

출력포트 오픈 드레인(Open-Drain)

출력포트 외부에 전원공급원을 연결하고자 할 때 이 방식을 사용합니다. 만약 이 방식을 사용할 때 외부에 전원공급원을 연결하지 않으면 PHPoC의 출력이 OFF일때는 포트 외부 출력이 LOW가 되지만 PHPoC의 출력이 ON일때는 외부 출력이 알 수 없는(Unknown) 상태가 됩니다. 따라서 외부 저항을 이용해 해당 포트를 풀 업(Pull-Up) 해줘야 합니다.

출력포트를 오픈 드레인 방식으로 사용하기 위해서는 디지털 출력의 TYPE을 out_od로 설정합니다.

LED 설정

디지털 I/O는 LED로 설정할 수 있습니다. TYPE에 설정 가능한 LED 종류는 다음과 같습니다.

TYPE 설명
led_sts 시스템 상태 LED
led_net0_act / led_net1_act NET(net0 - 유선, net1 - 무선)링크 활성화 LED:
- NET이 네트워크에 정상적으로 연결된 경우 LOW
- 네트워크 데이터를 송신 또는 수신하는 순간 HIGH
led_net0_link / led_net1_link NET 링크 LED: 네트워크 연결 시 LOW
led_net0_rx / led_net1_rx NET 수신 LED: 네트워크로부터 데이터를 수신하는 순간 LOW
led_net0_tx / led_net1_tx NET 송신 LED: 네트워크로 데이터를 송신하는 순간 LOW

※ 각 led Type은 두 개 이상의 출력 핀에 동시에 설정할 수 없습니다.

디지털 I/O종류 설정 예

<?php
$pid = pid_open("/mmap/uio0");                // 디지털 I/O 열기
pid_ioctl($pid, "set 0 mode in");             // 0번 입력 설정
pid_ioctl($pid, "set 1 mode in_pu");          // 1번 입력 설정: 풀 업
pid_ioctl($pid, "set 2 mode in_pd");          // 2번 입력 설정: 풀 다운
pid_ioctl($pid, "set 3-6 mode out");          // 3~6번 출력 설정
pid_ioctl($pid, "set 7-9 mode out high");     // 7~9번 출력 설정: HIGH
pid_ioctl($pid, "set 10 mode out low");       // 10번 출력 설정: LOW
pid_ioctl($pid, "set 11 mode out_pp high");   // 11번 출력 설정: 푸쉬 풀
pid_ioctl($pid, "set 12 mode out_od low");    // 12번 출력 설정: 오픈 드레인
pid_ioctl($pid, "set 13 mode led_net0_link"); // 13번 NET 링크 LED 설정
pid_ioctl($pid, "set 14 mode led_net0_rx");   // 14번 NET 수신 LED 설정
pid_ioctl($pid, "set 15 mode led_net0_tx");   // 15번 NET 송신 LED 설정
?>

디지털 I/O 출력 제한 설정

pid_ioctl함수를 이용해 디지털 I/O의 출력을 제한하거나 허용할 수 있습니다. 출력 제한이 설정되면 설정이 해제되기 전 까지 해당 포트로의 출력 명령은 적용되지 않습니다.

pid_ioctl($pid, "set N1[-N2] lock"); // 출력 제한
pid_ioctl($pid, "set N1[-N2] unlock"); // 출력 허용

※ 주의: 디지털 I/O는 기본적으로 출력 허용 상태입니다. 단, ST, UART, SPI 및 I2C등 디지털 I/O포트를 같이 사용하는 디바이스들이 사용 되었거나 이미 led 유형으로 설정 된 디지털 I/O포트는 출력 제한이 자동으로 설정 됩니다.