LAB: SPI Protocol
āļāļļāļāļāļĢāļ°āļŠāļāļāđ
āđāļāļ·āđāļāđāļŦāđāđāļāđāļēāđāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļĢāļ°āļŦāļ§āđāļēāļ MCU āļāļąāļ MCU āļāđāļēāļ āđāļāļĢāđāļāļāļāļĨSPI
LAB: Logic Analyzer with SPI Protocol
āļāļēāļĢāļāļāļĨāļāļ: āđāļāđ Logic Analyzer āđāļŠāļāļāļāđāļāļāļ§āļēāļĄāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļāļāļ SPI Protocol
āļāļļāļāļāļĢāļāđāļāļāļĨāļāļ

āđāļāļĢāđāļāļĢāļĄ
Arduino IDE
āđāļāļĢāđāļāļĢāļĄ KingstVIS
āļāļēāļĢāļāļąāđāļāļāđāļē KingstVIS program
āđāļāļ·āđāļāļĄāļāđāļ logic Analyzer āļāļąāļ āļāļāļĄāļāļīāļ§āđāļāļāļĢāđ
āđāļāļīāļāđāļāļĢāđāļāļĢāļĄ Kingst VIS
āđāļāļāļĩāđ Analyzers >> āļāļĨāļīāđāļ icon add(+) >> āđāļĨāļ·āļāļ SPI

āđāļāļāļĩāđ Analyzers >> āļāļĨāļīāđāļ icon setting >> Edit āļāļąāđāļāļāđāļēāļāļēāļĄāļĢāļđāļāļāđāļēāļāļĨāđāļēāļ >> OK

āđāļāļāļĩāđ Analyzers āļāļĩāļāļāļĢāļąāđāļ >> āļāļĨāļīāđāļ icon setting >> Display Format >> ASCII āđāļāļ·āđāļāđāļŦāđāđāļāļĢāđāļāļĢāļĄāđāļŠāļāļāļāļĨāđāļāđāļāļāđāļāļāļ§āļēāļĄ

āđāļāļāļĩāđ Channel 3 āđāļĨāļ·āļāļāļāļ Indicates "rising edge trigger"

Pin Connect
āļĢāļēāļĒāļāļ·āđāļ PIN āļāđāļāđāļāļ·āđāļāļĄāļāđāļāļāļąāļ
pin 18
pin 10
Channel 3
MO
pin 11
Channel 0
MI
pin 12
Channel 1
SCK
pin 13
Channel 2
GND
GND
GND
āļāļģāđāļŦāļāđāļ SPI port āļāļĩāđāđāļāđāđāļāļāļēāļĢāļāļāļĨāļāļāļāļĩāđāđāļŠāļāļāļāļąāļāļ āļēāļāļāđāļēāļāļĨāđāļēāļ

Code: SPI master (M5 stack)
// SPI master (M5 stack)
#include <SPI.h>
int ss = 18;
void setup (void) {
Serial.begin(115200); //set baud rate to 115200 for usart
pinMode(ss,OUTPUT);
digitalWrite(ss, HIGH); // disable Slave Select
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8
}
void loop (void) {
char c;
digitalWrite(ss, LOW); // enable Slave Select
// send test string
for (const char * p = "Hello, world!\r" ; c = *p; p++)
{
SPI.transfer (c);
Serial.print(c);
}
digitalWrite(ss, HIGH); // disable Slave Select
delay(2000);
}
Code: SPI slave Arduino UNO
// SPI slave Arduino UNO
#include <SPI.h>
char buff [50];
volatile byte indx;
volatile boolean process;
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
}
ISR (SPI_STC_vect) // SPI interrupt routine
{
byte c = SPDR; // read byte from SPI Data Register
if (indx < sizeof buff) {
buff [indx++] = c; // save data in the next index in the array buff
if (c == '\r') //check for the end of the word
process = true;
}
}
void loop (void) {
if (process) {
process = false; //reset the process
Serial.println (buff); //print the array on serial monitor
indx = 0; //reset button to zero
}
}
āļāļąāļāļāļķāļāļāļĨāļāļēāļĢāļāļāļĨāļāļ
āļāļąāļāļāļķāļāļāļĨāļāļēāļĢāļāļāļĨāļāļāļāļĩāđ logic analyzer āđāļŠāļāļ
Last updated
Was this helpful?