SPI Transactions in Arduino


Paul over at DorkbotPDX writes:

For the last several weeks, I’ve been working on SPI transactions for Arduino’s SPI library, to solve conflicts that sometimes occur between multiple SPI devices when using SPI from interrupts and/or different SPI settings.
To explain, a picture is worth 1000 works. In this screenshot, loop() repetitively sends 2 bytes, where green is its chip select and red is the SPI clock. Blue is the interrupt signal (rising edge) from a wireless module. In this test, the interrupt happens at just the worst moment, during the first byte while loop() is using the SPI bus!
Without transactions, the wireless lib interrupt would immediately assert (active low) the yellow chip select while the green is still active low, then begin sending its data with both devices listening!

Join the Conversation

1 Comment

  1. Currently working on a project requiring the use of interrupts and multiple SPI devices. Arduino Mega 2560 is what I am currently using. Specifically using digital potentiometer connected via SPI and OLED. OLED had to be re-initialized after the use of SPI.end(). The digital potentiometer is set using interrupts. Luckily was able to resolve many buggy issues I have across so far with the OLED using timer functions.

Leave a comment

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail. You can also subscribe without commenting.