Extern Flash-geheugen biedt voordelen bij het gebruik van opzoektabellen in high-performance IoT-eindpunten

By Bill Giovino

Contributed By De Noord-Amerikaanse redacteurs van Digi-Key

Naarmate netwerken van het internet der dingen (in het Engels Internet of Things - IoT) gecompliceerder worden, voeren IoT-eindpunten steeds complexere edge-processing uit. Hierdoor kan het nodig zijn om een bestaand eindpunt te upgraden met een systeem dat een microcontroller met hogere kloksnelheid, meer geheugen en krachtigere processorkern heeft.

Dit kan ook sensors en analoog-digitaalomzetters (ADC's) vereisen die een hoog nauwkeurigheidsniveau hebben en die wellicht periodiek gekalibreerd moeten worden. Lineaire fouten kunnen gemakkelijk worden gecompenseerd met een formule. Niet-lineaire fouten volgen echter geen vast patroon van afwijkingen ten opzichte van de sensorwaarde en kunnen daarom niet eenvoudig met een wiskundige formule worden gecompenseerd. Om niet-lineaire fouten in firmware te compenseren, is het vaak het eenvoudigst om de benodigde correctiegegevens in het geheugen op te slaan met een gegevensopzoektabel.

Dit artikel staat kort stil bij sensor- en ADC-fouten en bespreekt de voordelen van het gebruik van opzoektabellen om dergelijke fouten te corrigeren. Vervolgens wordt uitgelegd hoe een praktische en kosteneffectieve Flash-gegevensopzoektabel kan worden geïmplementeerd in een op de STM32L496VG-microcontroller van STMicroelectronics gebaseerd systeem met behulp van een externe LE25S161PCTXG seriële perifere interface (SPI) Flash-geheugenchip van ON Semiconductor.

Sensorfouten

Sensors die analoge condities detecteren, zoals temperatuur, druk en spanning, kunnen niet-lineaire fouten vertonen. Het is tijdens de ontwikkelingsfase van een project belangrijk om sensors te testen tegen een nauwkeurige referentie en de referentiewaarde met de digitale uitvoer van de sensor te vergelijken. Hierdoor kan de ontwikkelaar in een vroeg stadium de aard van eventuele sensorafwijkingen ten opzichte van de referentiewaarden bepalen en nagaan of de afwijkingen aanvaardbaar zijn voor de gegeven toepassingsvereisten. De ontwikkelaar kan vervolgens beslissen of het nodig is om eventuele afwijkingen te compenseren en, als dit het geval is, of de afwijkingen in de hardware of de firmware moeten worden gecompenseerd.

Sommige sensorfouten kunnen voorspelbare lineaire fouten zijn. Compensatie voor deze fouten kan heel eenvoudig zijn, bijvoorbeeld door een constante waarde bij de sensoruitvoer op te tellen of ervan af te trekken. Soms kunnen deze fouten variëren over de sensorschaal. Bijvoorbeeld, van nul tot een derde van de volledige schaal kan het nodig zijn om een bepaalde constante toe te voegen; van een derde van de schaal tot de halve schaal kan een andere constante nodig zijn.

Deze fouten zijn voorspelbaar en zijn uiteraard gemakkelijk te corrigeren. De afwijking ten opzichte van een nauwkeurige aflezing kan door de tijd heen echter veranderen. Bovendien kunnen fouten van nieuwe sensors zich pas later ontwikkelen, als gevolg van blootstelling aan extreme temperaturen, hoge luchtvochtigheid of veroudering van de sensors. Of deze fouten wel of niet gecorrigeerd moeten worden, is altijd afhankelijk van de toepassing. Het kan nodig zijn om het systeem bij extreme temperatuur-, druk- en vochtigheidswaarden te testen om te zien hoe de sensor zich gedraagt. Deze omgevingstests zijn noodzakelijk voor toepassingen in de automotive sector, voor militaire systemen en soms voor industriële systemen. Veel nieuwe IoT-eindpunten gaan verder dan sensors ooit eerder gegaan zijn, en het zou kunnen zijn dat het testen van sensor een nieuwe vereiste wordt.

Gewone analoge randapparaten van microcontrollers, zoals ADC's, kunnen ook periodieke kalibratie in het systeem vereisen, zoals iedere analoge sensor. ADC-fouten zijn niet altijd voorspelbaar, en ook als de initiële fout kan worden gecorrigeerd met een algoritme, kan de fout in de loop van de tijd veranderen, mogelijk op een manier die niet eenvoudig met een algoritme kan worden gecorrigeerd. Dit kan ertoe leiden dat een systeem niet langer met de vereiste nauwkeurigheid werkt, met hoge vervangingskosten als gevolg.

Voordelen van het gebruik van een gegevensopzoektabel voor de correctie van fouten van analoge sensors

Een gegevensopzoektabel kan een praktische en efficiënte methode zijn om snel enkele veel voorkomende berekeningen uit te voeren; daarbij kan het gaan om gecompliceerde berekeningen, bijvoorbeeld trigonometrische functies, of juist hele eenvoudige, zoals byte-bit-omkering of het converteren van een byte naar een Gray-code. Het gebruik van een 256-byte opzoektabel voor byte-bit-omkering is aanzienlijk sneller dan het uitvoeren van bit-omkering in firmware. Deze opzoektabel kan veilig in het programma- of data-Flash-geheugen worden opgeslagen, aangezien hij weinig ruimte in beslag neemt en nooit hoeft te worden veranderd.

Een gegevensopzoektabel is ook een zeer praktische methode om sensorkalibratiegegevens op te slaan. Een analoog microcontroller-randapparaat zoals een ingebouwde ADC kan periodieke kalibratie vereisen, waarbij exact dezelfde methode wordt gebruikt als bij een analoge sensor. De ADC's die in de meeste microcontrollers worden aangetroffen, kunnen nauwkeurig zijn tot ±2 of ±3 minst significante bits (least significant bits - LSB's). Alhoewel ze voor de meeste toepassingen adequaat zullen zijn, heeft het voor systemen die hoge nauwkeurigheid vereisen zin om de ADC's periodiek te kalibreren.

Een gedeeltelijke kalibratie-opzoektabel voor het corrigeren van 24-bits data kan eruit zien zoals Tabel 1.

Aflezing sensor   Gecorrigeerde waarde sensor
:   :
01 AB 24h   00 01 AB 21h
01 AB 25h   00 01 AB 22h
01 AB 26h   00 01 AB 24h
:   :

Tabel 1: een uittreksel van een voorbeeld van een gegevensopzoektabel voor 24-bits kalibratiegegevens. De onbewerkte invoerwaarde is de bronwaarde die moet worden gecorrigeerd op fouten. Deze onbewerkte waarde wordt vervolgens gebruikt als een 24-bit adres en wordt gebruikt om de overeenkomstige gecorrigeerde 32-bits waarde op te zoeken, waarbij de meest significante byte altijd 00h is. (Bron tabelgegevens: Digi-Key Electronics)

In dit voorbeeld is de onbewerkte invoerwaarde de bronaflezing die op fouten moet worden gecorrigeerd. Deze onbewerkte waarde wordt vervolgens gebruikt als een 24-bits adres en wordt gebruikt om de overeenkomstige gecorrigeerde 32-bits waarde op te zoeken, waarbij de meest significante byte altijd 00h is. Er kan een offset aan de onbewerkte invoerwaarde worden toegevoegd als de opzoektabel niet bij adres nul begint.

Alvorens te beslissen waar de opzoektabel zal worden opgeslagen, is het belangrijk om te bepalen hoe groot de opzoektabel moet zijn en of het nodig is om hem te herschrijven. Beide aspecten zijn belangrijk. Een opzoektabel die in het beschikbare on-chip Flash-geheugen van de microcontroller past, heeft zin als hij nooit herschreven hoeft te worden. Maar als de sensor periodieke herkalibratie vereist, betekent dit dat het interne Flash-geheugen moet worden herschreven, waardoor de hele Flash-sector met de tabel moet worden gewist en geherprogrammeerd.

Als de Flash-sector ruimte met het programmageheugen deelt, kan het hierbij nodig zijn om de code te hercompileren. Zelfs als de opzoektabel in een eigen speciale sector zit, kunnen geheugenvereisten op een later tijdstip veranderen of worden uitgebreid, waardoor een deel van de ruimte in de opzoektabelsector wordt hergebruikt voor aanvullende code. Dit bemoeilijkt sensorkalibratie in het veld en kan onafhankelijke zelfkalibratie van het IoT-eindpunt in de weg staan, doordat het nodig is dat de opnieuw gecompileerde code over het netwerk wordt gedownload. Het probleem wordt nog ingewikkelder als er meerdere sensors bij betrokken zijn.

Grote opzoektabellen, zoals een tabel met 16.777.216 invoeren voor het kalibreren van 24-bits digitale gegevens, zijn onpraktisch of onmogelijk voor flash-programmageheugen op de chip. De grootte van de opzoektabel kan tot de helft worden teruggebracht als slechts één op de twee invoeren wordt opgeslagen en de resultaten voor de ontbrekende invoeren worden geïnterpoleerd op basis van de bestaande tabelgegevens. Dit leidt tot minder beïnvloeding van de prestaties en een mogelijk nauwkeurigheidsverlies van ±1 LSB. Maar ook voor deze opzoektabel met 8.388.608 invoeren geldt dat het praktisch niet haalbaar kan zijn om hem in het interne Flash-geheugen op te slaan.

De beste oplossing voor dergelijke grote gegevensopzoektabellen in een op een microcontroller gebaseerd systeem is een extern Flash-geheugen. Dit biedt een eenvoudige manier om opzoektabellen van meerdere megabytes toe te voegen zonder het interne Flash-programmageheugen op te offeren. Het systeem wordt zo in staat gesteld om de opzoektabel gemakkelijk te herschrijven zonder interferentie met het interne Flash-geheugen van de microcontroller.

Voor high-performance systemen is het toevoegen van extern parallel Flash-geheugen gebruikelijk voor zowel programma- als datageheugenuitbreiding. Hiervoor is echter een microcontroller met een externe databus nodig. De extra adressen en databussen en de benodigde stuursignalen kunnen 36 of meer pinnen van de microcontroller in beslag nemen. Hierdoor wordt de beschikbaarheid van microcontrollers voor de toepassing zelf beperkt. Deze externe bussen nemen ook extra ruimte op de printplaat in beslag en kunnen de elektromagnetische interferentie (EMI) van het systeem verhogen.

Voor de meeste systemen is de beste oplossing om een extern serieel Flash-datageheugen te gebruiken, dat een seriële perifere interface (SPI) gebruikt voor gegevensoverdracht. Hiervoor zijn vaak maar vier pinnen van de microcontroller nodig.

Een goed voorbeeld van een dergelijk Flash-geheugen is de LE25S161PCTXG van ON Semiconductor. Dit is een serieel Flash-geheugenapparaat van 16 megabit (Mbit) dat een SPI-klok van 70 megahertz (MHz) ondersteunt. Het ondersteunt echter ook de dubbele SPI-modus die het mogelijk maakt om gegevens over te dragen op een topsnelheid van 140 Mbit/sec. Er worden interne statusregisters gebruikt om de lees-, schrijf- en stroombesparingsmodi van het apparaat te configureren.

De LE25S161PCTXG heeft de gebruikelijke SPI-signalen voor klok, gegevens en chipselectie (Afbeelding 1). Daarnaast zijn er twee extra pinnen. WP\ is een actief-laag schrijfbeveiligingssignaal dat schrijven naar de statusregisters van het apparaat voorkomt. Dit kan worden gebruikt om niet-geautoriseerd herschrijven van het apparaat door firmware-taken met lage prioriteit te voorkomen. HOLD\ pauzeert een lopende gegevensoverdracht. Dit is nuttig als de microcontroller een interrupt moet bedienen terwijl een gegevensoverdracht bezig is. De gegevensoverdracht kan worden gepauzeerd totdat de interrupt bediend is, en vervolgens worden van hetzelfde punt worden hervat.

Schema van LE25S161PCTXG serieel Flash-geheugen van ON Semiconductor

Afbeelding 1: het LE25S161PCTXG seriële Flash-geheugen van ON Semiconductor is beschikbaar in een 8-pins UDFN pakket met ultra-kleine voetafdruk van 3 x 4 millimeter (mm) en heeft de gebruikelijke SPI-signalen voor klok, data en chipselectie. (Bron afbeelding: ON Semiconductor)

De gemakkelijkste manier om een in dit apparaat opgeslagen, eenvoudige, uit twee kolommen bestaande tabel te lezen is de sensoraflezing te nemen, een geheugen-offset toe te voegen en vervolgens de geheugeninhoud af te lezen op die adreslocatie. De inhoud van het geheugen op dat adres komt overeen met de gecorrigeerde sensoraflezing.

Een high-performance IoT-eindpunt vereist een hoge kloksnelheid, een processor die hoge prestaties levert en een flexibele SPI. Voor deze toepassingen biedt STMicroelectronics de high-performance STM32L4-microcontrollerfamilie. De STM32L496VG-microcontroller bijvoorbeeld is een lid van de STM32L4-productfamilie die op 80 MHz werkt en een Arm® Cortex®-M4 core met een floating point unit (FPU) heeft. Hij heeft 8 Mbit Flash en 320 kilobyte (Kbytes) SRAM. Hij ondersteunt een bedrijfsspanning van 1,71 tot 3,6 volt, en overlapt dus met de bedrijfsspanning van 1,65 tot 1,95 volt van de LE25S161PCTXG’ van ON Semiconductor.

De STM32L496VG beschikt over een complete reeks van randapparaten voor een high-performance IoT-eindpunt, waaronder een real-time klok (RTC) met kalender, drie 5 megasample per seconde (MSPS) ADC's, een tweekanaals digitaal-analoogomzetter (DAC), twee controller area network (CAN)-interfaces en vier I2C-interfaces (Afbeelding 2). Hij heeft ook drie standaard SPI-interfaces en een viervoudige SPI-interface.

Schema van de STM32L496 microcontroller van STMicroelectronics, gebaseerd op een 80 MHz Arm Cortex-M4 (klik om te vergroten)

Afbeelding 2: de STM32L496 microcontroller is gebaseerd op een 80 MHz Arm Cortex-M4 met FPU en heeft een complete reeks van randapparaten, inclusief een 40 MHz viervoudige SPI-interface. (Bron afbeelding: STMicroelectronics)

Ontwikkeling voor de STM32L496VG wordt ondersteund door het STM32L496G-DISCO discovery board (Afbeelding 3). Het is een development board met alles erop en eraan voor een IoT-eindpunt en omvat stereo microfoons van het type MEMS (micro-elektromechanische systemen), een 8-bits cameraconnector, acht leds, een joystick met vier richtingen en een kleuren-LCD van 240 x 240 pixel. De ADC-ingangen, viervoudige SPI-pinnen en de meeste in-/uitgangen (I/O) zijn op de connectorpinnen beschikbaar.

Afbeelding van het STM32L496G-DISCO discovery board van STMicroelectronics

Afbeelding 3: het STM32L496G-DISCO discovery board is een complete evaluatie-omgeving voor hardware- en firmware-ontwikkeling voor de ST32L496VG. (Bron afbeelding: STMicroelectronics)

De viervoudige SPI op de STM32L496VG ondersteunt een SPI-klok van maximaal 40 MHz en ondersteunt standaard en memory-mapped SPI-modi. De viervoudige SPI ondersteunt dubbele SPI-modus voor gegevensoverdracht op maximaal 80 Mbit/sec.

De viervoudige SPI van STMicroelectronics biedt een snelle interface voor seriële Flash-datageheugenapparaten. In de standaard SPI-modus worden alle bewerkingen uitgevoerd met behulp van de SPI-registers. Gegevens worden overgedragen door lezen van en schrijven naar het SPI-dataregister. Er wordt een interrupt gegenereerd wanneer gegevens worden ontvangen. Dit is de zelfde werkingsmodus als van de drie standaard SPI's op de STM32L496VG. Standaard SPI-modus ondersteunt enkele, dubbele en viervoudige gegevensoverdracht. De LE25S161 van ON Semiconductor ondersteunt enkele en dubbele SPI-modi en kan gemakkelijk worden verbonden met de STM32L496VG in dubbele SPI-modus (Afbeelding 4).

Schema van STM32L496VG viervoudige SPI seriële poort van STMicroelectronics

Afbeelding 4: De viervoudige seriële SPI-poort van de STM32L496VG van STMicroelectronics kan worden verbonden met de LE25S161 van ON Semiconductor in dubbele SPI-modus, voor bidirectionele gegevensoverdracht over SIO0 en SIO1 met een 40 MHz SCLK op 80 Mbit/sec. (Bron afbeelding: Digi-Key Electronics)

Het implementeren van een gegevensopzoektabel in deze situatie wordt eenvoudig gemaakt door de keuze van de componenten van ON Semiconductor en STMicroelectronics voor een rechttoe rechtaan implementatie. De viervoudige SPI heeft ook een FIFO, nuttig voor bulkgegevensoverdracht. Voor een opzoektabel waarbij toegang tot slechts één geheugenlocatie tegelijk moet worden verkregen, wordt echter aanbevolen om de FIFO uit te schakelen, omdat deze niet nodig is en mogelijk zelfs onnodige vertraging kan opleveren.

Viervoudige SPI met memory-mapped modus

De viervoudige SPI ondersteunt ook een memory-mapped modus. Deze mapt het externe seriële Flash in de programma- of datageheugenruimte van de microcontroller. Hierdoor kan de firmware van de microcontroller toegang krijgen tot het externe SPI Flash alsof dit deel van het eigen geheugen van de microcontroller is, met als resultaat dat de werking van de viervoudige SPI transparant is voor de firmware.

Bij sporadische toegang tot opzoektabellen biedt het implementeren van een opzoektabel met memory-mapped-modus in vergelijking met de standaard SPI-modus mogelijk geen significante voordelen, behalve het vereenvoudigen van de toepassingsfirmware. Als de toepassing een omgeving met frequente interrupts is, kunnen SPI-overdrachten herhaaldelijk voor deze interrupts worden gepauzeerd. Dit kan nog ingewikkelder worden als de enige viervoudige SPI-opzoekbewerking wordt onderbroken voor een andere.

Een combinatie van frequente toegang tot de opzoektabel plus een omgeving met meer interrupts kan een memory-mapped-modus al snel efficiënter maken in vergelijking met een standaard SPI-modus. Deze vereenvoudigt de firmware, voorkomt problemen bij gelijktijdige viervoudige SPI-toegang van verschillende prioriteit en vermindert interrupt-conflicten.

Een nadeel van het implementeren van een memory-mapped opzoektabel is echter de kans op vervuiling van de data cache. De STM32L496 heeft weliswaar geen data cache, maar sommige microcontrollers die bestemd zijn voor high-performance real-time toepassingen hebben die wel. Toegang tot de opzoektabel zal naar alle waarschijnlijkheid leiden tot een gemiste cache. Dit komt omdat er voor de meeste toepassingen een zeer kleine mogelijkheid bestaat dat in dezelfde thread of subroutine tweemaal dezelfde opzoektabellocatie moet worden gebruikt. De opzoektabelgegevens worden daarom aanvankelijk niet in de cache opgeslagen en het cachen van de gegevens kan ertoe leiden dat belangrijke gegevens uit de datacache worden verwijderd. Hoewel dit alleen een probleem is in toepassingen met extreem hoge prestaties, zijn het juiste deze hoogwaardige toepassingen die op de allereerste plaats een datacache nodig hebben.

Er zijn niet veel oplossingen voor datacache-vervuiling door een opzoektabel. Als de hardware het toelaat, kan de opzoektabel worden gemarkeerd als niet geschikt voor cachen. Een andere oplossing is om de datacache voor en na het gebruik van de opzoektabel te deactiveren en vervolgens weer te activeren. Dit kan acceptabel zijn als de invloed op de prestaties van het in- en uitschakelen van de cache acceptabel is. Sommige datacaches ondersteunen architectuur-specifieke instructies voor cachecontrole die kunnen helpen om cache-vervuiling te voorkomen. Het is belangrijk om de prestaties van het systeem te benchmarken wanneer de datacache wordt geconfigureerd, om de beste methode voor een specifieke toepassing te vinden.

De lay-out van het seriële Flash-geheugen op de printplaat moet dusdanig zijn dat geen enkele trace langer dan 120 millimeter (mm) is. Om interferentie te vermijden, moet het signaalpad van de SPI-klok minstens driemaal de breedte van de printplaattraces van andere signalen verwijderd zijn. De twee bidirectionele datasignalen moeten binnen 10 mm van elkaar liggen om skew te voorkomen.

Conclusie

Een extern SPI Flash-apparaat kan een efficiënte oplossing zijn voor het implementeren van grote gegevensopzoektabellen in een IoT-eindpunt. Het is eenvoudig binnen het systeem te herprogrammeren, eenvoudig te upgraden en gebruikt slechts minimale microcontroller-resources.

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of Digi-Key Electronics or official policies of Digi-Key Electronics.

Achtergrondinformatie over deze auteur

Bill Giovino

Bill Giovino is een ingenieur in elektronica met een BSEE van de Syracuse University. Hij is een van de weinigen die met succes de overstap maakten van ontwerpingenieur naar ingenieur veldtoepassingen en vervolgens naar technologiemarketing.

Meer dan 25 jaar lang heeft Bill met veel toewijding nieuwe technologieën gepromoot ten overstaan van zowel technisch als niet-technisch publiek voor vele bedrijven, waaronder STMicroelectronics, Intel en Maxim Integrated. Toen hij bij STMicroelectronics actief was, hielp Bill bij de doorbraak van de eerste successen van het bedrijf in de sector van microcontrollers. Bij Infineon stond Bill in voor de eerste toepassingen van het microcontrollerontwerp van het bedrijf in de Amerikaanse autosector. Als marketing consultant voor zijn bedrijf CPU Technologies, hielp Bill vele bedrijven om laag presterende producten op te krikken en er een succesverhaal van te maken.

Bill was een van de eersten die het Internet of Things toepaste. Hij plaatste de eerste volledige TCP/IP-stack op een microcontroller. Bill is trouw aan het motto “Verkoop via opvoeding” en wijst op het toenemende belang van duidelijke, goed geschreven mededelingen om producten online te promoten. Hij is moderator van de populaire LinkedIn Semiconductor Sales & Marketing Group en spreekt vlot B2E.

Over deze uitgever

De Noord-Amerikaanse redacteurs van Digi-Key