I am having an issue with sending the correct HEX registers over SPI to a slave device. I am finally able to see my issue by decoding the SPI using a scope. What I see is random HEX during my test. About every 3rd or 4th test, the correct HEX is decoded. I am convinced that this is a clocking issue but I am unsure how to look at the scope to identify what baud to set the SPI clock. This is my first scope and I am learning how to use it. Is there something I can look at on the scope to resolve my issue?

void SPI_Init(void)



  SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR1)|(0<<SPR0);
  SPSR = (0<<SPI2X);

///Main Routine

SPI_Write(0xC0);  /// This is the HEX I should see on MOSI Decode


The decoding seems to have a pattern but not sure. I get C1, C0, 80, C1, 80, C0. It's never consistent when I execute the test.

My slave is a MCP2515 CAN controller but I think that is irrelevant because this is on the MOSI. Correct me if I am wrong. enter image description here

Yellow: SCK Blue: MOSI Purple: SS

  • 1
    \$\begingroup\$ Which SPI mode are you intending to use? It looks as though your micro is sending in Mode 0, but your scope is configured to read in Mode 1 or 2. \$\endgroup\$
    – brhans
    Feb 7, 2017 at 18:44
  • \$\begingroup\$ Mode 0 per the datasheet for the slave. I'm not sure how to change the scope to read in Mode 0. Is it only flipping the Polarity and that's it or is there another setting as well? \$\endgroup\$
    – Eddie
    Feb 7, 2017 at 18:55

1 Answer 1


SPI usually cares little of clock speed (or jitter) provided the clock frequency is not too high and other timing is respected.

However you do need to get the SPI mode correct. There are four possible modes (clock polarity and phase have two options each).

enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.