SPI.transfer()

Transfer and recieve a single byte or an array of data which is stored in a buffer.

Syntax

receivedVal = SPI.transfer(val)
SPI.transfer(buffer, size) // C++ Format
recivedBuff = SPI.transfer(buffer, size) // JavaScript Format

SPI.transfer16() currently hasn't been implemented

Parameters

val:
The byte to send out over the bus

buffer:
The array of data to be transferred

size:
Number of bytes to transfer

Returns

The received data

Example

Javascript

const linuxduino = require('linuxduino');

// Testing spi transfer()
(async() => {
  // Wait for wasm file
  await linuxduino.ready;
  
  // Open SPI port
  SPI = new linuxduino.SPI();
  SPI.begin("/dev/spidev0.0");

  // Set SPI Settings
  SPI.setClockDivider(linuxduino.SPI_CLOCK_DIV64);
  SPI.setBitOrder(linuxduino.MSBFIRST);
  SPI.setDataMode(linuxduino.SPI_MODE3);

  // Test transfer(buffer, len)
  var msg = "Hello World!\n";
  var rx = SPI.transfer(msg, msg.length);   // Send Hello World!\n
  process.stdout.write("Data Recieved = "); 
  for (var i=0; i<rx.length; i++){
      process.stdout.write(rx.charAt(i));
  }
  process.stdout.write("\n");

  // Test transfer(buffer, len)
  var msg2 = Buffer.from([0x41, 0x0A]);
  var rx = SPI.transfer(msg2, msg2.length);   // Send A\n
  process.stdout.write("Data Recieved = "); 
  for (var i=0; i<rx.length; i++){
      process.stdout.write(rx.charAt(i));
  }
  process.stdout.write("\n");


  // Test transfer(byte)
  var ret; 
  ret = SPI.transfer(0x42); // Send 'B'
  console.log("Data Recieved = "+String.fromCharCode(ret));
  ret = SPI.transfer(0x0A); // Send '\n'
  console.log("Data Recieved = "+String.fromCharCode(ret));

  SPI.end(); 
})();

Run it

sudo node spi_transfer.js

C++

#include "Linuxduino.h"

// Testing spi transfer()
int main(void) {

    // Open SPI port
    SPI.begin("/dev/spidev0.0");

    // Set SPI Settings
    SPI.setClockDivider(SPI_CLOCK_DIV64);
    SPI.setBitOrder(MSBFIRST);
    SPI.setDataMode(SPI_MODE3);

    // Test transfer(buffer, len)
    char msg[] = "Hello World!\n";
    SPI.transfer(msg, strlen(msg)); // Send Hello World!\n
    printf("Data Recieved = ");
    for (unsigned int i=0; i<strlen(msg); i++){
         printf("%c",msg[i]);
    }
    printf("\n");

    // Test transfer(buffer, len)
    char msg2[2] = {0x41, 0x0A};
    SPI.transfer(msg2, 2); // Send A\n
    printf("Data Recieved = ");
    for (unsigned int i=0; i<strlen(msg); i++){
         printf("%c",msg[i]);
    }
    printf("\n");

    // Test transfer(byte)
    char ret;
    ret = SPI.transfer(0x42); // Send 'B'
    printf("Data Recieved = %c\n", ret);
    ret = SPI.transfer(0x0A); // Send '\n'
    printf("Data Recieved = %c\n", ret);

    SPI.end(); 
    return 1;
}

Run it

g++ spi_transfer.cpp -o spi_transfer -llxduino
sudo ./spi_transfer