Примеры использования SPI


Запись данных в ведомое устройство

Нижеследующий код является распространенным примером того, что мастер SPI записывает данные в подчиненное устройство.

Пример записи данных

$wbuf = 0xA2;                       // Data to be sent
$rbuf = "";

$pid = pid_open("/mmap/spi0");      // open SPI0
pid_ioctl($pid, "set mode 3");      // set SPI mode to 3
pid_ioctl($pid, "set lsb 0");       // set bit transmission order: MSB first
pid_write($pid, $wbuf, 1);          // write 1 byte to buffer: 0xA2
pid_ioctl($pid, "req start");       // request to write data
while(pid_ioctl($pid, "get txlen")) // check the size of transmitted data
    ;
pid_read($pid, $rbuf, 1);           // read 1 byte
pid_close($pid);

Причина чтения 1 байта в нижней части выщеприведенного примера состоит в том, что чтение и запись данных одновременно выполняются в связи SPI.

Чтение данных с ведомого устройства

Следующий пример является распространенным примером того, что мастер SPI читает данные с подчиненного устройства.

Пример чтения данных

$wbuf = 0x00;                       // Data to be sent
$rbuf = "";

$pid = pid_open("/mmap/spi0");      // open SPI0
pid_ioctl($pid, "set mode 3");      // set SPI mode to 3
pid_ioctl($pid, "set lsb 0");       // set bit transmission order: MSB first
pid_write($pid, $wbuf, 1);          // write 1 byte to buffer: 0x00
pid_ioctl($pid, "req start");       // request to write data
while(pid_ioctl($pid, "get txlen")) // check the size of transmitted data
    ;
pid_read($pid, $rbuf, 1);           // read 1 byte
pid_close($pid);