Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
10 years, 6 months ago.
SPISlave is note replying to spidev
Hi , I am trying to connect a beaglebone with spidev interface to STM32F411RE Nucleo board using spi. Master: beaglebone (spidev linux driver) Slave :STM32F411RE Nucleo mbed board.
Heres my code SPI Master:
/**********************************************************************
*Filename : spi_test.c
*Purpose  : this file sends a byte data and recieves a signle byte.
***********************************************************************/
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
void spi_init(int fd)
{
	uint8_t tx=0xdd;
	uint8_t rx=10;
	int ret;
	struct spi_ioc_transfer xfer;
	
	xfer.tx_buf= (unsigned long)&tx;
	xfer.rx_buf= (unsigned long)℞
	xfer.len = 1;
	xfer.bits_per_word = 8;
	xfer.speed_hz = 1000000;
	//xfer.cs_change = 0;	
	ret=ioctl(fd,SPI_IOC_MESSAGE(1),&xfer);
       	if(ret < 1){
		perror("Error while sending spi_messages");
		exit(1);
	}
	
	printf("rx:%x\n",rx);
};
int main()
{
	int fd;
	fd=open("/dev/spidev1.0",O_RDWR);
	if(fd<0){
		perror("Not able to open device file");
		return -1;
	}
while(1)
	spi_init(fd);
	return 0;
}
And Here is my SPI Slave Mbed Program:
#include "mbed.h"
//SPI Slave
SPISlave device(PA_7,PA_6,PA_5,PA_4); // mosi, miso, sclk, ssel
Serial pc(SERIAL_TX,SERIAL_RX); 
 
int main() 
{     
     device.format(8,0);
     device.frequency(1000000);
     printf("Program Starting\r\n");
     device.reply(0x00);              // Prime SPI with first reply
     while(1) {
         if(device.receive()) {
             if(!ss){
             int v = device.read();   // Read byte from master     // Add one to it, modulo 256
             device.reply(v); 
             printf("Read 0x%x Reply 0x%x",v,v);
            }
        }
     }
}
using uart i am able to see the received byte but my master is not receiving any data. its just zeroing the buffers.
1 Answer
10 years, 6 months ago.
I suppose that tx and rx into spi_init shoud be array of char...
try with :
uint8_t tx[10]; uint8_t rx[10];
Look at the internet about spi examples with linux/raspberry, you will find a lot a sources.