Praktisk guide · nRF & AI

Så skriver du strömsnål firmware med hjälp av AI

En hands-on guide för utvecklare som bygger på Nordics nRF-plattform. Lär dig varför varje mikroamper räknas, vad du ska kräva av ett AI-verktyg, och hur du formulerar prompts som faktiskt genererar produktionsklar, energieffektiv kod.

12 min läsning 3 delar + FAQ Inkluderar prompts
01

Vad är nRF — och varför är strömförbrukning avgörande?

Nordic Semiconductors nRF-familj (nRF52, nRF53, nRF54, nRF91) driver i dag miljontals BLE-sensorer, wearables, medicinska enheter och LTE-M/NB-IoT-produkter. Det som skiljer dem från generiska MCU:er är den aggressiva optimeringen för batteridrift — men möjligheten realiseras bara om firmware respekterar strömbudgeten.

Batteridriften styr allt

En CR2032 på 230 mAh ska räcka i 2–5 år. Det ger ett genomsnitt på bara 5–13 µA. En vanlig misstag — en obortstängd UART eller felkonfigurerad regulator — kan dubbla förbrukningen och halvera livslängden över en natt.

BLE är en balansakt

Varje advertising-interval, connection parameter och radio-packet-längd påverkar strömbudgeten direkt. Att gå från 100 ms till 1 000 ms advertising kan sänka snittförbrukningen med en storleksordning — utan att försämra UX märkbart.

IoT kräver sömn — mycket sömn

En typisk sensor är aktiv < 0,1 % av tiden. Resten tillbringar den i System ON Idle, System OFF eller Low-Power Sleep. Rätt sömn-läge är inte en optimering — det är själva arkitekturen.

AI kan bli din bästa reviewer

Rätt instruerat kan ett LLM upptäcka slarviga GPIO-pinnar som lämnas floating, oavslutade I²C-transaktioner, eller en TIMER som aldrig stoppas. Men bara om verktyget faktiskt förstår nRF-stacken på djupet.

~0,4 µASystem OFF, RAM retention
~1,5 µASystem ON, RTC aktiv
~4,6 mARadio TX @ 0 dBm
10 000×Skillnad mellan lägen
02

Vad ska du leta efter i ett AI-verktyg för nRF-firmware?

Generiska kod-LLM:er kan skriva hyggligt C — men firmware för nRF är en annan disciplin. Här är kriterierna som skiljer ett användbart verktyg från ett som bara hallucinerar register-adresser.

03

Konkreta prompts för strömsnål nRF-kod

Här är tre fungerande prompt-mallar vi använder dagligen. Var specifik med chip, SDK-version och strömbudget — ju mer kontext du ger, desto mindre hallucinerar modellen.

Prompt 01 · System OFF

Djup sömn med wake-on-GPIO

När enheten ska sova i timmar eller dagar och bara vakna på en knapptryckning är System OFF rätt verktyg. Men var tydlig med RAM retention och wake-source.

prompt-system-off.md
// Target: nRF52840, NCS v2.6, Zephyr Du är expert på nRF Connect SDK. Skriv en funktion enter_deep_sleep() som försätter nRF52840 i System OFF-läge med följande krav: • RAM retention PÅ för section .noinit • Wake-up via GPIO P0.11 (aktiv låg, intern pull-up) • All peripheral clock-domain avstängd innan sleep • NFCT-pinnar frigjorda som GPIO via UICR om inte redan gjort • Verifiera att inga pending BLE-events finns kvar Använd pm_state_force() med PM_STATE_SOFT_OFF. Inkludera Kconfig-flaggorna som måste vara satta samt en kort kommentar om förväntad ström (målvärde: < 1 µA). Returnera: devicetree-overlay + C-funktion + prj.conf-rader.
Prompt 02 · Power Management API

Suspenda drivers runtime

Perfekt när du har en SPI-sensor som bara används var 30:e sekund. Låt AI konfigurera PM_DEVICE_RUNTIME och suspend/resume-cyklerna.

prompt-pm-runtime.md
// Target: nRF5340, NCS v2.6, SPI sensor på spi2 Generera en modul sensor_task.c som: 1. Läser en BME280 via SPI var 30:e sekund 2. Använder CONFIG_PM_DEVICE_RUNTIME 3. Kallar pm_device_runtime_get() precis innan läsning och pm_device_runtime_put() direkt efter 4. Mellan läsningar: sover via k_sleep() så att idle-thread når PM_STATE_SUSPEND_TO_IDLE Lägg till k_work_delayable för schemaläggning, INTE en while(1)-loop. Inkludera prj.conf-raderna som krävs (PM_DEVICE, PM_DEVICE_RUNTIME, PM_DEVICE_POWER_DOMAIN om applicerbart). Kommentera var i koden den faktiska strömminskningen uppstår.
Prompt 03 · BLE advertising

Lågenergi-advertising med RPA

För en battery-powered beacon vill du ha lång interval, lågt TX-power och korrekt privacy. Be AI motivera varje val.

prompt-ble-adv.md
// Target: nRF52832, NCS v2.6, CR2032-powered Skriv BLE-advertising-kod optimerad för 2+ års batterilivslängd på en CR2032 (230 mAh). Krav: • Advertising interval: 1 000 ms (motivera valet) • TX power: -8 dBm (eller argumentera för annat) • Använd Resolvable Private Address (RPA) • Advertising payload max 20 byte (inkl flags) • Ingen scan response (sparar radio-tid) Använd bt_le_adv_start() med BT_LE_ADV_PARAM och sätt BT_LE_ADV_OPT_USE_IDENTITY till false. Beräkna och kommentera förväntad snittström baserat på Nordics Online Power Profiler-modell. Returnera: C-kod + prj.conf + en kort tabell över strömbudget per komponent (adv, idle, RTC).

Vanliga frågor

Fem saker utvecklare ofta frågar oss när de börjar använda AI för nRF-utveckling.

Kan AI ersätta Nordics Online Power Profiler?

Nej — och det ska den inte heller. OPP ger dig faktiska mätvärden från Nordics labb. AI är ett komplement som hjälper dig skriva kod som utnyttjar de lägen OPP beskriver. Använd AI för att generera koden, och OPP eller en riktig PPK2 för att verifiera att verkligheten matchar förväntningarna.

Hur vet jag att AI:n inte hallucinerar register-adresser?

Två skyddsnät: använd ett verktyg som kan referera till Nordics officiella product specifications i sin kontext, och kompilera alltid innan du kör. En felaktig register-adress fångas oftast redan av kompilatorn eftersom MDK-headerfilerna är strikt typade. Vi rekommenderar också att be AI inkludera en kommentar med sidreferens till datasheet — stämmer inte referensen så stämmer troligen inte koden heller.

Ska jag använda nrfx HAL eller Zephyr-driver?

Tumregel: om projektet är i NCS/Zephyr, börja alltid med Zephyr-driver (device_get_binding, device-tree, PM-integration). Fall tillbaka till nrfx HAL bara när du behöver en nRF-specifik funktion som Zephyr-abstraktionen inte exponerar — t.ex. PPI/DPPI-kedjor eller TIMER/RTC capture-compare med exakt timing. Blanda inte de två på samma peripheral.

Varför föreslår AI ibland kod som inte funkar på min nRF54?

nRF54-serien introducerar en ny arkitektur (GRTC istället för RTC, nya power domains, GPIO-mapping ändrad). Många LLM:er är tränade tungt på nRF52-exempel. Lösning: ange ALLTID exakt chipvariant och SDK-version i din prompt, och be verktyget flagga om något av det du frågar om har ändrats för din target. ”Verifiera mot nRF54L15 — använd GRTC, inte RTC.” är en bra avslutande rad.

Hur mycket ström kan jag realistiskt spara med AI-genererad kod?

Det beror helt på utgångsläget. I team som är nya på nRF ser vi typiskt 40–70 % reduktion efter en första optimeringsrunda — mest för att AI konsekvent föreslår System OFF, PM_DEVICE_RUNTIME och längre advertising-interval. I erfarna team är vinsten oftast 5–15 %, men värdet ligger då i tid: det som tog två dagar att researcha i Nordics DevZone tar 20 minuter med rätt prompt. Verifiera alltid med en PPK2 — en god tumregel är att inte lita på siffror du inte själv har mätt.