SPI receive -> strange Byte shift - Raspberry Pi Forums


i've problem receiving data on raspi using wiringpi.
think it's not wiringpi specific, because wiringpi use ioctl
spi examples do.
tried lot , i'm out of ideas, guys may have idea what's
happening there.

background:
stm32 , raspi need data exchange. raspi master stm32 slave.
on occasions stm need send data, moves pin on raspi,
, raspi sends dummy frame , receives data in return.

test purpose, stm sends same data:
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

, raspi receives as:

slave request
48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
slave request
83 48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
slave request
82 83 48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
slave request
48 82 83 48 48 49 50 51 52 53 54 55 56 57 58 59 60 61
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
slave request
48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
slave request
83 48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
slave request
82 83 48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
slave request
48 82 83 48 48 49 50 51 52 53 54 55 56 57 58 59 60 61
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
slave request
48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
slave request
83 48 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81

above sequential sends stm
there strange 4 times byte shift , starts again

making same communication on 2 stm's, works fine.
sending raspi stm works fine.
have idea?

here raspi code

code: select all

#include <stdio.h> #include <inttypes.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include "spi_comm_handler.h" #include <wiringpi.h> #include <wiringpispi.h>   volatile uint8_t dbg_spiknockcounter = 0; volatile uint8_t transferarray[spi_transferdatasize] = {0, };   /* isr slave knock pin */ void slaveknockhandler (void) {   printf("slave request\n");   dbg_spiknockcounter++ ;   flush_transfer_buffer();   send_spi_frame(); }  int init_spi_comm_handler(void) {   int spidev;   printf ( "sizeof(transferarray): %d\n", sizeof(transferarray)) ;   if (wiringpisetup () < 0) {     fprintf (stderr, "unable setup wiringpi: %s\n", strerror (errno)) ;     return 0 ;   }            spidev = wiringpispisetup (0, 500000) ;   if (spidev == -1) {     fprintf (stderr, "unable setup spi: %s\n", strerror (errno)) ;     return 0 ;     }      pinmode (slave_knock_pin,  input) ;        if (wiringpiisr (slave_knock_pin, int_edge_falling, &slaveknockhandler) < 0) {     fprintf (stderr, "unable setup isr: %s\n", strerror (errno)) ;     return 0 ;   }        spi_writelcd(0, 0, "hello raspi here");      return 1 ; }  void flush_transfer_buffer(void){   uint8_t c = 0;      (c = 0; c < spi_transferdatasize; c++) {     transferarray[c] = 0;   } }  void send_spi_frame(void){    if (wiringpispidatarw (0, (unsigned char *)transferarray, spi_transferdatasize)) {     handle_incoming_spi_data();   } else {     fprintf (stderr, "error in transfer\n") ;   } }  void showrdata(void) {      uint8_t c = 0;      (c = 0; c < spi_transferdatasize; c++) {     printf(" %d ", transferarray[c]);   }   printf("\n");   return;    }  /*   * prevent recursive traffic   * here cannot call transfer data  */ void handle_incoming_spi_data(void) {   showrdata(); } 



raspberrypi



Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial