디지털 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 |
입력포트 풀 업은 입력포트의 유휴 상태를 HIGH로 만들 때 사용합니다. 입력포트를 풀 업 시키기 위해서는 디지털 입력의 TYPE을 in_pu로 설정합니다.
입력포트 풀 다운은 입력포트의 유휴 상태를 LOW로 만들 때 사용합니다. 입력포트를 풀 다운 시키기 위해서는 디지털 입력의 TYPE을 in_pd로 설정합니다.
출력포트 푸쉬 풀은 출력포트의 상태가 ON일때 HIGH를, OFF일때 LOW를 출력하는 가장 기본적인 출력모드입니다. 출력포트를 푸쉬 풀 방식으로 사용하기 위해서는 디지털 출력의 TYPE을 out_pp로 설정합니다.
출력포트 외부에 전원공급원을 연결하고자 할 때 이 방식을 사용합니다. 만약 이 방식을 사용할 때 외부에 전원공급원을 연결하지 않으면 PHPoC의 출력이 OFF일때는 포트 외부 출력이 LOW가 되지만 PHPoC의 출력이 ON일때는 외부 출력이 알 수 없는(Unknown) 상태가 됩니다. 따라서 외부 저항을 이용해 해당 포트를 풀 업(Pull-Up) 해줘야 합니다.
출력포트를 오픈 드레인 방식으로 사용하기 위해서는 디지털 출력의 TYPE을 out_od로 설정합니다.
디지털 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은 두 개 이상의 출력 핀에 동시에 설정할 수 없습니다.
<?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 설정
?>
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포트는 출력 제한이 자동으로 설정 됩니다.