Использование UART


Чтение данных

Данные, полученные с UART, сохраняются в буфере приема. Для чтения данных необходима функция pid_read.

use uart 1

Ниже показано, как использовать функцию pid_read.

pid_read($pid, $var[, $len]);

Аргумент $var - это переменная для сохранения прочитанных данных, а $len - это размер прочитанных данных.

Пример

Данный пример проверяет и выводит полученные данные в UART каждую секунду.

$rdata = "";
$pid = pid_open("/mmap/uart0");             // open UART 0
pid_ioctl($pid, "set baud 9600");           // baud rate: 9600bps
pid_ioctl($pid, "set parity 0");            // parity: none
pid_ioctl($pid, "set data 8");              // data bit: 8
pid_ioctl($pid, "set stop 1");              // stop bit: 1
$rxbuf = pid_ioctl($pid, "get rxbuf");      // get size of receive buffer
while(1)
{
    $rxlen = pid_ioctl($pid, "get rxlen");  // get size of received data 
    $rx_free = $rxbuf - $rxlen;             // get remaining size
    echo "$rx_free / $rxbuf\r\n";           // print remaining size
    $len = pid_read($pid, $rdata, $rxlen);  // read data
    echo "len = $len / ";                   // print size of read data
    echo "rdata = $rdata\r\n";              // print read data
    sleep(1);
}
pid_close($pid);

Отправка данных

Данные, записанные функцией pid_write, хранятся в буфере отправки и передаются внешне через UART.

use uart 2

Ниже показано, как использовать функцию pid_write.

pid_write($pid, $var[, $wlen]);

Аргумент $var - это переменная, содержащая данные для отправки, а $wlen - размер отправляемых данных.

Пример

В данном примере каждую секунду выводится оставшийся размер буфера отправки и длина отправляемых данных.

$sdata = "0123456789";
$pid = pid_open("/mmap/uart0");               // open UART 0
pid_ioctl($pid, "set baud 9600");             // baud rate: 9600bps
$txbuf = pid_ioctl($pid, "get txbuf");        // get size of send buffer
while(1)
{
    $txfree = pid_ioctl($pid, "get txfree");  // get remaining size
    echo "txfree = $txfree\r\n";              // print remaining size
    $len = pid_write($pid, $sdata, $txfree);  // write data
    echo "len = $len\r\n";                    // print length of data sent
    sleep(1);
}
pid_close($pid);

Третий аргумент функции pid_write означает длину записи данных. Длина записи данных должна быть меньше, чем оставшийся размер данных буфера отправки (во избежание потери данных). Настоятельно рекомендуется проверить оставшийся размер буфера отправки перед отправкой данных.