Vantaggi dei microprocessori a 48-96 Mhz a 32 bit (come in Arduino Due)


10

Sembra che Arduino Due (32-bit, 84 Mhz, SAM3X8E basato su ARM-Cortex-M3) sia stato rilasciato oggi.

Inoltre, chiaramente esiste una miriade di processori in questa categoria (32 bit / 48-96 Mhz / ARM) e schede di prototipazione corrispondenti:

  • NXP LPC1768 / mBed
  • STM32 / Discovery
  • PIC32 / ChipKit
  • Elica PIC32 / Parallax
  • Launchpad LM4F120 / TI
  • eccetera.

Sto cercando di capire il fascino di questi microprocessori "nel mezzo", che per me sembrano trovarsi tra l'AVR di fascia bassa / MSP430 / ecc. (pro: economico, basso consumo, ingombro ridotto) e ARM7 / etc di fascia alta (pro: capace di istruzioni di gran lunga maggiori al secondo).

In quali situazioni o modi i microprocessori a 32 bit / 48-96 Mhz / ARM sono la scelta adatta? Più specificamente, mi chiedo in quali applicazioni o in quali parametri farebbero una scelta superiore durante la progettazione, sia sui microcontrollori a 8 bit di fascia bassa che sui processori ARM7 di fascia alta.


Beh, la prima cosa che mi viene in mente è che puoi elaborare flussi video in diretta - dove l'Arduino non è in grado di gestirlo. Permette anche algoritmi di crittografia avanzati o hash (più veloce e più facile che in Arduino). Sono sorpreso che Arduino sia uscito con una piattaforma a 32 bit, ma ti mostra solo - Alcune persone vogliono solo fare di più che controllare un relay. È un grande giorno per Arduino!
Piotr Kula,

Non farai altro che una banale elaborazione di video in diretta su un processore <100 MHz, a meno che tu non lo faccia in uno speciale nucleo funzionale collegato. E soprattutto non nella RAM di bordo abbastanza limitata su questi dispositivi. Un punto più realistico è che il costo di questi chip non è sostanzialmente superiore a quello delle parti a 8 bit; potrebbe effettivamente essere inferiore a un ATMEGA con flash e ram comparabili.
Chris Stratton,

3
Per quanto ne so, Parallax Propeller è un chip personalizzato senza alcuna relazione con PIC32. Qualche fonte per la connessione?
AndrejaKo

Risposte:


12

Questo è uno di quei temi che possono essere molto dibattuti. Ci sono molti punti di vista diversi e cose diverse sono importanti per persone diverse. Cercherò di dare una risposta completa, ma capisco che ci sarà sempre qualcuno che non è d'accordo. Basta capire che quelli che non sono d'accordo con me hanno torto. (Stavo solo scherzando.)

Riepilogo rapido:

Questa risposta sarà lunga, quindi lasciatemi riassumere in anticipo. Per la stragrande maggioranza delle persone, l'ultimo raccolto di chip ARM Cortex-M0 / M3 / M4 offre la migliore soluzione, le migliori caratteristiche per il costo. Questo è vero anche quando si confrontano questi MCU a 32 bit con i loro antenati a 8 e 16 bit come PIC e MSP430. Gli M0 possono essere acquistati per meno di US $ 1 / ciascuno e gli M4 per meno di US $ 2 / ciascuno, quindi ad eccezione delle applicazioni molto sensibili al prezzo, le soluzioni ARM sono molto carine. Gli M0 hanno una potenza molto bassa e dovrebbero essere abbastanza buoni per la maggior parte delle persone. Per coloro che sono molto sensibili alla potenza, MSP430 potrebbe essere comunque una scelta migliore, ma vale la pena prendere in considerazione gli M0 anche per queste applicazioni.

Se sei interessato ad un'analisi più approfondita, continua a leggere, altrimenti puoi smettere di leggere ora.

Esaminerò ora ciascuna area e confronterò i diversi MCU:

Velocità di esecuzione

Naturalmente le MCU a 32 bit saranno più veloci. Tendono ad avere una velocità di clock maggiore, ma fanno anche più lavoro per ciascuno di questi orologi. MCU come ARM Cortex-M4 includono istruzioni di elaborazione DSP e possono persino avere supporto in virgola mobile nell'hardware. Le CPU a 8 e 16 bit possono funzionare su numeri a 32 bit, ma non è efficiente nel farlo. In questo modo si consumano rapidamente i registri della CPU, i cicli di clock della CPU e la memoria flash per l'archiviazione del programma.

Facilità di sviluppo

Secondo me, questa è la ragione più preziosa per l'utilizzo dei moderni MCU a 32 bit, ma anche la più sottovalutata. Vorrei prima confrontare questo con i PIC a 8 bit. Questo è il confronto del caso peggiore, ma anche il migliore per illustrare i miei punti.

I PIC più piccoli richiedono sostanzialmente che la programmazione sia eseguita in linguaggio assembly. È vero, ci sono compilatori C disponibili anche per i PIC a 8 bit, ma questi compilatori sono gratuiti o buoni. Non è possibile ottenere un compilatore valido e gratuito. La versione gratuita del compilatore è paralizzata dal fatto che la sua ottimizzazione non è buona come la versione "Pro". La versione Pro costa circa $ 1.000 e supporta solo una famiglia di chip PIC (chip da 8, 16 o 32 bit). Se si desidera utilizzare più di una famiglia, è necessario acquistare un'altra copia per altri $ 1.000. La versione "Standard" del compilatore offre un livello medio di ottimizzazione e costa circa $ 500 per ogni famiglia di chip. I PIC a 8 bit sono lenti per gli standard moderni e richiedono una buona ottimizzazione.

In confronto, ci sono molti buoni compilatori C per ARM MCU che sono gratuiti. In presenza di limitazioni, tali limiti sono in genere relativi alla dimensione massima della memoria flash supportata. Sugli strumenti di Freescale Codewarrior questo limite è di 128 KB. Questo è molto per la maggior parte delle persone su questo forum.

Il vantaggio di usare un compilatore C è che non devi preoccuparti (tanto) con i dettagli di basso livello della mappa di memoria della CPU. Il paging sul PIC è particolarmente doloroso ed è meglio evitarlo se possibile. Un altro vantaggio è che non devi preoccuparti del disordine di consegnare numeri a 16 e 32 bit su una MCU a 8 bit (o numeri a 32 bit su una MCU a 16 bit). Anche se non è molto difficile farlo nel linguaggio assembly, è un dolore nella parte posteriore ed è soggetto a errori.

Esistono altri compilatori non ARM C che funzionano bene. Il compilatore MSP430 sembra fare un lavoro ragionevole. Gli strumenti Cypress PSoC (in particolare PSoC1) sono difettosi.

Modello di memoria piatta

Un MCU che ha paginato RAM / registri / Flash è semplicemente stupido. Sì, sto parlando dei PIC a 8 bit. Stupido, stupido, stupido. Questo mi ha spento così tanto dai PIC che non mi sono nemmeno preso la briga di guardare le loro novità. (Dichiarazione di non responsabilità: ciò significa che i nuovi PIC potrebbero essere migliorati e io proprio non lo so.)

Con una MCU a 8 bit è difficile (ma non impossibile) accedere a strutture di dati superiori a 256 byte. Con una MCU a 16 bit che viene aumentata a 64 kbyte o parole chiave. Con MCU a 32 bit che arriva fino a 4 gigabyte.

Un buon compilatore C può nascondere molto al programmatore (aka You), ma anche in questo caso influisce sulla dimensione del programma e sulla velocità di esecuzione.

Ci sono molte applicazioni MCU per cui questo non sarà un problema, ma ovviamente ce ne sono molte altre che avranno problemi con questo. È principalmente un problema di quanti dati sono necessari (array e strutture) in RAM o Flash. Naturalmente, all'aumentare della velocità della CPU aumenta anche la probabilità di utilizzare strutture di dati più grandi!

Dimensione del pacchetto

Alcuni PIC piccoli e altri MCU a 8 bit sono disponibili in pacchetti davvero piccoli. 6 e 8 pin! Attualmente il più piccolo ARM Cortex-M0 che conosco è in un QFN-28. Mentre un QFN-28 è abbastanza piccolo per la maggior parte, non è abbastanza piccolo per tutti.

Costo

Il PIC più economico è circa un terzo del prezzo del ARM Cortex-M0 più economico. Ma questo è davvero US $ 0,32 contro US $ 0,85. Sì, quella differenza di prezzo conta per alcuni. Ma credo che la maggior parte delle persone su questo sito Web non si preoccupi di quella piccola differenza di costo.

Allo stesso modo, quando si confrontano MCU più capaci con ARM Cortex-M0 / M3 / M4 di solito ARM Cortex esce "all'incirca uniforme" o in cima. Quando si tiene conto delle altre cose (facilità di sviluppo, costi del compilatore, ecc., Gli ARM sono molto interessanti.

Secondo riassunto

Immagino che la vera domanda sia: perché NON dovresti usare un ARM Cortex-M0 / M3 / M4? Quando il costo assoluto è estremamente importante. Quando il consumo di energia estremamente basso è critico. Quando è richiesto il pacchetto più piccolo. Quando la velocità non è importante. Ma per la stragrande maggioranza delle applicazioni nessuna di queste si applica e l'ARM è attualmente la soluzione migliore.

Dato il basso costo, a meno che non ci sia una buona ragione per non usare un ARM Cortex, allora ha senso usarne uno. Consentirà tempi di sviluppo più rapidi e semplici con meno mal di testa e margini di progettazione più ampi rispetto alla maggior parte degli altri MCU.

Sono disponibili altri MCU Cortex a 32 bit non ARM, ma non vedo alcun vantaggio. Ci sono molti vantaggi nell'utilizzo di un'architettura CPU standard, inclusi migliori strumenti di sviluppo e una più rapida innovazione della tecnologia.

Certo, le cose possono e cambiano. Quello che dico è valido oggi, ma potrebbe non essere valido tra un anno o addirittura un mese da adesso. Fai i tuoi compiti.


1
Per accedere a qualsiasi posizione di memoria con ARM, è necessario prima caricare un registro con un indirizzo che si trova all'interno di 4K; a molti dispositivi I / O sono assegnati più di 4K di spazio degli indirizzi, anche se molti utilizzano solo pochi indirizzi discreti. Al contrario, i PIC 18Fxx possono operare direttamente sulla maggior parte delle posizioni I / O con una singola istruzione, indipendentemente dallo stato bancario. Il modo in cui la maggior parte della RAM è archiviata è piuttosto fastidioso, ma per alcuni tipi di bit-bang (lo scopo per cui l'architettura PIC è stata progettata negli anni '70) l'architettura PIC funziona molto bene.
supercat

1
A proposito, trovo curioso che mentre un popolare microprocessore a 8 bit degli anni '70 potesse elaborare in modo efficiente strutture di dati a 256 byte allineate arbitrariamente e un popolare processore a 16 bit potrebbe funzionare bene con strutture di dati a 65.536 byte allineate su 16 - limiti di byte o strutture di dati allineate in modo arbitrario quasi che i processori a 8 e 16 bit più grandi e più recenti rendono difficile scrivere codice efficiente a cavallo tra i confini di pagina / banco.
supercat

@supercat L'intervallo di indirizzi 4K per un'istruzione "Offset immediato LDR / SRT" è vero, ma spesso non è un problema. Non sono d'accordo con il resto del tuo commento. Osservando i documenti Freescale M4, ogni periferica non occupa più di 4K dell'intervallo di indirizzi, quindi un singolo "puntatore di indirizzo di base" è sufficiente per accedere a tutti i registri di quella periferica. Esistono anche 32 registri di uso generale, ognuno dei quali può essere utilizzato come puntatore di indirizzo di base, quindi accedere rapidamente a più periferiche nella stessa sezione di codice è relativamente indolore.

1
@supercat Il tuo secondo punto tocca l'intero dibattito RISC vs. CISC. ARM è una CPU RISC, il che significa che è ottimizzato per svolgere le attività più frequenti. Le attività non frequenti, come gli accessi non allineati, richiedono più lavoro o richiedono più tempo (a seconda dell'arco della CPU). Considero questo come una cosa positiva, non negativa. Ecco perché otteniamo MCU veloci a 32 bit al prezzo di un vecchio 8 bit. Anche con queste stranezze, prenderei una di queste CPU su un PIC ogni giorno.

Ho sbagliato a parlare; Non intendevo implicare che un registro di base non potesse gestire un'intera periferica, ma piuttosto che un registro doveva spesso essere caricato per ogni periferica (quindi non si poteva semplicemente lasciare un registro sempre con IO_BASE_ADDR ). Per alcuni tipi di codice, essere in grado di impostare un bit I / O in un singolo ciclo con un'istruzione come "bsf LATA, 4", senza dover prima precaricare alcun registro, può essere molto utile. Mi piace l'ARM, ma la mappatura I / O diretta sul PIC può essere piuttosto piacevole (peccato che l'accesso alla memoria non sia così piacevole).
supercat

3

David Kessner ha ragione. Vorrei aggiungere quanto segue.

  1. Le MCU a 8 bit sono le uniche MCU prontamente disponibili nei pacchetti PDIP che sono facili da maneggiare e da attaccare in una breadboard di prototipazione.
  2. Le MCU a 32 bit possono effettivamente consumare meno energia rispetto alle MCU a 8 bit. Non è necessariamente vero che l'MCU <20 MHZ a 8 bit consumerà meno energia di un Cortex M4.
  3. Le MCU a 8 bit sono spesso utilizzate da hobbisti che di solito non richiedono molto dalla MCU. Forse poche centinaia di righe di semplice codice C.

Sono d'accordo che in questi giorni ci sono pochi motivi per non usare MCU a 32 bit. Li userei solo [MCU a 8 bit] per 2 motivi: mi piace la facilità del pacchetto PDIP (nessuna saldatura richiesta); Spesso non ho bisogno di più potenza / complessità di quanto possa offrire un MCU a 8 bit.

L'affare è davvero gli strumenti disponibili.


Per la prototipazione, ci sono prese per LQFP, che funzionano abbastanza bene. E ovviamente puoi saldare LQFP a mano, basta un po 'di pratica. QFN, DFN e BGA Non vorrei saldare a mano, ma poi ogni singolo MCU di fascia bassa a 32 bit sul mercato viene fornito con LQFP.
Lundin,

1

Usiamo un MCF52259 Freescale relativamente fuori moda, un MCU a 32 bit ~ 80Mhz.

Ragioni / processo di pensiero per la scelta sono stati:

  • Stava sostituendo un dispositivo M.Core a 32 bit, quindi il porting era relativamente semplice
  • Significava anche che potevamo rimanere con l'IDE esistente (CodeWarrior)
  • Avevamo bisogno di un sacco di IO: controllo per passo / direzione su 3 motori passo-passo, 4 canali di PWM, 3 UART e I2C e SPI.
  • Stavano succedendo molte cose (vedi l'ultimo punto) e alcune di esse dovevano avvenire in modo tempestivo, quindi dovevamo essere sicuri che ci fossero abbastanza cicli CPU per fare tutto.
  • Il codice legacy si scontrava con la dimensione del flash di 256k e la RAM di 32k di M.Core, quindi il raddoppio del flash e della RAM ha reso la vita facile da avviare e funzionare rapidamente.

Al giorno d'oggi è più conveniente (e conveniente) sovra-specificare / espandere le capacità dell'hardware (archiviazione, velocità, I / O, ecc.) Piuttosto che spendere tempo prezioso per lo sviluppo ottimizzando il codice per comprimersi in un MCU marginalmente più economico / più piccolo a meno che lo spazio o il potere è un grosso problema.

Nel nostro caso, il dispositivo era il doppio delle specifiche del M.Core per metà del prezzo, andare a un MCU più economico avrebbe risparmiato solo pochi centesimi per scheda, ma avrebbe costato molto tempo di sviluppo e limitato il potenziale per lo sviluppo futuro senza cambiare di nuovo MCU.

Se stessimo costruendo un milione di schede, varrebbe la pena fare un esercizio di ingegneria dei costi per ridurre le cose, ma così com'è non vale il tempo di sviluppo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.