This shows you the differences between two versions of the page.
pm:lab:lab5-2021 [2021/04/11 14:58] dumitru.brigalda |
pm:lab:lab5-2021 [2021/04/17 16:05] (current) jan.vaduva |
||
---|---|---|---|
Line 2: | Line 2: | ||
Acest laborator acoperă noțiunea de SPI. Pentru aprofundarea acestui topic, consultați [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] și {{https://en.wikipedia.org/wiki/Serial_Peripheral_Interface?fbclid=IwAR3qQ8-N1G8sf38MDyQFSq4vtjz3aj9oynzeG46HjJoLr1OrBxybdlB74Fk|Serial Peripheral Interface}}. | Acest laborator acoperă noțiunea de SPI. Pentru aprofundarea acestui topic, consultați [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] și {{https://en.wikipedia.org/wiki/Serial_Peripheral_Interface?fbclid=IwAR3qQ8-N1G8sf38MDyQFSq4vtjz3aj9oynzeG46HjJoLr1OrBxybdlB74Fk|Serial Peripheral Interface}}. | ||
- | ===== SPI (Serial Peripheral Interface) ===== | + | ===== 1. SPI (Serial Peripheral Interface) ===== |
SPI este un standard sincron dezvoltat de Motorola care funcționează în modul full-duplex (transferul de date are loc în ambele direcții simultan). Dispozitivele comunică utilizând o arhitectură Master-Slave (este permis un singur dispozitiv Master și unul sau mai multe dispozitive Slave). Dispozitivul Master este cel care inițiază comunicarea. SPI mai este numit și „four wire”. Cele patru semnale utilizate sunt următoarele: | SPI este un standard sincron dezvoltat de Motorola care funcționează în modul full-duplex (transferul de date are loc în ambele direcții simultan). Dispozitivele comunică utilizând o arhitectură Master-Slave (este permis un singur dispozitiv Master și unul sau mai multe dispozitive Slave). Dispozitivul Master este cel care inițiază comunicarea. SPI mai este numit și „four wire”. Cele patru semnale utilizate sunt următoarele: | ||
* MOSI — Master Output Slave Input (transmiterea datelor de la Master la Slave) | * MOSI — Master Output Slave Input (transmiterea datelor de la Master la Slave) | ||
Line 13: | Line 13: | ||
{{ :pm:lab:spi1.png?500 |}} | {{ :pm:lab:spi1.png?500 |}} | ||
- | ===== Conectarea mai multor dispozitive Slave ===== | + | ===== 2. Conectarea mai multor dispozitive Slave ===== |
- | Multiple slave devices can be connected to a single master, selecting a particular slave with the CS/SS signal associated with the slave. The other three signals are shared. | + | |
Mai multe dispozitive Slave pot fi conectate în același timp la un singur dispozitiv Master. Semnalele MOSI, MISO și SCLK sunt partajate. Pentru fiecare dispozitiv Slave, dispozitivul Master are câte un semnal CS / SS. Când Masterul dorește să comunice cu un Slave, dispozitivul Master setează pe LOW semnalul CS / SS care duce către dispozitivul Slave dorit (celelalte semnale CS / SS sunt puse pe HIGH). Astfel, dispozitivul Slave cu CS / SS pe LOW știe că Masterul comunică cu el. | Mai multe dispozitive Slave pot fi conectate în același timp la un singur dispozitiv Master. Semnalele MOSI, MISO și SCLK sunt partajate. Pentru fiecare dispozitiv Slave, dispozitivul Master are câte un semnal CS / SS. Când Masterul dorește să comunice cu un Slave, dispozitivul Master setează pe LOW semnalul CS / SS care duce către dispozitivul Slave dorit (celelalte semnale CS / SS sunt puse pe HIGH). Astfel, dispozitivul Slave cu CS / SS pe LOW știe că Masterul comunică cu el. | ||
{{ :pm:lab:spi2.png?500 |}} | {{ :pm:lab:spi2.png?500 |}} | ||
- | ===== Conectarea mai multor dispozitive Slave cu ajutorul topologiei SPI Daisy Chain ===== | + | ===== 3. Conectarea mai multor dispozitive Slave cu ajutorul topologiei SPI Daisy Chain ===== |
- | În topoligia Daisy Chain, datele sunt transferate de la Master la primul Slave, de la primul Slave la al doilea Slave, până când datele ajung la ultimul Slave care le trimite înapoi la Master. Datele primului Slave ajung la Master ultimele, în timp ce datele ultimului Slave ajung la Master primele. | + | În topologia Daisy Chain, datele sunt transferate de la Master la primul Slave, de la primul Slave la al doilea Slave, până când datele ajung la ultimul Slave care le trimite înapoi la Master. Datele primului Slave ajung la Master ultimele, în timp ce datele ultimului Slave ajung la Master primele. |
{{ :pm:lab:spi3.png?500 |}} | {{ :pm:lab:spi3.png?500 |}} | ||
- | ===== Transmiterea datelor cu SPI ===== | + | ===== 4. Transmiterea datelor cu SPI ===== |
Pentru a începe comunicarea cu dispozitivul Master, ceasul Master-ului trebuie setat la o frecvență cel mult egală cu frecvența suportată de dispozitivul Slave (de obicei până la câțiva MHz). Apoi, Master-ul selectează dispozitivul Slave dorit, punând 0 pe linia CS / SS. În timpul unui ciclu SPI, transmisia este full-duplex: | Pentru a începe comunicarea cu dispozitivul Master, ceasul Master-ului trebuie setat la o frecvență cel mult egală cu frecvența suportată de dispozitivul Slave (de obicei până la câțiva MHz). Apoi, Master-ul selectează dispozitivul Slave dorit, punând 0 pe linia CS / SS. În timpul unui ciclu SPI, transmisia este full-duplex: | ||
Line 37: | Line 36: | ||
{{ :pm:lab:spi5.png?500 |}} | {{ :pm:lab:spi5.png?500 |}} | ||
- | ===== Configurări de SPI ===== | + | ===== 5. Configurări de SPI ===== |
Clock Polarity (CPOL) configurează starea IDLE a ceasului. După cum putem vedea, pentru CPOL = 0, când ceasul este inactiv valoarea semnalului SCLK este pe LOW, iar pentru CPOL = 1 ceasul inactiv are SCLK pe HIGH. | Clock Polarity (CPOL) configurează starea IDLE a ceasului. După cum putem vedea, pentru CPOL = 0, când ceasul este inactiv valoarea semnalului SCLK este pe LOW, iar pentru CPOL = 1 ceasul inactiv are SCLK pe HIGH. | ||
Line 54: | Line 53: | ||
{{ :pm:lab:spi6.png?500 |}} | {{ :pm:lab:spi6.png?500 |}} | ||
- | ===== SPI în Atmega328p ===== | + | ===== 6. SPI în Atmega328p ===== |
SPI-ul inclus în microcontrolerul atmega328p poate funcționa atât ca Master, cât și ca Slave. | SPI-ul inclus în microcontrolerul atmega328p poate funcționa atât ca Master, cât și ca Slave. | ||
Line 105: | Line 104: | ||
Un registru de citire / scriere utilizat pentru transferul de date între Register File și SPI Shift Register. Scrierea în registru inițiază transmiterea datelor. Citirea registrului determină citirea bufferului Shift Register Receive. | Un registru de citire / scriere utilizat pentru transferul de date între Register File și SPI Shift Register. Scrierea în registru inițiază transmiterea datelor. Citirea registrului determină citirea bufferului Shift Register Receive. | ||
- | ==== Example ==== | + | ==== Exemplu ==== |
- | Initialize the SPI as a Master. | + | Inițializare SPI ca Master. |
<code> | <code> | ||
/* set master mode */ | /* set master mode */ | ||
Line 118: | Line 117: | ||
</code> | </code> | ||
- | Perform a simple transmission. | + | Transmiterea unui byte (pe Master). |
<code> | <code> | ||
/* Start transmission */ | /* Start transmission */ | ||
Line 127: | Line 126: | ||
</code> | </code> | ||
- | Perform a simple reception. | + | Recepția unui byte (pe Slave). |
<code> | <code> | ||
/* Wait for reception complete */ | /* Wait for reception complete */ | ||
Line 136: | Line 135: | ||
</code> | </code> | ||
- | ===== Adaptor MicroSD ===== | + | ===== 7. Adaptor MicroSD ===== |
Un card MicroSD este un exemplu de memorie nevolatilă. Pentru ca placa Arduino UNO să poată comunica pe SPI cu cardul, avem nevoie de un adaptor. De menționat că adaptorul din laborator nu suportă carduri de o dimensiune mai mare de 32GB. | Un card MicroSD este un exemplu de memorie nevolatilă. Pentru ca placa Arduino UNO să poată comunica pe SPI cu cardul, avem nevoie de un adaptor. De menționat că adaptorul din laborator nu suportă carduri de o dimensiune mai mare de 32GB. | ||
Line 207: | Line 206: | ||
</file> | </file> | ||
- | ===== Exerciții ===== | + | ===== 8. Exerciții ===== |
==== Tinkercad ==== | ==== Tinkercad ==== | ||
Line 284: | Line 283: | ||
* Introduceți cardul în adaptor | * Introduceți cardul în adaptor | ||
* Realizați conexiunile fizice dintre adaptor și Arduino UNO | * Realizați conexiunile fizice dintre adaptor și Arduino UNO | ||
- | * Adaptor GND - GND | + | * Adaptor GND - GND Arduino Uno |
- | * Adaptor VCC - VCC | + | * Adaptor VCC - VCC Arduino Uno |
- | * Adaptor MISO - 12 | + | * Adaptor MISO - 12 Arduino Uno |
- | * Adaptor MOSI - 11 | + | * Adaptor MOSI - 11 Arduino Uno |
- | * Adaptor SCK - 13 | + | * Adaptor SCK - 13 Arduino Uno |
- | * Adaptor CS - 4 | + | * Adaptor CS - 4 Arduino Uno |
* Rulați exemplul File -> Examples -> SD -> CardInfo | * Rulați exemplul File -> Examples -> SD -> CardInfo | ||
* Verificați că nu aveți erori | * Verificați că nu aveți erori | ||
Line 298: | Line 297: | ||
* Suprascrieți codul proiectului cu cel de mai jos | * Suprascrieți codul proiectului cu cel de mai jos | ||
* {{:pm:lab:microsd_reset_cnt.txt|Board reset counter}} | * {{:pm:lab:microsd_reset_cnt.txt|Board reset counter}} | ||
+ | * Analizați codul | ||
* Uploadați proiectul pe placă | * Uploadați proiectul pe placă | ||
Line 307: | Line 307: | ||
* {{:pm:lab:spi_microsd_reset_cnt.png?300|}} | * {{:pm:lab:spi_microsd_reset_cnt.png?300|}} | ||
+ | ===== 9. Resurse ===== | ||
+ | |||
+ | * {{:pm:atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|Datasheet Atmega 328p}} | ||
+ | * Arduino UNO pinout | ||
+ | {{:pm:lab:uno.jpg?200|pinout Arduino UNO}} | ||
+ | * Responsabil: [[dbrigalda@gmail.com | Dumitru Brigalda]] | ||
+ | |||
+ | ===== 10. Linkuri Utile ===== | ||
+ | * [[https://www.arduino.cc/en/reference/SPI|Arduino SPI]] | ||
+ | * [[https://www.arduino.cc/en/reference/SD|Arduino SD]] | ||
+ | * [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328p]] | ||
- | Responsabil: [[dbrigalda@gmail.com | Dumitru Brigalda]] |