Arduino Due Master Programming

Hello. I am newbie. In my application Arduino Due is configured as Master and Arduino Uno as Slave. I need to transfer 24-bit Hexadecimal data of about 79-registers to slave device. At the slave end in serial monitor window I would like to display the transmitted data. I have developed an array at slave side, and I am comparing the master data with slave one. I have divided the 24-bit data into 3 Bytes. I will attach the Master and Slave codes below. I am getting Invalid data in serial monitor window as the data (Hexa Decimal) transmitted by Master is converted into decimal format internally and I think this was the reason I am not able to print the Valid data in serial monitor window.

My Actual slave device is PLL IC, But before interfacing directly to it I would like to monitor the data by using Arduino Uno as Slave device.

Any help will be greatly appreciated. Thanks in Advance.

**MASTER Code**

#include <SPI.h>

SPISettings mySettting(125000, MSBFIRST, SPI_MODE0);
const uint8_t ss = 10;

//pinMode(10, OUTPUT)
void setup() {
  pinMode(ss, OUTPUT);

  SPI.begin();
SPI.beginTransaction(mySettting);
 
 digitalWrite(ss, LOW);
  SPI.transfer('@');
  SPI.transfer(0x1C);
  SPI.transfer(0x25);
  SPI.transfer(0x00);
  SPI.transfer('

);
delay(100);
digitalWrite(ss, HIGH);

digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0x08);
SPI.transfer(0x08);
SPI.transfer(0x01);
SPI.transfer(’


);
  delay(100);
  digitalWrite(ss, HIGH);

digitalWrite(ss, LOW); 
  SPI.transfer('@');
  SPI.transfer(0x00);
  SPI.transfer(0x05);
  SPI.transfer(0x02);
  SPI.transfer('

);
delay(100);
digitalWrite(ss, HIGH);

digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0x42);
SPI.transfer(0x06);
SPI.transfer(0x03);
SPI.transfer(’


);
  delay(100);
  digitalWrite(ss, HIGH);

digitalWrite(ss, LOW); 
  SPI.transfer('@');
  SPI.transfer(0x43);
  SPI.transfer(0x0A);
  SPI.transfer(0x04);
  SPI.transfer('

);
delay(100);
digitalWrite(ss, HIGH);

digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0xC8);
SPI.transfer(0x00);
SPI.transfer(0x05);
SPI.transfer(’


);
  delay(100);
  digitalWrite(ss, HIGH);

digitalWrite(ss, LOW); 
  SPI.transfer('@');
  SPI.transfer(0x02);
  SPI.transfer(0xC8);
  SPI.transfer(0x6C);
  SPI.transfer('

);
delay(100);
digitalWrite(ss, HIGH);

digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0xB2);
SPI.transfer(0x40);
SPI.transfer(0x07);
SPI.transfer(’


);
  SPI.transfer('&');
  delay(100);
  digitalWrite(ss, HIGH); 
SPI.endTransaction();
}

void loop() {
}



**SLAVE Code**


#include <SPI.h>
#include <stdio.h>
#include <string.h>
int buff[100] = {0x001C2500,0x00080801,0x00000502,0x00420603,0x430A04,0xC80005,0x02C806,0xB24007};


uint32_t buff_1 [100];
volatile byte indx;
volatile boolean process;
int i = 0;
uint32_t var_byte = 0x00000000;
uint32_t var_byte_1 = 0x00000000;
int byte_pos = 0;
short int status_1 = 0;



void setup (void) {
   Serial.begin (115200);
   pinMode(MISO, OUTPUT); // have to send on master in so it set as output
   SPCR |= _BV(SPE); // turn on SPI in slave mode
   indx = 0; // buffer empty
   process = false;
   SPI.attachInterrupt(); // turn on interrupt
   memset(buff_1,'\0',sizeof(buff_1));
}

ISR (SPI_STC_vect) // SPI interrupt routine
{
   byte c = SPDR; // read byte from SPI Data Register

   if(c == '@')
   {
      var_byte = 0x00000000;
      byte_pos = 2;
   }
   else if(c == '

)
buff_1 [indx++] = var_byte;
else if(c == ‘&’)
process = true;
else
{
var_byte_1 = 0x00000000;
var_byte_1 = (var_byte_1 | c) << byte_pos;
var_byte |= var_byte_1;
byte_pos–;
}

}
void loop (void) {
if (process) {
process = false; //reset the process
status_1 = 0;
for(i=0;i<79;i++)
{
if (buff==buff_1)
{
Serial.println (“Valid data_1”);
}
else
{
status_1 = 1;
break;
//Serial.println (“Inavlid data”);
}
}
if (status_1 == 0)
Serial.println (“Valid data”);
else
Serial.println (“Inavlid data”);
indx= 0; //reset button to zero
memset(buff_1,‘\0’,sizeof(buff_1));
}
}

I’ve found that life is a lot easier during debugging when taking “baby steps”. In this case, as you read each byte in the slave, just do a “Serial.print(c,HEX);”. Then compare what you sent with what you received, perhaps just for the first group of data to simplify things. Does that work as expected? If yes, then the problem isn’t in the SPI data transmission part. Some parts of the slave program escape me - you initialized “buff” as an array of 100 but only fill the first 8 array elements with values, but later on you loop through position 0 through 79 to compare - that can’t work.