Documente Academic
Documente Profesional
Documente Cultură
1. Introducere
Perifericul slave utilizează semnalul de ceas (SCK) pentru achiziţia de date (fluxul de biţi
transmişi serial de către master). După cum am precizat încă din partea introductivă comunicaţia
SPI este o comunicaţie full duplex:
- master-ul trimite un bit pe linia MOSI care este citit de către slave de pe aceeaşi linie;
- slave-ul trimite un bit pe linia MISO care este citit de către master de pe aceeaşi linie;
Transferul propriu-zis de date folosind protocolul SPI implică doi regiştrii de deplasare serială a
datelor (serial shift registers), unul pentru master şi unul pentru slave interconectaţi ca în figura
4. Masterul începe transmisia unui octet prin scrierea acestuia în registrul său de deplasare.
Deplasarea se începe cu bitul cel mai semnificativ (MSB) pe liniile MOSI moment în care un
nou bit este adaugat pe pozitia cea mai puţin semnificativă (LSB) din registru. Pe masură ce se
face transmisia către slave (prin MOSI), slave-ul începe la randul său să transmită date din
registrul său de deplasare (prin MISO) către master. În acest fel se face schimbul de informaţii
între cele 2 registre seriale de deplasare. După ce întreg cuvântul a fost transmis, master-ul şi
slave-ul au interschimbat valorile din cei doi regiştrii; dacă mai există date de transmis procesul
se repetă.
Când nu mai există date de transmis masterul va întrerupe generarea semnalului de ceas şi va
pune linia SS destinată slave-ului respectiv pe 1.
În cazul unei comunicaţii Master – Multi Slave, selectarea slave-ului de către master se face prin
intermediul liniei SS. Slave-urile neselectate de către master nu vor lua parte la comunicaţie –
vor ignora semnalele de pe SCK şi MOSI şi nu vor transmite nimic pe MISO.
Master-ul poate selecta doar un slave la un moment dat.
3. SPI vs I2C
Protocoalele SPI şi I2C sunt folosite pentru comunicaţia între circuite integrate şi periferice la
viteze de transfer scăzute. În următorul tabel este prezentată o comparaţie între cele 2 standarde
de comunicaţie:
4. Parte Practică
4.1 Componente necesare
- Arduino Uno
- SPI Bus Serial EEPROM (25LC040A)
- Breadboard + fire pentru realizarea legăturilor
Circuitul 25LC040A
Interfata SPI
Max. clock 10 MHz
Organizare 512 x 8-bit
Mod de scriere pe pagină(până la 16 bytes)
Protecţie pentru suprascrierea datelor
Număr de ciclii de ştergere/scriere: 1,000,000 Erase/Write cycles
Perioada de reţinere a datelor : > 200 ani
Pentru varianta DIP avem următorul pin layout
4.2 Cerinţe
Să se realizeze o scriere urmată de o citire a unei secvenţe de date (pe baza unor comenzi
recepţionate de pe interfaţa serială) de la un Arduino Uno la o memoria flash EEPROM
(25LC040A) pe baza exemplului următor:
#define MOSI 11 //MASTER OUT SLAVE IN
#define MISO 12 //MASTER IN SLAVE OUT
#define SPICLOCK 13 //MASTER CLOCK OUTPUT
#define SLAVESELECTEEPROM1 10 // SLAVE SELECT CHIP EEPROM 1
#define SSTRANSITIONDELAY 10
#define WRITEDELAY 1000
byte eeprom_output_data=0;
byte eeprom_input_data=0;
//Adresa de scriere/citire
int address=7;
}
}
//Inializarea sistemului
void setup()
{
Serial.begin(9600); //Initializarea interfata seriala
inputString.reserve(10); //Alocare date comanda
pinMode(MOSI, OUTPUT); //Configurare pin iesire
pinMode(MISO, INPUT); //Configurare pin intrare
pinMode(SPICLOCK,OUTPUT); //Configurare pin iesire
pinMode(SLAVESELECTEEPROM1,OUTPUT); //Configurare pin iesire
// SPCR = 01010000
//interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
//sample on leading edge of clk,system clock/4 rate (fastest)
SPCR = (1<<SPE)|(1<<MSTR);
byte clr; //Variabila temporara pentru
curatarea registrelor SPE si MSTR
clr=SPSR; // "Curatarea" registrului SPSR
clr=SPDR; // "Curatarea" registrului SPDR
void loop()
{
if (stringComplete) {
Serial.print("Received command: ");
Serial.println(inputString);
//Alegere operatie
handleMemoryOperation(inputString);
// Resetare variabile globale
inputString = "";
stringComplete = false;
}
Realizaţi o structura Master – Multi Slave (Arduino – 2 memorii EEPROM) şi pe baza unor
comenzi date să se facă scrirea/citirea din cele 2 memorii:
Utilizând analizoarele Saleae să se monitorizeze liniile SPI: SCK, MOSI, MISO, SS.
Proiect
Să se implementeze un sistem Single Master – Multi Slave pentru citirea şi scrierea datelor din
două memorii EEPROM (25LC040A) pe baza protocolului definit mai jos: