Salta al contenuto
Note per Studenti Esercizio 33 · bus CAN e SPI, DMA, PLL analogico, antenne e ZigBee (esempio del corso, lacune dei temi d'esame)

Esercizio 33bus CAN e SPI, DMA, PLL analogico, antenne e ZigBee (esempio del corso, lacune dei temi d'esame)

Esame
In questa pagina 7

Testo (esempio del corso: argomenti del programma che non compaiono nei temi d'esame ma sono trattati nelle lezioni di comunicazione e wireless).

(i) Tre nodi CAN con identificatori 14361436, 13351335 e 13371337 iniziano a trasmettere insieme. Scrivere gli identificatori a 11 bit e indicare bit per bit quale nodo vince l'arbitraggio. (ii) Un messaggio CAN standard con 8 byte di dati viaggia a 500 kbit/s: durata senza e con il caso peggiore di bit stuffing. (iii) Un trasferimento SPI di 16 bit con clock SCK a 10 MHz: durata. Quante linee servono per un master e tre slave? (iv) Un VCO ha frequenza da 1 MHz a 2 MHz per una tensione di controllo da 0 a 5 V. Calcolare il guadagno kVCOk_{VCO}. Un PLL con divisore per N=64N=64 deve produrre una portante a 433 MHz da un quarzo: frequenza del quarzo. (v) Un'antenna loop deve funzionare a 433 MHz e una antenna patch a 2,4 GHz (εr=4,4\varepsilon_r=4{,}4). Lunghezza massima del loop e lunghezza LL del patch. Per un pacchetto ZigBee da 127 byte a 250 kbit/s, durata della trasmissione. (vi) Un DMA a blocchi trasferisce 512 parole da 16 bit con un bus che accetta una parola per ciclo di clock a 100 MHz: durata del trasferimento e confronto con una ISR da 1 µs per ogni parola (polling a interruzione).


Teoria usata: Bus I2C, SPI e CANI2C: bus seriale sincrono a 2 fili (SDA dati, SCL clock, con resistenze di pull-up), un master (il µC) e molti slave con indirizzo a 7 bit; byte da 9 bit (8 + ACK dato dal ricevitore abbassando SDA); start: SDA scende con SCL alto; stop: SDA sale con SCL alto; 100 kbit/s (normale), 400 kbit/s (fast); half-duplex. SPISerial Peripheral Interface: bus seriale sincrono a quattro fili: 4 fili (MOSI, MISO, SCK, CS), full duplex, master e slave selezionati da CS, 4 modi (CPOL, CPHA). CAN: bus differenziale (120 Ω) asincrono, messaggi etichettati da un identificatore (11 o 29 bit), arbitraggio automatico (vince l'ID più basso), bit stuffing dopo 5 bit uguali, CRC a 15 bit, contatori di errori (127, 255).Bus I2C, SPI e CAN →, Comunicazione wireless - ASK, OOK, FSK, PLL e antenneMolti µC integrano un trasmettitore RF semplice: PLL che genera la portante a $N$ volte la frequenza di un quarzo, amplificatore (LNA) e antenna con rete di adattamento. Modulazioni digitali: ASK (due livelli di ampiezza), OOK (un livello è zero), FSK (due frequenze). In analogico si usa l'FM con VCO e PLL (CD4046). Il PLL è un anello di retroazione: comparatore di fase, filtro passa-basso, VCO ($k_{VCO}=\frac{f_{max}-f_{min}}{V_{max}-V_{min}}$), divisore per $N$; a regime errore nullo di frequenza e di fase. Antenne a microstriscia: loop (lunghezza $\lesssim\lambda/10$), patch ($f_r\simeq\frac c{2L\sqrt{\varepsilon_r}}$). Standard: Wi-Fi 802.11, Bluetooth 802.15.1, ZigBee 802.15.4 (2,4 GHz, 250 kbit/s, rete mesh, basso consumo).Comunicazione wireless - ASK, OOK, FSK, PLL e antenne →, Sottosistema di I-O - polling, interruzioni e DMALe periferiche si collegano al bus con una interfaccia che ha registri di dati (DREG), controllo (CREG) e stato (SREG); nei µC e DSP sono mappati in memoria (si leggono e scrivono come locazioni). Poiché le periferiche sono asincrone e lente, la sincronizzazione avviene per polling (inefficiente), per interruzioni (la più usata) o per DMA (costoso, per grandi quantità di dati). Una interruzione: completa l'istruzione, salva il contesto (PC e registro di stato, spesso altro), esegue la ISR, ripristina. Le sorgenti si distinguono con ISR di stato, interruzioni vettorizzate o daisy-chaincollegamento delle periferiche in catena, in cui il segnale di riconoscimento passa dall'una all'altra; le NMI non sono mascherabili.Sottosistema di I-O - polling, interruzioni e DMA →.

(i) Arbitraggio CAN

In binario a 11 bit: 1436=101100111001436=10110011100, 1335=101001101111335=10100110111, 1337=101001110011337=10100111001. Nel CAN lo stato dominante (0) prevale sul recessivo (1) (wired-AND) e ogni nodo confronta il bit che trasmette con quello che legge sul bus: se trasmette 1 e legge 0, ha perso e smette.

  • Bit 1 e 2: 1,01,0 per tutti: nessuno perde.
  • Bit 3: 1,1,11,1,1: nessuno perde.
  • Bit 4: il nodo con 14361436 trasmette 1, gli altri due 0: il bus va a 0, il nodo 14361436 perde e diventa ricevitore.
  • Bit 5-7: 0,1,10,1,1 per entrambi i nodi rimasti (13351335 e 13371337): nessuno perde.
  • Bit 8: il nodo 13351335 trasmette 0, il nodo 13371337 1 (1335=101001101111335=1010011\mathbf{0}111, 1337=101001110011337=1010011\mathbf{1}001: la prima differenza è all'ottavo bit): il nodo 13371337 perde. Vince il nodo con 13351335, l'identificatore numericamente più basso, senza perdita di tempo né di dati: il suo messaggio prosegue senza interruzioni come se fosse stato solo.

(ii) Durata di un messaggio CAN

Senza stuffing: SOF (1) + ID (11) + RTR (1) + controllo (6) + dati (8⋅8=648\cdot8=64) + CRC (15) + delimitatore CRC (1) + ACK (2) + EOF (7) =108=108 bit, più 3 bit di intervallo tra i messaggi: 111 bit ⇒111500 000=222 μs\Rightarrow\frac{111}{500\,000}=\mathbf{222\ \mu s}. Il bit stuffing agisce da SOF fino al CRC (98 bit): nel caso peggiore (tutti uguali) si inserisce un bit ogni 4 bit uguali dopo il primo: ⌊98−14⌋=24\lfloor\frac{98-1}4\rfloor=24 bit in più: 111+24=135111+24=135 bit ⇒135500 000=270 μs\Rightarrow\frac{135}{500\,000}=\mathbf{270\ \mu s} (+22%).

(iii) SPI

Il trasferimento di 16 bit con SCK=10SCK=10 MHz dura 1610 MHz=1,6 μs\frac{16}{10\ \text{MHz}}=\mathbf{1{,}6\ \mu s} (SPI è full duplex: mentre il master invia sulla linea MOSI riceve 16 bit su MISO). Per un master e tre slave: SCK, MOSI, MISO (condivise) e una linea CS per slave: 3+3=63+3=\mathbf6 linee.

(iv) VCO e PLL

kVCO=fmax−fminVmax−Vmin=2−1 MHz5−0 V=200 kHz/Vk_{VCO}=\frac{f_{max}-f_{min}}{V_{max}-V_{min}}=\frac{2-1\ \text{MHz}}{5-0\ \text{V}}=\mathbf{200\ kHz/V}. Con un divisore per N=64N=64 nell'anello la portante è N⋅frefN\cdot f_{ref}: fquarzo=433 MHz64=6,77 MHzf_{quarzo}=\frac{433\ \text{MHz}}{64}=\mathbf{6{,}77\ MHz} (il quarzo comune da 6,7650 MHz o simile con un piccolo scarto: nelle applicazioni reali si sceglie il valore commerciale più vicino e si regola NN).

(v) Antenne e ZigBee

λ=cf=3⋅108433⋅106=0,693\lambda=\frac c f=\frac{3\cdot10^8}{433\cdot10^6}=0{,}693 m. Loop: lunghezza totale ≤λ10=6,9 cm\le\frac\lambda{10}=\mathbf{6{,}9\ cm}. Patch a 2,4 GHz: L=c2fεr=3⋅1082⋅2,4⋅109⋅4,4=29,8 mmL=\frac{c}{2f\sqrt{\varepsilon_r}}=\frac{3\cdot10^8}{2\cdot2{,}4\cdot10^9\cdot\sqrt{4{,}4}}=\mathbf{29{,}8\ mm} (circa 3 cm). ZigBee: 127⋅8250 kbit/s=1016250 000=4,06 ms\frac{127\cdot8}{250\ \text{kbit/s}}=\frac{1016}{250\,000}=\mathbf{4{,}06\ ms} (più il tempo di accesso al canale: il duty-cycle di trasmissione è basso).

(vi) DMA

Con un bus a 100 MHz (1010 ns per ciclo) e una parola per ciclo: 512⋅10 ns=5,12 μs512\cdot10\ \text{ns}=\mathbf{5{,}12\ \mu s} per l'intero blocco, con la CPU libera (tranne i cicli di bus ceduti: cycle stealing o burst) e una sola interruzione a fine trasferimento. Con una ISR da 1 µs per parola: 512⋅1 μs=512 μs512\cdot1\ \mu s=512\ \mu s di tempo di CPU, cioè 100 volte di più, senza contare la latenza di ogni interruzione. Il DMA è l'unica scelta se la periferica produce dati molto velocemente.

Errori comuni

  • Dire che in CAN vince l'identificatore più alto: vince il più basso (il bit 0 è dominante).
  • Contare lo stuffing anche su CRC delimitatore, ACK e EOF (si applica da SOF a CRC).
  • Confondere le linee dei bus: I2C ne ha 2 (SDA, SCL), SPI 3+n3+n per nn slave, CAN 2 differenziali.
  • Calcolare la lunghezza del loop come λ\lambda invece che ≤λ10\le\frac\lambda{10}.

Versione ripasso

Testo. Arbitraggio CAN, durata di un messaggio, SPI, VCO e PLL, antenne e ZigBee, DMA (esempio del corso).

Teoria collegata