I have an Arduino Due with a SAM3X8E chip and am trying to read SPI data from an external source that is communicating in SPI. I was able to get data by identifying specific bytes that are identifiers but realized that the clock for my board is not synced with the source coming in.
To be clear, the source is an SPI master that is sending out data on its own MOSI line, but I am currently treating my board as a master as well since I do not know how to do Slave mode on Due. I connect the Slaves MOSI line to my boards MISO line, and just transfer data and read 128 bytes but it would appear that I am not getting the same data. Is there a way for my to take in the clock from the external clock and synchronize my board with that clock to make sure? My source code is below. The only methods I can think of are to either figure out how to implement the board in slave mode (i'm not familiar enough with the registers and how to change this, or read data in slave mode) or synchronize the clocks so my board is reading and sampling the source data correctly.
Could someone check if my thinking is correct, or do I not need to make any changes since the data is in a shift register?
Thanks
void setup(){
Serial.begin(9600);
SPI.begin();
SPISettings settings (50000000, LSBFIRST, SPI_MODE1); //Sampling rate 50Mhz, source's max speed
SPI.beginTransaction(settings);
}
void loop(){
int i = 0;
uint8_t value;
value = SPI.transfer(0x00);
while (value != 8){//searching for identifier 0x08
value = SPI.transfer(0x00);
}
SPI.transfer(buffer, 127);//get the rest of the 127 bytes
Serial.print(value, HEX);
Serial.print(" ");
for (i = 0; i < 127; i++){
if (buffer[i] == 0){
Serial.print(buffer[i],HEX);
Serial.print(0, HEX);
}
else{
Serial.print(buffer[i], HEX);
}
Serial.print(" ");
}
Serial.println("\n");
}
Read_SPI.ino (1.64 KB)