Hi,
connecting rpi and arduino via spi
transmitting bytes from arduino after receiving byte(0xFE) from rpi. its working fine but im receiving like this. mention my mistake.
Thanks
AA
FE
AB
FE
FE
AC
FE
FE
FE
FE
AD
AE
FE
FE
AF
B0
FE
FE
FE
FE
FE
B1
FE
FE
FE
FE
FE
FE
FE
FE
B2
static const char *device = "/dev/spidev0.0";
static uint8_t mode;
static uint8_t bits = 8;
static uint32_t speed = 500000;
static uint16_t delay;
static void transfer(int fd)
{
int ret;
uint8_t tx[] = {0xFE};
uint8_t rx[ARRAY_SIZE(tx)] = {0,};
struct spi_ioc_transfer tr = {
.tx_buf = (unsigned long)tx,
.rx_buf = (unsigned long)rx,
.len = ARRAY_SIZE(tx),
.delay_usecs = delay,
.speed_hz = speed,
.bits_per_word = bits,
};
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
if (ret < 1)
pabort("can't send spi message");
for (ret = 0; ret < ARRAY_SIZE(rx); ret++)
{
printf("%.2X ", rx[ret]);
}
puts("");
}
.
.
.
while(1)
{
transfer(fd);
}
Arduino code:
#include <SPI.h>
#define st_byte 254
char buf [100];
char data[]= {0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0XB4};
volatile byte pos;
volatile boolean process_it;
void setup (void)
{
Serial.begin (115200); // debugging
// have to send on master in, *slave out*
pinMode(MISO, OUTPUT);
// turn on SPI in slave mode
SPCR |= _BV(SPE);
// get ready for an interrupt
pos = 0; // buffer empty
process_it = false;
// now turn on interrupts
SPI.attachInterrupt();
} // end of setup
// SPI interrupt routine
ISR (SPI_STC_vect)
{
byte c = SPDR; // grab byte from SPI Data Register
// add to buffer if room
if (pos < sizeof buf)
{
buf [pos++] = c;
// example: newline means time to process buffer
if (c == 254)
process_it = true;
} // end of room available
} // end of interrupt routine SPI_STC_vect
// main loop - wait for flag set in interrupt routine
void loop (void)
{
int i;
if(process_it)
{
buf [pos] = 0;
Serial.println(data);
for(i=0;i<sizeof data;i++)
{
SPI.transfer(data[i]);
}
pos = 0;
process_it = false;
} // end of flag set
} // end of loop