In het streven naar batterijloze iot-devices is het zaak zo efficiënt mogelijk om te gaan met energie. Herman Roebbers laat aan de hand van een encryptiebibliotheek zien hoe het tweaken van alleen de tooling en chipinstellingen al enorme impact kan hebben op het verbruik.
Hoe kan ik de energieconsumptie van mijn iot-systeem verminderen? Deze vraag wordt steeds actueler naarmate we steeds meer vragen van iot-devices. Het ultieme streven is dat systemen zo weinig energie nodig hebben dat ze die uit hun omgeving kunnen oogsten en geen batterijen meer nodig hebben.
Daarvoor moeten we twee kanten op werken: de opbrengsten van de oogst verhogen en het verbruik verminderen. Aan het eerste wordt druk gewerkt: nieuwe materialen en manieren om zonnecellen te maken en na te bewerken, geven steeds hogere rendementen. Ook op het gebied van rf-energieoogsten worden slagen gemaakt. De Delftse startup Nowi heeft bijvoorbeeld speciale chips gemaakt die daar heel goed in zijn. Verder wordt druk onderzoek gedaan naar nieuwe materialen om temperatuurverschillen efficiënter om te zetten in energie. Daarnaast wordt ook hard gewerkt aan steeds efficiëntere converters die geoogste energie omzetten naar benodigde spanning(en) en zorg dragen voor efficiënte energieopslag in bijvoorbeeld oplaadbare batterijen of supercondensatoren.

Ultra low power for Internet of Things
Are you looking for a broad and systematic overview of the overwhelming possibilities for ultra low power design? Sign up for Herman Roebbers' workshop.
More informationEen casestudy
Een eerder Bits&Chips-artikel gaf een overzicht van alle aspecten die belangrijk zijn om energie te besparen: van chipsubstraat, transistorkeuze, processorarchitectuur en printplaat tot aan stuurprogramma, os, codeertools- en -manieren tot aan de applicatie. Inmiddels is de tabel wat uitgebreid (zie Tabel 1).
Overzicht van powermanagementmechanismen | Niveau | Mechanisme | Categorie (Domein) |
---|---|---|---|
Power management werkt op al deze niveaus | Applicatie | Gebeurtenis gedreven architectuur | Categorie A (software) |
Gebruik Low Power modes | |||
Selecteer radio protocol | |||
… | |||
Coderen | Energiebewust coderen | ||
Batterijbewust coderen | |||
Prestatiebewust coderen | |||
Gebruik hardwareversnellers | |||
Gereedschappen | Toolchain | ||
Optimizer-instellingen | |||
Linker-configuratie | |||
Besturingssysteem | Power-api | ||
Operation performance points-api | |||
Tickless werken | |||
Stuurprogramma | Gebruik dma | ||
Gebruik hw-eventmechanismen | |||
Suspend/resume-api | |||
Dynamische voltage- en frequentieschaling | Categorie B (software en hardware) | ||
Power gating via i/o-pin | |||
Aansturen spanningsregelaar via i/o-pin | |||
Klokfrequentiebeheer | |||
Besturen component-shutdownpinnen via i/o-pin | |||
Isoleren sensoren van spanning en bus | |||
Chip | Power Gating (schakelen van voeding) | ||
Lage voeddingsspanning | |||
Aanbieden low-energy modes | |||
(Automatisch) klokschakelen | |||
Clock frequency scaling | |||
Dynamic power switching | Categorie C (hardware) | ||
Adaptive voltage scaling | |||
Static leakage management | |||
Ip-blok / chip | Power gating state retention | ||
Ip-blok / rtl | Automatic power/clock gating | ||
Transistor | Body bias | ||
Finfet | |||
Trigate fet | |||
Sub-treshold operation | |||
Substraat | Soi, fd-soi |
Het effect van verschillende mechanismen op energie kunnen we laten zien aan de hand van een recente case. EEMBC heeft net een benchmark vrijgegeven om de energie te bepalen die nodig is voor een aantal typische tls-operaties. Tls (transport layer security) is onderdeel van een https-implementatie en als zodanig essentieel voor het opzetten van een beveiligde verbinding. De benchmark is geporteerd naar een evaluatiebord dat cryptografie ondersteunt via de de Arm Mbedtls-bibliotheek.
Dat proces kunnen we mooi gebruiken om te laten zien wat elke optimalisatiestap oplevert. Daarvoor doen we telkens eerst een nulmeting. Het benchmark-raamwerk gebruikt hiervoor een energiemonitor van Stmicroelectronics en een Arduino Uno. De Arduino wordt ingezet als uart-interface richting het device under test (dut, Figuur 1).

We gebruiken verder de ontwikkelomgeving Atollic Truestudio 9.0.1 voor STM32, die een eigen versie van de GCC-compiler gebruikt. We gebruiken ook de Stm32cubemx-software die (initialisatie)code voor randapparaten kan genereren en daarmee de configuratie aanzienlijk vereenvoudigt.
Stap 1: Kijk naar de compilerinstellingen
Als we een nulmeting doen met een niet-geoptimaliseerde versie (setting –O0) op 80 MHz (hoogste snelheid) en 3,0 volt, levert dat een Securemark op van 505. Veranderen we de optimizer-setting in –O1, dan scheelt dat al meteen enorm: we gaan naar 1336! De optimizer-settings voor –Og en –O2 maken niet veel verschil, maar als we naar –O3 gaan of –Ofast, dan gaat het nog weer een stuk beter: 1490.
Optimizer setting | -O0 | -O1 | -Og | -O2 | -O3 | -Ofast |
---|---|---|---|---|---|---|
Securemark-score | 505 | 1336 | 1340 | 1337 | 1490 | 1490 |
Dit demonstreert wat je alleen al met de compilerinstellingen kunt bereiken. Welke instellingen het beste zijn, kan echter per functie verschillen. In ons geval is er bijvoorbeeld geen verschil tussen –O3 en –Ofast, maar dat is lang niet altijd zo. Het kan dus lonen om per functie of per bestand apart de instellingen te kiezen.
Stap 2: Kijk naar de pll
Microcontrollers hebben tegenwoordig heel uitgebreide instellingen voor allerlei kloksignalen op de chip. Een van die instelmogelijkheden betreft de frequentievermenigvuldiger (pll). Die kan met vermenigvuldigen en delen uit een lage frequentie allerlei andere kloksnelheden maken.
In ons geval is de frequentie van de interne oscillator 16 MHz. Om daar 80 MHz van te maken, kunnen we niet simpelweg vermenigvuldigen met vijf, helaas. We hebben de keuze uit twee instellingen: de eerste is delen door 1, vermenigvuldigen met 10 en delen door 2, de tweede is optie is delen door 2, vermenigvuldigen met 20 en weer delen door 2.
Dat levert verschillende scores op: 1462 tegen 1490. Het resultaat is in beide gevallen 80 MHz, maar methode twee is twee procent zuiniger. Hoe lager de klokfrequenties, hoe minder energie je kwijt bent, en hoe eerder je de klokfrequentie deelt, hoe beter.
Als je voldoende tijd tot je beschikking hebt, kun je de processor ook zonder pll gebruiken, want dat is eigenlijk een behoorlijke energievreter. Met de ingebouwde oscillator kunnen we een maximale frequentie van 48 MHz opwekken, wat een 4 procent hogere score oplevert. Het nadeel is dat het dan wel wat langer duurt: 80/48 = 1,66 keer langer om precies te zijn.

Stap 3: Zet overbodige klokken uit
Nu we het een en ander hebben afgetast, kunnen we een instelling kiezen en van daaruit verder optimaliseren. We beginnen redelijk conservatief: -O1 en een frequentie van 80 MHz via onze tweede pll-instelling. Onze Securemark-score komt hiermee uit op 1336.
Een eerstvolgende stap is om alle overbodige klokken uit te zetten. In ons geval kunnen de klok naar de uart en alle i/o-poorten wel uit. Dat scheelt tussen de 2,5 en 2,9 mW en levert een score op van 1448. Dit kost 1448/1336 = 1,08 keer minder energie (8 procent winst).
Stap 4: Optimaliseer de memcpy-functie
Tijdens de uitvoering van cryptografische functies wordt regelmatig gebruikgemaakt van de memcpy-functie. Kiezen voor een geoptimaliseerde versie levert in het geval van GCC vijf procent winst op. De IAR-compiler levert al een geoptimaliseerde versie mee. We kunnen onze score daarmee verhogen naar 1524. Winst: 5 procent.
Stap 5: Draai de duimschroeven aan
We kunnen nu kijken of we ook met een lage klokfrequentie toekunnen. Daarmee zouden we de kernspanning kunnen verlagen. Voor onze mcu moet deze kernspanning 1,2 V zijn voor frequenties boven 26 MHz. Voor de eenvoud nemen we 24 MHz, een standaardfrequentie in het menu van de msi-oscillator waarbij de pll uit kan blijven. Weer 4 procent winst: 1588.
We kunnen ook proberen of we de compileroptimalisaties nog veilig wat agressiever kunnen instellen. Als we naar instelling –O2 gaan, komen we uit op een score van 1691. Nog eens 6,4 procent winst.
Stap 6: Verlaag de spanningen
We hebben de klokfrequentie al voorbereid op een lagere kernspanning, nu gaan we die daadwerkelijk instellen. Het resultaat is prachtig: 2021, bijna 20 procent winst!
Ook de voedingsspanning kan eigenlijk wel wat lager. We zijn begonnen met 3,0 V, maar als we naar 2,4 V gaan, levert dat opnieuw een verbetering van 26 procent op. We kunnen nog verder gaan naar 1,8 V als dat nodig is. Dat hebben we hier niet gedaan, maar als we extrapoleren kunnen we een verdere besparing van een derde verwachten.
Conclusie
Met enkele simpele maatregelen is het energiegebruik al drastisch te verlagen. In onze casestudy is een factor vijf tot zeven makkelijk haalbaar ten opzichte van een niet-geoptimaliseerde versie.
Ik heb me hier echter beperkt tot tooling en chipinstellingen. Met aanvullende maatregelen op andere vlakken zijn nog tientallen procenten extra verbetering te halen. Een embedded systeem zonder batterijen komt daarmee daadwerkelijk binnen bereik.