Externt Flash-minne medför fördelar vid användning av uppslagstabeller i IoT-slutpunkter med hög prestanda

By Bill Giovino

Contributed By Digi-Keys nordamerikanska redaktörer

Eftersom IoT-nätverk (sakernas internet) blir allt mer komplexa utför IoT-slutpunkter allt mer komplex behandling vid gränssnittet. Detta kan kräva att du uppgradera en befintlig slutpunkt med ett system som har en mikrostyrenhet med högre klockfrekvens, mer minne och en kraftfullare processorkärna.

Detta kan även kräva sensorer och analog-till-digitalomvandlare (ADC:er) med hög precision som kan kräva periodisk kalibrering. Linjära fel kan enkelt kompenseras med en formel. Dock följer icke-linjära fel inte ett fast avvikelsemönster från sensorvärdet och kan därför inte enkelt kompenseras matematiskt. Ofta är det enklaste sättet att kompensera för icke-linjära fel i den fasta programvaran att lagra nödvändiga korrigeringsdata i minnet med en datauppslagstabell.

Den här artikeln ger en kort genomgång av sensor- och ADC-fel och diskuterar fördelarna med att använda datauppslagstabeller för att korrigera den typen av fel. Den förklarar sedan hur du implementerar en praktisk och kostnadseffektiv data Flash-uppslagstabell i ett STMicroelectronics STM32L496VG mikrostyrenhetsbaserat system med en extern ON Semiconductor LE25S161PCTXG Flash-minneskrets med seriellt perifert gränssnitt (SPI).

Sensorfel

Sensorer som känner av analoga villkor som temperatur, tryck och spänning kan ha icke-linjära fel. Under utvecklingsfasen i ett projekt är det viktigt att testa sensorerna mot en exakt referens och jämför referensvärdet med sensorns digitala utgång. Det gör det möjligt för utvecklaren att tidigt avgöra typen hos eventuella sensoravvikelser från referensvärdena och om avvikelserna är acceptabla med tanke på tillämpningskraven. Utvecklaren kan sedan avgöra om det är nödvändigt att kompensera för eventuella avvikelser och i så fall om avvikelserna ska kompenseras i maskinvara eller fast programvara.

Vissa sensorfel kan vara förutsägbara linjära fel. Att kompensera för dessa fel kan ibland vara så enkelt att det räcker att lägga till eller dra av ett konstant värde från sensorutsignalen. Ibland kan dessa fel variera över sensorskalan. Till exempel kan det från noll till en tredjedel av skalan vara nödvändigt att lägga till en konstant medan det från en tredjedel till hälften av skalan kan krävas en annan konstant.

Dessa fel är förutsägbara och enkla att korrigera. Dock kan avvikelsen från ett korrekt värde ändras med tiden. Dessutom kan nya sensorfel utvecklas senare av orsaker som exponering för extrema temperaturer, hög luftfuktighet eller åldrande sensorer. Om felen behöver korrigeras beror alltid på tillämpningen. Det kan vara nödvändigt att testa systemet vid extrema temperaturer, tryck och fuktnivåer för att avgöra sensorbeteendet. Dess miljötester krävs för vissa tillämpningar som fordonsindustri, militär och vissa industrisystem. Dock bryter många nya IoT-slutpunkter helt ny mark för sensorerna så sensorprovning kan vara ett nytt krav.

Vanlig analog mikrostyrenhetskringutrustning som ADC:er kan även kräva periodisk systemkalibrering som alla andra analoga sensorer. ADC-fel är inte alltid förutsägbara och även om det inledande felet kan korrigeras med en algoritm kan det ändras med tiden, potentiellt på ett sätt som inte enkelt kan korrigeras med en algoritm. Detta kan leda till ett system som inte längre kan arbeta med nödvändig precision och därmed innebär höga utbyteskostnader.

Fördelar med att använda en datauppslagstabell för korrigering av analoga sensorfel

En datauppslagstabell kan vara en praktisk och effektiv metod för att snabbt utföra några vanliga beräkningar som kan vara komplicerade som trigonometriska funktioner eller enkla som bitomvandling av byte eller omvandling av en byte till Graykod. Att använda en uppslagstabell på 256 byte för bitomvandling är betydligt snabbare än att utföra bitomvandling i fast programvara. Det är säkert att lagra den här uppslagstabellen i program- eller data Flash-minne eftersom den tar liten plats och aldrig behöver ändras.

En datauppslagstabell är även en mycket praktisk metod för att lagra sensorkalibreringsdata. Analog mikrostyrenhetskringutrustning som en inbyggd ADC kan kräva periodisk kalibrering med samma metod som för en analog sensor. ADC:erna i de flesta mikrostyrenheter kan vara exakta till ±2 eller ±3 minst signifikanta bitarna (LSB). Trots att de kan vara tillräckliga för de flesta tillämpningar för system som kräver hög precision är det klokt att då och då kalibrera ADC:erna.

En partiell kalibreringsuppslagstabell för korrigering av 24-bitarsdata kan se ut som i tabell 1.

Sensorvärde   Korrigerat sensorvärde
:   :
01 AB 24h   00 01 AB 21h
01 AB 25h   00 01 AB 22h
01 AB 26h   00 01 AB 24h
:   :

Tabell 1: Ett utdrag av ett exempel på en datauppslagstabell för 24-bitars kalibreringsdata. Råinmatningsvärdet är det källvärde som ska felkorrigeras. Det här råvärdet används sedan som en 24-bitarsadress och används för att söka efter ett motsvarande 32-bitars korrigerat värde där den mest signifikanta byten alltid är 00h. (Tabelldatakälla: Digi-Key Electronics)

I det här exemplet är råinmatningsvärdet är det källvärde som ska felkorrigeras. Det här råvärdet används sedan som en 24-bitarsadress och används för att söka efter ett motsvarande 32-bitars korrigerat värde där den mest signifikanta byten alltid är 00h. En förskjutning kan läggas till råinmatningsvärdet om uppslagstabellen inte börjar vid nolladressen.

Innan du besluter var uppslagstabellen ska lagra är det viktigt att avgöra hur stor tabellen behöver vara och om den behöver skrivas om. Båda sakerna är viktiga. En uppslagstabell som passar i mikrostyrenhetens tillgängliga on-chip Flash är klokt om den behöver skrivas om. Men om sensorn kräver periodisk omkalibrering innebär det att det interna Flash-minnet behöver skrivas om, vilket kräver att hela Flash-sektorn med tabellen måste raderas och omprogrammeras.

Om Flash-sektorn delar utrymme med programminnet kan det krävas att koden återkompileras. Även om uppslagstabellen fins i en egen sektor kan minneskraven förändras eller expanderas senare, vilket leder till att en del av uppslagtabellens sektorutrymme utnyttjas för ytterligare kod. Detta gör sensorkalibrering på fältet svårare och kan hindra oberoende självkalibrering av IoT-slutpunkten genom att kräva att den återkompilerade koden hämtas via nätverket. Problemet kompliceras ytterligare om flera sensorer är inblandade.

Stora uppslagstabeller som 16 777 216-inmatningstabellen för kalibrering av 24-bitars digitala data är opraktiska eller omöjliga för on-chip Flash-programminne. Uppslagstabellens storlek kan halveras om bara varannan post lagras och resultaten för de saknade posterna interpoleras baserat på befintliga tabelldata. Detta leder till en liten prestandaminskning och en möjlig precisionsförlust på ±1 LSB. Men även den här uppslagstabellen med 8 388 608 poster kan vara opraktisk att lagra i internt Flash.

Den bästa lösningen för dessa stora datauppslagstabeller i ett mikrostyrenhetsbaserat system är externt Flash-minne. Detta ger ett enkelt sätt att lägga till flera megabyte av uppslagstabeller utan att offra internt Flash-programminne. Det gör det även möjligt för systemet att enkelt skriva om uppslagstabellen utan att störa mikrostyrenhetens interna Flash-minne.

För högpresterande system har tillägg av externt parallellt Flash-minne varit gemensamt för både program- och dataminnesexpansion. Det kräver dock en mikrostyrenhet med extern databuss. De extra adress- och databussarna samt de nödvändiga styrsignalerna kan ta upp 36 eller fler stift i mikrostyrenheten. Det här kravet begränsar urvalet av mikrostyrenheter som kan användas för tillämpningen. Dessa externa bussar tar även upp extra kretskortsplats och kan öka de elektromagnetiska störningarna (EMI) i systemet.

Den bästa lösningen för de flesta system är att använda ett externt seriedata-Flash-minne med ett seriellt perifert gränssnitt (SPI) för dataöverföring. Detta kan kräva så lite som fyra stift på mikrostyrenheten.

Ett bra exempel på en sådan Flash-minnesenhet är LE25S161PCTXG från ON Semiconductor. Det här är en 16 megabit (Mbit) seriell Flash-minnesenhet som stöder en SPI-klocka på 70 megahertz (MHz). Dock har den även stöd för dubbelt SPI-läge, vilket innebär att den kan överföra data med en topphastighet på 140 Mbit/sek. Interna statusregister används för att konfigurera enhetens läs-, skriv- och lågeffektlägen.

LE25S161PCTXG har de vanliga SPI-signalerna för klocka, data och chipval (figur 1). Den har dessutom två ytterligare stift. WP\ är en signal som skyddar aktivt mot skrivning till enhetens statusregister. Detta kan användas för att hindra lågprioriterade fasta programvaruaktiviteter från att utföra obehörig omskrivning av enheten. HOLD\ pausar en pågående dataöverföring. Det är användbart om mikrostyrenheten måste utföra en avbrottssignal medan en dataöverföring pågår. Dataöverföringen kan pausas till avbrottsåtgärden har utförts och sedan återupptas där den avbröts.

Diagram över ON Semiconductors LE25S161PCTXG seriellt Flash-minne

Figur 1: ON Semiconductors LE25S161PCTXG seriella Flash-minne finns i en 8-pin UDFN-enhet med ultralitet 3 x 4 millimeter (mm) avtryck och har de vanliga SPI-signalerna för klocka, data och chipval. (Bildkälla: ON Semiconductor)

Det enklaste sättet att läsa av en uppslagstabell med två kolumner som lagrats i den här enheten är att ta sensorvärdet, lägga till en minnesförskjutning och därefter läsa av minnesinnehållet på den aktuella adressplatsen. Innehållet i minnet på den adressen representerar det korrigerade sensorvärdet.

En högpresterande IoT-slutpunkt kräver hög klockfrekvens, en högpresterande processor och ett flexibelt SPI. För dessa tillämpningar tillhandahåller STMicroelectronics den högpresterande STM32L4 mikrostyrenhetsfamiljen. Till exempel ingår mikrostyrenheten STM32L496VG i STM32L4-produktfamiljen som körs på frekvensen 80 MHz och har en Arm® Cortex®-M4-kärna med flyttalsenhet (FPU). Den har 8 Mbit Flash och 320 kilobyte SRAM. Det stödjer driftspänningar mellan 1,71 och 3,6 volt som överlappar ON Semiconductors LE25S161PCTXG med driftspänningar mellan 1,65 och 1,95 volt.

STM32L496VG har ett fullt utbud av kringutrustning för IoT-slutpunkter med hög prestanda inklusive en realtidsklocka (RTC) med kalender, tre ADC:er på 5 megasampel per sekund (MSPS), en tvåkanalig digital-till-analogomvandlare (DAC), två CAN-gränssnitt och fyra I2C-gränssnitt (figur 2). Den har även tre standard-SPI-gränssnitt och ett fyrdubbelt SPI-gränssnitt.

Diagram över STMicroelectronics STM32L496 mikrostyrenhet baserat på 80 MHz Arm Cortex-M4 (klicka för att förstora)

Figur 2: Mikrostyrenheten STM32L496 baseras på en 80 MHz Arm Cortex-M4 med FPU och har en full uppsättning av kringutrustning, inklusive ett 40 MHz fyrdubbelt SPI-gränssnitt. (Bildkälla: STMicroelectronics)

Utveckling för STM32L496VG stöds av STM32L496G-DISCO-kortet (figur 3). Det är ett fullt utrustat utvecklingskort för en IoT-slutpunkt och inkluderar stereo MEMS-stereomikrofoner (mikroelektromekaniska system), en 8-bitarskamerakontakt, åtta LED-lampor, en joystick md fyra riktningar samt en färg-LCD med 240 x 240 bildpunkter. ADC-ingångarna, de fyrdubbla SPI-stiften och de flesta I/O-enheterna är tillgängliga på anslutningsstiften.

Bild på STMicroelectronics STM32L496G-DISCO-kortet

Figur 3: STM32L496G-DISCO-kortet är en fullständig utvärderingsmiljö för maskinvaru- och fast programvaruutveckling för ST32L496VG. (Bildkälla: STMicroelectronics)

Det fyrdubbla SPI på STM32L496VG stödjer en maximal SPI-klockfrekvens på 40 MHz och har stöd för standard och minnesmappade SPI-lägen. Den fyrdubbla SPI har stöd för SPI-läge och tillåter dataöverföringar med maximalt 80 Mbit/sek.

STMicroelectronics fyrdubbla SPI ger ett snabbt gränssnitt till Flash-minnesenheter med seriella data. I standard-SPI-läge utförs alla åtgärder med SPI-registren. Data överförs genom att läsa och skriva SPI-dataregistret. Ett avbrott genereras när data tas emot. Det här är samma driftläge som de tre standard-SPI:erna på STM32L496VG. Standard-SPI-läge ger stöd för enkel, dubbel och fyrdubbel dataöverföring. ON Semiconductors LE25S161 stöder enkelt och dubbelt SPI-läge och kan enkelt sammankopplas med STM32L496VG i dubbelt SPI-läge (figur 4).

Diagram över STMicroelectronics STM32L496VG:s fyrdubbla SPI-serieport

Figur 4: STMicroelectronics STM32L496VG fyrdubbla SPI-serieport kan kopplas till ON Semiconductors LE25S161 i dubbelt SPI-läge, vilket möjliggör dataöverföring i två riktningar längs SIO0 och SIO1 med 40 MHz SCLK och 80 Mbit/sek. (Bildkälla: Digi-Key Electronics)

Det är enkelt att implementera en datauppslagstabell i den här situationen på grund av valet av komponenter från ON Semiconductor och STMicroelectronics, vilket ger smidig implementering. Den fyrdubbla SPI har även en FIFO som är användbar för bulkdataöverföringar. För en uppslagstabell där det endast krävs åtkomst till en minnesplats åt gången rekommenderas att inaktivera FIFO eftersom det inte behövs och till och med kan medföra en onödig fördröjning.

Fyrdubbel SPI med minnesmappat läge

Den fyrdubbla SPI har även stöd för ett minnesmappat läge. Den mappar den externa seriella Flash-enheten till antingen mikrostyrenhetens program- eller dataminnesutrymme. På så vis får mikrostyrenhetens fasta programvara tillgång till det externa SPI Flash-minnet som om det var en del av mikrostyrenhetens eget minne, vilket resulterar i en drift av det fyrdubbla SPI som är transparent för den fasta programvaran.

Om åtkomst till uppslagstabeller sker sällan kan implementering av en uppslagstabell med minnesmappat läge jämfört med standard-SPI-läge inte medföra några större fördelar än att applikationens fasta programvara förenklas. Om tillämpningen är en miljö med täta avbrott kan SPI-överföringar ofta pausas för att utföra dem. Detta kan bli ännu mer komplicerat om en fyrdubbel SPI-uppslagsaktivitet avbryts för en annan.

En kombination av tät åtkomst till uppslagstabellen och en miljö med täta avbrott kan snabbt göra minnesmappat läge effektivare än standard-SPI-läget. Det förenklar den fasta programvaran, hindrar problem på grund av samtidiga åtkomsttillfällen till det fyrdubbla SPI med olika prioritet och minskar avbrottskonflikterna.

En nackdel med att implementera en minnesmappad uppslagstabell är risken för att smutsa ned datacachen. STM32L496 saknar datacache, men vissa mikrostyrenheter som riktar sig mot högpresterande realtidstillämpningar har det. Åtkomst till uppslagstabellen leder sannolikt till en cachemiss. Detta beror på att det för de flesta tillämpningar är mycket låg sannolikhet att behöva använda samma uppslagstabellplats två gånger i samma tråd eller subrutin. Inledningsvis cachelagras därför inte uppslagstabelldata och cachelagring av data kan leda till att viktiga data avlägsnas från datacachen. Även om det bara är ett problem i extremt högpresterande tillämpningar är det dessa högpresterande tillämpningar som behöver en datacache från första början.

Lösningarna för förorenad datacache från en uppslagstabell är begränsade. Om maskinvaran tillåter det kan uppslagstabellområdet markeras som icke-cachebart. En annan lösning är att inaktivera och därefter aktivera datacachen före och efter åtkomst till uppslagstabellen. Det kan vara ett alternativ om prestandaavbrottet som aktivering och inaktivering av cachelagringen innebär är godtagbar. Vissa datacacher har stöd för arkitekturspecifika cachestyrningsinstruktioner som kan ge stöd för att hindra cacheförorening. Det är viktigt att benchmark-testa systemets prestanda när datacachen konfigureras för att hitta den bästa metoden för en specifik tillämpning.

Det seriella Flash-minnet ska placeras på kretskortet så att inget spår är längre än 120 millimeter (mm). SPI-klocksignalens bana ska vara minst tre gånger bredden på PC-kortets spår från andra signaler för att undvika störningar. De två dubbelriktade datasignalerna ska vara inom 10 mm från varandra för att undvika förskjutning.

Slutsats

En extern SPI Flash-enhet kan vara en effektiv lösning för att implementera datauppslagstabeller i en IoT-slutpunkt. Det är enkelt att omprogrammera i systemet, enkelt att uppgradera och förbrukar minimala mikrostyrenhetsresurser.

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.

Om skribenten

Bill Giovino

Bill Giovino arbetar som elektronikingenjör och har kandidatexamen i elektroteknik från Syracuse University. Han är en av få personer som med framgång har bytt karriär från konstruktör via fältapplikationsingenjör till att arbeta med marknadsföring av teknik.

I mer än 25 år har Bill arbetat med att marknadsföra ny teknik för en publik både med och utan tekniska kunskaper för många företag (bland dem kan nämnas STMicroelectronics, Intel och Maxim Integrated). På STMicroelectronics var Bill en av de drivande personerna i att leda företagets framgångar på den nya branschen för mikrostyrenheter. På Infineon drev Bill konstruktionen av prisvinnande mikrostyrenheter för bilindustrin i USA. I sin roll som marknadsföringskonsult för CPU Technologies har Bill hjälpt många företag att omvandla mindre framgångsrika produkter till framgångshistorier.

Bill var tidig med att använda sakernas internet, bland annat genom att placera den första kompletta TCP/IP-stacken på en mikrostyrenhet. Bill tror mycket på att försäljning ska bedrivas genom utbildning och att det är allt viktigare med tydlig, välskriven kommunikation för att marknadsföra produkter online. Han är moderator för den populära gruppen Linkedin Semiconductor Sales & Marketing och kan allt om B2E.

Om utgivaren

Digi-Keys nordamerikanska redaktörer