EUR | USD

La memoria Flash esterna presenta dei vantaggi per l'utilizzo delle tabelle di ricerca in endpoint IoT ad alte prestazioni.

Di Bill Giovino

Contributo di Editori nordamericani di Digi-Key

Con l'aumentare della complessità delle reti Internet delle cose (IoT), anche l'elaborazione "periferica" da parte degli endpoint IoT si fa più complessa. Di conseguenza, si potrebbe dover aggiornare un endpoint esistente con un sistema dotato di un microcontroller con una maggiore velocità di clock, più memoria e un core di processore più potente.

Potrebbero anche essere richiesti sensori e convertitori analogico/digitale (ADC) con un elevato livello di precisione, cosa che potrebbe rendere necessaria una calibrazione periodica. Gli errori lineari sono facili da compensare con una formula. Gli errori non lineari invece non seguono uno schema prestabilito di deviazione dalla lettura del sensore e quindi non è facile compensarli matematicamente. Spesso il modo più semplice di compensare errori non lineari nel firmware è quello di memorizzare i dati di correzione richiesti con una tabella di ricerca dei dati.

Questo articolo tratterà brevemente degli errori dei sensori e degli ADC e illustrerà i vantaggi delle tabelle di ricerca dei dati per correggere tali errori. Verrà poi spiegato come implementare una pratica e poco costosa tabella di ricerca su Flash in un sistema basato su microcontroller STM32L496VG di STMicroelectronics utilizzando un chip di memoria Flash SPI (interfaccia periferica seriale) LE25S161PCTXG esterna di ON Semiconductor.

Errori dei sensori

I sensori che rilevano condizioni analogiche come temperatura, pressione e tensione possono avere degli errori non lineari. Durante la fase di sviluppo di un progetto è importante testare i sensori rispetto a un riferimento preciso e confrontare il valore di riferimento con l'uscita digitale del sensore. In questo modo è possibile scoprire per tempo la natura di eventuali deviazioni dei sensori rispetto ai valori di riferimento e se sono accettabili a fronte dei requisiti dell'applicazione. Si può quindi decidere se è necessaria una compensazione e, in caso affermativo, se deve essere fatta nell'hardware o nel firmware.

Alcuni errori dei sensori possono essere lineari e prevedibili. Per compensarli potrebbe essere sufficiente aggiungere o sottrarre un valore costante all'uscita del sensore. A volte questi errori possono variare lungo la scala del sensore. Ad esempio, da zero a un terzo del fondo scala potrebbe essere necessario aggiungere una costante; da un terzo a metà scala potrebbe essere invece richiesta una costante diversa.

Questi errori sono prevedibili e ovviamente facili da correggere. Ma, nel tempo, la deviazione da una lettura accurata potrebbe cambiare. Inoltre, in seguito potrebbero verificarsi nuovi errori dei sensori a causa, ad esempio, dell'esposizione a temperature estreme, umidità ambiente elevata o del loro invecchiamento. La necessità di correggere o meno questi errori dipende sempre dall'applicazione. Per stabilire il comportamento dei sensori potrebbe essere necessario testare il sistema in condizioni estreme di temperatura, pressione e umidità. Alcune applicazioni per il settore automotive, militare e per alcuni sistemi industriali richiedono questi test ambientali. Tuttavia, molti nuovi endpoint IoT vanno dove nessun sensore è mai andato prima e quindi il test dei sensori potrebbe essere un nuovo requisito.

Al pari di qualsiasi sensore analogico, periferiche analogiche comuni a microcontroller come gli ADC possono richiedere anche una calibrazione periodica in-system. Gli errori degli ADC non sono sempre prevedibili e anche se l'errore iniziale può essere corretto con un algoritmo, nel tempo potrebbe cambiare tanto da essere difficile da correggere. Il sistema finirebbe quindi per non funzionare più con la precisione richiesta e la sostituzione avrebbe dei costi elevati.

I vantaggi di utilizzare una tabella di ricerca dei dati per correggere gli errori dei sensori analogici

Una tabella di ricerca dei dati può essere un metodo pratico ed efficiente per eseguire rapidamente alcuni calcoli comuni complessi come le funzioni trigonometriche, o semplici come l'inversione dei bit di un byte o la conversione di un byte in codice Gray. L'utilizzo di una tabella di ricerca da 256 byte per l'inversione dei bit di un byte è molto più veloce rispetto all'esecuzione dell'inversione dei bit nel firmware. L'archiviazione di questa tabella di ricerca nella memoria Flash dei dati o del programma è sicura, in quanto occupa poco spazio e non deve mai essere cambiata.

Una tabella di ricerca dei dati è anche un metodo molto pratico per memorizzare i dati di calibrazione dei sensori. Una periferica analogica a microcontroller come un ADC integrato potrebbe richiedere una calibrazione periodica utilizzando esattamente lo stesso metodo di un sensore analogico. Gli ADC presenti nella maggior parte dei microcontroller possono avere una precisione fino a ±2 o ±3 bit meno significativi (LSB). Anche se questa precisione può essere adeguata per la maggior parte delle applicazioni, se i sistemi ne richiedono una superiore, è consigliato calibrare periodicamente gli ADC.

Una tabella di ricerca di calibrazione parziale per la correzione dei dati a 24 bit potrebbe essere simile alla Tabella 1.

Lettura del sensore   Valore corretto del sensore
:   :
01 AB 24h   00 01 AB 21h
01 AB 25h   00 01 AB 22h
01 AB 26h   00 01 AB 24h
:   :

Tabella 1: Estratto di un esempio di tabella di ricerca dei dati di calibrazione a 24 bit. Il valore di ingresso non elaborato è la lettura della sorgente di cui occorre correggere gli errori. Questo valore non elaborato viene poi utilizzato come indirizzo a 24 bit e per cercare il corrispondente valore corretto a 32 bit, dove il byte più significativo è sempre 00h. (Dati della tabella per gentile concessione di Digi-Key Electronics)

In questo esempio, il valore di ingresso non elaborato è la lettura della sorgente di cui occorre correggere gli errori. Questo valore non elaborato viene poi utilizzato come indirizzo a 24 bit e per cercare il corrispondente valore corretto a 32 bit, dove il byte più significativo è sempre 00h. Se la tabella di ricerca non inizia dall'indirizzo zero, è possibile aggiungere un offset al valore di ingresso non elaborato.

Prima di decidere dove memorizzare la tabella di ricerca, è importante stabilirne le dimensioni e se deve essere riscritta. Entrambe queste decisioni sono importanti. Una tabella di ricerca che sta nella Flash disponibile su chip del microcontroller è idonea se non deve mai essere riscritta. Ma se il sensore deve essere ricalibrato periodicamente, occorre riscrivere la Flash interna e cancellare e riprogrammare l'intero settore della Flash con la tabella.

Se il settore della Flash condivide lo spazio con la memoria del programma, potrebbe essere necessario ricompilare il codice. Anche se la tabella di ricerca si trova nel proprio settore dedicato, in seguito i requisiti di memoria potrebbero cambiare o aumentare e si dovrebbe riallocare lo spazio della tabella per accogliere il codice aggiuntivo. Questo complica la calibrazione del sensore sul campo e potrebbe impedire l'autocalibrazione indipendente dell'endpoint IoT richiedendo che il codice ricompilato venga scaricato sulla rete. Il problema si fa ancora più complesso se sono coinvolti più sensori.

Tabelle di ricerca di grandi dimensioni, ad esempio di 16.777.216 voci per la calibrazione di dati digitali a 24 bit, sono poco pratiche o al di fuori delle capacità della memoria Flash del programma su chip. Le dimensioni possono essere dimezzate solo memorizzando una voce su due e i risultati di quelle mancanti vengono interpolati sulla base dei dati esistenti. Ne conseguono delle prestazioni scadenti e una possibile perdita di precisione di ±1 LSB. Tuttavia, anche questa tabella di 8.388.608 voci può essere difficile da memorizzare nella Flash interna.

Per queste tabelle di ricerca dei dati di grandi dimensioni in un sistema basato su microcontroller la soluzione migliore è una memoria Flash esterna. Questo tipo di memoria offre un modo facile di aggiungere più megabyte di tabelle di ricerca senza sacrificare la memoria Flash interna del programma. Il sistema inoltre può riscrivere facilmente la tabella senza interferire con la memoria Flash interna del microcontroller.

Per i sistemi ad alte prestazioni, l'aggiunta di memoria Flash parallela esterna è una pratica comune per espandere sia la memoria del programma che quella dei dati. Tuttavia, è richiesto un microcontroller con un bus dati esterno. I bus dati e gli indirizzi aggiuntivi e i segnali di controllo richiesti possono utilizzare 36 pin o più del microcontroller. Questo requisito limita il numero di microcontroller disponibili per l'applicazione. Questi bus esterni occupano poi altro spazio su scheda e possono aumentare le interferenze elettromagnetiche (EMI) del sistema.

Per la maggior parte dei sistemi la soluzione migliore è quella di utilizzare una memoria Flash seriale esterna dei dati che utilizza un'interfaccia periferica seriale (SPI) per il trasferimento dei dati. Potrebbero essere sufficienti appena quattro pin sul microcontroller.

Un buon esempio di questo dispositivo di memoria Flash è LE25S161PCTXG di ON Semiconductor. Si tratta di un dispositivo di memoria Flash seriale da 16 Mbit che supporta un clock SPI di 70 MHz. Inoltre supporta anche la modalità dual SPI che consente di trasferire i dati a una velocità massima di 140 Mbit/sec. I registri di stato interni vengono utilizzati per configurare le modalità di lettura, scrittura e basso consumo energetico del dispositivo.

LE25S161PCTXG è dotato dei normali segnali SPI per la selezione di clock, dati e chip (Figura 1). Ha anche due pin supplementari. WP\ è un segnale attivo basso che impedisce la scrittura nei registri di stato del dispositivo. Può essere utilizzato per evitare che attività firmware a bassa priorità riscrivano il dispositivo senza possedere l'autorizzazione per farlo. HOLD\ mette in pausa un trasferimento dati in corso. È utile se il microcontroller deve risolvere un interrupt mentre è in corso un trasferimento di dati. Il trasferimento può essere messo in pausa fino alla risoluzione dell'interrupt e riprenderà poi da dove era stato interrotto.

Schema della memoria Flash seriale LE25S161PCTXG di ON Semiconductor

Figura 1: La memoria Flash seriale LE25S161PCTXG di ON Semiconductor è disponibile in un contenitore UDFN a 8 pin con un ingombro ultracompatto di soli 3x4 mm e dispone dei normali segnali SPI per la selezione di clock, dati e chip. (Immagine per gentile concessione di ON Semiconductor)

Il modo più facile per leggere una semplice tabella di ricerca di due colonne memorizzata in questo dispositivo è quello di prendere la lettura del sensore, aggiungere un offset di memoria e quindi leggere il contenuto della memoria in quella posizione dell'indirizzo. Il contenuto della memoria in quell'indirizzo rappresenta la lettura corretta del sensore.

Un endpoint IoT ad alte prestazioni richiede una velocità di clock elevata, un processore ad alte prestazioni e una SPI flessibile. Per queste applicazioni STMicroelectronics mette a disposizione la famiglia di microcontroller ad alte prestazioni STM32L4. Ad esempio, il microcontroller STM32L496VG fa parte della famiglia di prodotti STM32L4 che funziona a 80 MHz e si avvale di un core Arm® Cortex®-M4 con una unità a virgola mobile (FPU). Ha 8 Mbit di Flash e 320 kB di SRAM. Supporta una tensione di funzionamento tra 1,71 e 3,6 V, a fronte di quella tra 1,65 e 1,95 V di LE25S161PCTXG di ON Semiconductor.

STM32L496VG ha una gamma completa di periferiche per un endpoint IoT ad alte prestazioni, tra cui un clock in tempo reale (RTC) con calendario, tre ADC da 5 Msps, un convertitore digitale/analogico (DAC) a due canali, due interfacce CAN (Controller Area Network) e quattro interfacce I2C (Figura 2). Dispone anche di tre interfacce SPI standard e di un'interfaccia quad SPI.

Schema del microcontroller STM32L496 di STMicroelectronics basato su un Arm Cortex-M4 a 80 MHz (fare clic per ingrandire)

Figura 2: Il microcontroller STM32L496 è basato su un Arm Cortex-M4 a 80 MHz con FPU e ha un set completo di periferiche, tra cui un'interfaccia quad SPI a 40 MHz. (Immagine per gentile concessione di STMicroelectronics)

Lo sviluppo di STM32L496VG è supportato dalla scheda Discovery STM32L496G-DISCO (Figura 3). Si tratta di una scheda di sviluppo dotata di tutte le funzionalità per un endpoint IoT e comprende microfoni per sistemi microelettromeccanici (MEMS) stereo, un connettore per videocamera a 8 bit, otto LED, un joystick a quattro direzioni e un LCD a colori di 240x240 pixel. Gli ingressi ADC, i pin quad SPI e la maggior parte degli I/O sono disponibili sui pin del connettore.

Immagine della scheda Discovery STM32L496G-DISCO di STMicroelectronics

Figura 3: La scheda Discovery STM32L496G-DISCO è un ambiente di valutazione completo per lo sviluppo di hardware e firmware per ST32L496VG. (Immagine per gentile concessione di STMicroelectronics)

La quad SPI di STM32L496VG supporta un clock SPI di 40 MHz max e le modalità SPI standard e mappate in memoria. La quad SPI supporta la modalità dual SPI, consentendo trasferimenti di dati fino a 80 Mbit/sec.

La quad SPI di STMicroelectronics fornisce un'interfaccia ai dispositivi di memoria Flash seriale di dati. In modalità SPI standard, tutte le operazioni vengono eseguite utilizzando i registri SPI. I dati vengono trasferiti tramite la lettura e la scrittura del registro dati SPI. Alla ricezione dei dati viene generato un interrupt. La modalità operativa è identica a quella delle tre SPI standard in STM32L496VG. La modalità SPI standard supporta trasferimento dati singolo, dual e quad. LE25S161 di ON Semiconductor supporta le modalità SPI singola e dual e può facilmente interfacciarsi con STM32L496VG in modalità dual SPI (Figura 4).

Schema della porta seriale quad SPI di STM32L496VG di STMicroelectronics

Figura 4: La porta seriale quad SPI di STM32L496VG di STMicroelectronics può interfacciarsi con LE25S161 di ON Semiconductor in modalità dual SPI, consentendo trasferimenti bidirezionali di dati su SIO0 e SIO1 con un SCLK a 40 MHz a 80 Mbits/sec. (Immagine per gentile concessione di Digi-Key Electronics)

In questa situazione, la scelta dei componenti di ON Semiconductor e di STMicroelectronics semplifica l'implementazione di una tabella di ricerca dei dati. La quad SPI ha anche una funzione FIFO che è utile per i trasferimenti di dati in massa. Tuttavia, per una tabella di ricerca in cui è necessario accedere a una sola posizione di memoria alla volta, si consiglia di disabilitare la funzione FIFO in quanto non serve e potrebbe addirittura aumentare il ritardo.

Quad SPI con modalità mappata in memoria

La quad SPI supporta anche una modalità mappata in memoria. Questa modalità mappa la Flash seriale esterna nel programma o nello spazio di memoria dei dati del microcontroller. Il firmware del microcontroller può così accedere alla Flash SPI esterna come se facesse parte della memoria del microcontroller stesso. Pertanto, il funzionamento della quad SPI risulta trasparente al firmware.

Se gli accessi alla tabella di ricerca avvengono raramente, l'implementazione di una tabella di ricerca con modalità mappata in memoria rispetto alla modalità SPI standard potrebbe non avere dei vantaggi significativi, a parte semplificare il firmware dell'applicazione. Se invece l'applicazione è un ambiente con interrupt frequenti, i trasferimenti SPI possono essere ripetutamente messi in pausa per poterli rispettare. Le cose possono farsi ancora più complesse se un'operazione di ricerca della quad SPI viene interrotta a beneficio di un'altra.

La combinazione di accessi frequenti alle tabelle di ricerca e di un ambiente con un numero elevato di interrupt può rendere rapidamente più efficiente la modalità mappata in memoria rispetto a quella SPI standard. Semplifica il firmware, evita problemi dovuti ad accessi quad SPI simultanei con priorità diverse e riduce i conflitti di interrupt.

Tuttavia, l'implementazione di una tabella di ricerca mappata in memoria potrebbe inquinare la cache dei dati. Mentre STM32L496 non ha una cache dei dati, non può dirsi lo stesso di alcuni microcontroller per applicazioni ad alte prestazioni in tempo reale. L'accesso alla tabella di ricerca molto probabilmente porterà al fallimento della cache perché la maggior parte delle applicazioni difficilmente avrà bisogno di accedere due volte alla stessa posizione della tabella di ricerca nello stesso thread o nella stessa subroutine. Siccome inizialmente i dati della tabella di ricerca non sono memorizzati nella cache, il loro inserimento potrebbe portare alla rimozione di dati importanti dalla cache. Anche se questo problema riguarda solo applicazioni ad altissime prestazioni, sono proprio queste applicazioni che richiedono prima di tutto la cache dei dati.

In caso di inquinamento della cache da parte di una tabella di ricerca, non esistono molte soluzioni. Se l'hardware lo consente, l'area della tabella può essere contrassegnata come non inseribile nella cache. Un'altra soluzione è quella di disattivare e quindi riattivare la cache dei dati prima e dopo l'accesso alla tabella di ricerca. Se con l'attivazione e disattivazione della cache le prestazioni sono accettabili, lo si può fare. Alcune cache di dati supportano istruzioni di controllo specifiche dell'architettura che possono contribuire a evitare l'inquinamento della cache. Quando si configura la cache dei dati è importante confrontare le prestazioni del sistema per trovare il metodo migliore per una determinata applicazione.

La Flash seriale deve essere posizionata sulla scheda in modo che non vi siano tracce più lunghe di 120 millimetri (mm). Per evitare interferenze, la distanza tra il percorso del segnale del clock SPI e quello degli altri segnali dovrebbe essere pari ad almeno tre volte la larghezza delle tracce della scheda. Per evitare la distorsione, i segnali dei dati bidirezionali dovrebbero essere entro 10 mm l'uno dall'altro.

Conclusione

Una Flash SPI esterna può essere una soluzione efficiente per implementare tabelle di ricerca dei dati di grandi dimensioni in un endpoint IoT. È facile da riprogrammare in-system e da aggiornare e utilizza pochissime risorse del microcontroller.

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di Digi-Key Electronics o le sue politiche.

Informazioni su questo autore

Bill Giovino

Bill Giovino è un ingegnere elettronico con un BSEE ottenuto a Syracuse University, ed è uno dei pochi ad essere passati con successo da progettista, a ingegnere delle applicazioni sul campo, al marketing tecnologico.

Da oltre 25 anni, Bill promuove le nuove tecnologie per un pubblico tecnico e non tecnico a nome di molte aziende, tra cui STMicroelectronics, Intel e Maxim Integrated. In STMicroelectronics, Bill ha contribuito a guidare i primi successi dell'azienda nel settore dei microcontroller. Con Infineon, Bill ha orchestrato i primi successi di progettazione di microcontroller dell'azienda nel settore automotive statunitense. In qualità di consulente di marketing per la sua società CPU Technologies, Bill ha aiutato molte aziende a trasformare prodotti di secondo grado in storie di successo.

Bill è stato uno dei primi ad adottare l'Internet delle cose, compresa l'integrazione del primo stack TCP/IP completo su un microcontroller. Bill è fedele al motto "Le vendite guidate dall'educazione" e tiene molto alla crescente importanza di comunicazioni chiare e ben scritte nella promozione di prodotti online. È moderatore del famoso gruppo Sales & Marketing di LinkedIn Semiconductor e parla correntemente di B2E.

Informazioni su questo editore

Editori nordamericani di Digi-Key