UART 상태정보 확인


pid_ioctl함수의 get명령어로 UART의 각종 상태를 확인 할 수 있습니다.

$return = pid_ioctl($pid, "get ITEM");

확인 가능한 UART 상태정보

ITEM 설명 반환 값 반환 형식
baud 통신속도[bps] 예) 9600 정수
parity 패리티 0 / 1 / 2 / 3 / 4 정수
data 데이터비트[bit] 8 / 7 정수
stop 정지비트[bit] 1 / 2 정수
flowctrl 흐름제어 0 / 1 / 2 / 3 정수
txbuf 송신버퍼 크기[Byte] 예) 1024 정수
txfree 송신버퍼 여유공간[Byte] 예) 1024 정수
count tx 누적 송신 데이터 카운트[Byte] 예) 65535 정수
rxbuf 수신버퍼 크기[Byte] 예) 1024 정수
rxlen 수신 데이터 크기[Byte] 예) 10 정수
count rx 누적 수신 데이터 카운트[Byte] 예) 65535 정수

UART 상태정보 확인 예

UART의 현재 설정 값은 다음과 같이 확인 할 수 있습니다.

<?php
$pid = pid_open("/mmap/uart0");              // 0번 UART 열기
$baud = pid_ioctl($pid, "get baud");         // 통신속도
$parity = pid_ioctl($pid, "get parity");     // 패리티
$data = pid_ioctl($pid, "get data");         // 데이터비트
$stop = pid_ioctl($pid, "get stop");         // 정지비트
$flowctrl = pid_ioctl($pid, "get flowctrl"); // 흐름제어
echo "baud = $baud\r\n";                     // 출력 예: baud = 9600
echo "parity = $parity\r\n";                 // 출력 예: parity = 0
echo "data = $data\r\n";                     // 출력 예: data = 8
echo "stop = $stop\r\n";                     // 출력 예: stop = 1
echo "flowctrl = $flowctrl\r\n";             // 출력 예: flowctrl = 0
?>

송신버퍼에 남아있는 데이터 크기

UART의 송신버퍼에 남아있는 데이터 크기는 다음과 같이 계산할 수 있습니다.

송신버퍼에 남아있는 데이터 크기 = 송신버퍼 크기 - 송신버퍼 여유공간

사용 예

이 예제는 0번 UART에 10바이트를 전송하고, 송신버퍼에 남아있는 데이터 크기를 계산하여 출력합니다.

<?php
$txlen = -1;
$data = "0123456789";
$pid = pid_open("/mmap/uart0");      // 0번 UART 열기
pid_ioctl($pid, "set baud 9600");    // 통신속도 9600 bps
pid_ioctl($pid, "set parity 0");     // 패리티 사용 안 함
pid_ioctl($pid, "set data 8");       // 데이터 비트 8
pid_ioctl($pid, "set stop 1");       // 정지 비트 1
pid_ioctl($pid, "set flowctrl 0");   // 흐름제어 사용 안 함
pid_write($pid, $data);              // UART에 데이터($data) 송신
while($txlen)
{
    $txbuf = pid_ioctl($pid, "get txbuf");    // 송신버퍼 크기 확인
    $txfree = pid_ioctl($pid, "get txfree");  // 송신버퍼 여유공간 확인
    $txlen = $txbuf - $txfree;       // 송신버퍼에 남아있는 데이터 크기 계산
    echo "tx len = $txlen\r\n";      // 송신버퍼에 남아있는 데이터 크기 출력
    usleep(1000);
}
pid_close($pid);
?>

수신 데이터 크기

UART가 수신한 데이터 크기는 다음과 같이 확인 할 수 있습니다.

$rxlen = pid_ioctl($pid, "get rxlen[ $string]");

특정 문자(열)까지 수신한 데이터 크기 확인하기

rxlen명령어 뒤에 특정 문자열($string)을 입력하면 pid_ioctl함수는 해당 문자열이 들어오기 전까지는 0을 반환하다가 해당 문자열이 들어오면 그 문자열까지의 수신 데이터 크기를 반환합니다.

수신버퍼 여유공간

UART의 수신버퍼 여유공간은 다음과 같이 계산할 수 있습니다.

수신버퍼 여유공간 = 수신버퍼 크기 - 수신 데이터 크기

사용 예

이 예제는 0번 UART의 수신버퍼의 여유공간을 계산하여 출력합니다.

<?php
$rdata = "";
$pid = pid_open("/mmap/uart0");        // 0번 시리얼포트 열기
pid_ioctl($pid, "set baud 9600");      // 통신속도 9600 bps
pid_ioctl($pid, "set parity 0");       // 패리티 사용 안 함
pid_ioctl($pid, "set data 8");         // 데이터 비트 8
pid_ioctl($pid, "set stop 1");         // 정지 비트 1
pid_ioctl($pid, "set flowctrl 0");     // 흐름제어 사용 안 함
$rxbuf = pid_ioctl($pid, "get rxbuf"); // 수신버퍼 크기 확인
$rxlen = pid_ioctl($pid, "get rxlen"); // 수신 데이터 크기 확인
$rxfree = $rxbuf - $rxlen;             // 수신버퍼 여유공간 계산
echo "rxfree = $rxfree\r\n";           // 수신버퍼 여유공간 출력
pid_close($pid);
?>