Pärjätäkseen IoT-markinoilla laitevalmistajien täytyy oppia innovoimaan nopeammin. IoT-sovelluksien kirjo on loppumaton ja menestyvät yritykset antavat kehittäjilleen mahdollisuuden jatkuvasti tunnistaa ja toteuttaa uusia ja yhä hyödyllisempiä tapoja valjastaa käyttöön antureita, monitoroida erityyppistä dataa ja ohjata laitteiden ekosysteemejä.
Artikkelin ovat kirjoittaneet Cypress Semiconductorin Anbarasu Samiappan ja Jaya Kathuria. |
IoT-sovellukset kattavat hyvin monenlaisia laitetyyppejä puettavista laitteista autoihin, koteihin, teollisuudenaloihin ja jopa kaupunkeihin. Nämä sovellukset vaativat jatkuvasti enemmän energiatehokkuutta, innovaatioita ja tietoturvaa. Sovellukset ovat tärkeitä ja ne täytyy kietoa intuitiiviseen ohjelmistoon, joka on suunniteltu edistämään laitteiden helppokäyttöisyyttä.
IoT-pohjaisten tuotteiden keskiössä ovat mikro-ohjaimet, ja oikean mikro-ohjaimen valinta on avainasemassa, kun yritetään vastata asiakkaan vaatimuksiin.
Kaksi eri IoT-markkinaa
IoT-markkina voidaan laajasti luokitella kahteen kategoriaan: kuluttaja-IoT ja liiketoiminta-IoT. Kuluttaja-IoT sisältää kodin, elintava, terveyden ja liikkuvuuden. Laitteet ovat usein henkilöiden verkkoon liitettyjä tuotteita, jota parantavat heidän tuottavuuttaan, turvallisuuttaan ja elintapaansa.
Kuva 1. Kuluttaja-IoT:n markkinoiden jakautuminen.
Liiketoiminta-IoT on laaja alue, joka kattaa vähittäiskaupan, terveyden, energian, liikkuvuuden, kaupungit, tuotannon ja julkiset palvelut. Tämä alue muuttaa organisaatiot ja yhteisöt niin, että ne voivat mahdollistaa uuden taloudellisen kasvun yhdistämällä datan, ihmiset ja koneet parantaakseen taloudellista tuottavuutta, tehokkuutta ja päivittäisi toimintoja.
Kuva 2. Liiketoiminta-IoT:n markkinoiden jakautuminen.
Mikro-ohjaimen valmistamiseen käytetty prosessiteknologia on kriittinen tekijä sen suorituskyvyn, vähävirtaisten ominaisuuksien ja kustannusten kannalta. IoT-sovellukset vaativat hyvin energiatehokasta aktiivitehonkulutusta sekä alhaista low power -tilan tehonkulutusta järjestelmän keskimääräisen energiatehokkuuden kannalta. Jatkuvat edistysaskeleet valmistustekniikassa ovat johtaneet sirukokojen kutistumiseen. Tämä vähentää piirin kokonaiskustannuksia, sillä se samalla piikiekolla voidaan valmistaa enemmän ohjainpiirejä. Piisirun kutistuminen vaikuttaa myös suoraan suorituskykyyn ja tehonkulutukseen. Sirun pienentäminen pienentää jokaisen transistorin päälle ja pois kytkemiseen vaadittavaa virtaa samalla, kun kellotaajuus pidetään ennallaan. Tämän takia pienempi siru kuluttaa vähemmän tehoa suuremmalla kellotaajuudella eli suorituskyky kasvaa.
Esimerkiksi 40 nanometrin prosessitekniikka, jota käytetään PSoC 6 BLE -sarjan mikro-ohjainten valmistamiseen, tuottaa eri IOT-sovelluksiin suorituskykyisiä ja energiatehokkaita toteutuksia. Deep sleep -tila tarvitsee vain muutaman mikroampeerin. Muut tehomoodit, kuten Active, Sleep, Low Power Active ja Low Power Sleep antavat suunnittelijoille joustavuuden optimoida järjestelmän tehonkulutus samalla, kun säilytetään korkea suorituskyky sitä tarvittaessa.
Kuva 3. IoT-sovelluksen vähävirtaisen mikro-ohjaimen lohkokaavio.
Yksi suurimpia haasteita IoT-laitteen suunnittelussa on se, että ne saattavat olla tehosyöppöjä. Useimmat IoT-laitteet ovat aina päällä ja pienikokoisia, joten niiden sisältämän pariston koko on rajallinen. Mikro-ohjainvalmistajat miettivät monia eri tekijöitä optimoidessaan mikro-ohjainta IOT-sovellukseen, kuten esimerkiksi
- Prosessitekniikan parantaminen
- Pitkälle joustavien tehotilojen tai -moodien kehittäminen
- Teho-optimoitujen laitepohjaisten IP-lohkojen mahdollistaminen
- Suurempi integraatio komponenttimäärän vähentämiseksi
- Flash-liitännän nopeuden optimointi
- Välimuistin mahdollistaminen
- Laajemman toimintajännitealueen tukeminen
Ikävä kyllä, vaikka prosessitekniikan kutistaminen parantaa suorituskykyä, tehonkulutusta ja integraatioastetta, se tuo mukanaan haasteen hallita vuotovirtoja, erityisesti alhaisen tehon tiloissa. Vuotovirtojen hallitsemiseksi ohjainvalmistajat käyttävät erikoistransistoritekniikoita, kuten monihilapiirejä, suurijännitetransistoreja / logiikkaa / piirejä, jotka on suunniteltu erityisesti muistisoluihin, sekä muita ratkaisuja.
Optimoitua tehonkulutusta
Joustavien tehotilojen saatavuus antaa suunnittelijalle mahdollisuuden ajoittaa yksittäisiä järjestelmän tapahtumia (event) siten, että keskimääräinen tehonkulutus voidaan optimoida. Avaintekniikka on tarjota useita oheislaitteita, jotka voivat toimia alhaisen virrankulutuksen (low power) tilassa ja jotka voidaan herättää suorittamaan omaa toimintoa ilman, että tarvitsee herättää CPU-prosessoria. Joissakin ohjaimissa on myös erityinen alhaisen tehonkulutuksen aktiivitila, jossa oheislaitteet voivat olla rajoitetusti toiminnassa (esimerkiksi alhaisemmalla kellotaajuudella tai jännitteellä), millä voidaan edelleen optimoida sovelluksen tehonkulutusta. Jopa tiettyjä oheislaitteita voidaan suunnitella optimoimaan tehonkulutusta: esimerkiksi BLE-radio voidaan suunnitella tukemaan vähävirtaista langatonta yhteyttä.
Yksi tehonkulutukseen merkittävästi vaikuttava elementti on haihtumaton muisti. Tämä koskee erityisesti ohjaimia, joissa firmware-ohjelmisto tallennetaan flash-muistiin. Flash-pääsyn eli väylän optimointi johtaa merkittävään tehonkulutuksen vähentämiseen. Tavoite on minimoida flash- lukujen määrä. Tässä käytetään pääasiassa kahta tekniikkaa. Yksi menetelmä on tarjota käyttöön välimuisti. Tällä tavalla varsinaista koodimuistia (eli flashia) ei tarvitse lukea jokaisen kellojakson aikana. Toinen tapa on lisätä haetun (fetch) datan määrää yhden kellojakson aikana. Leveämmän väylän käyttäminen vähentää flash-luvun tarvetta.
IoT-pohjaisissa mikro-ohjaimissa voi myös olla joustava tehojärjestelmä. Tukemalla laajaa syöttöjännitealuetta mikro-ohjaimelle voidaan syöttää virtaa useasta eri lähteestä. Esimerkiksi yksinkertainen IoT-sovellus kuten aktiivisuusranneke voi saada virtansa nappiparistosta, kun monimutkaisemmat IoT-sovellukset kuten älykello voidaan virtaistaa PCIM- eli tehonhallintapiireillä (Power Management Integrated Circuits). Joissakin mikro-ohjaimissa on sisäinen buck-muunnin reguloimassa tehoa tehokkaasti.
Kun mietitään mikro-ohjaimen tehomoodeja, on tärkeää katsoa perusarkkitehtuuria syvemmälle. Esimerkiksi standardi Arm-prosessoriydin tukee Active-, Sleep- ja Deep Sleep -tiloja. Lisätehotilat mikro-ohjaintoimittaja yleensä lisää itse. Esimerkiksi Cypressin PSoC 6 BLE -ohjain toimii kuudessa eri tehotilassa lisäten joukkoon Low Power Active-, Low Power Sleep- ja Hibernate-tilat.
Kuva 4. Esimerkki tehotilojen välillä siirtymisestä PSoC 6 BLE -mikro-ohjaimella.
Moniprosessoriohjaimet – rinnakkaisia sovelluksia nopeammin
IoT-järjestelmien monimutkaisuus kasvaa koko ajan samalla kun niiden fyysinen koko pienenee. Ohjainvalmistajat pyrkivät parantamaan järjestelmän suorituskykyä samalla kun niiden koko ja tehonkulutus yritetään saada mahdollisimman pieneksi. Moniydinohjaimet ja järjestelmäpiirit tuovat lisää suorituskykyä integroimalla enemmän toimintoja yhdelle sirulla ja minimoimalla käytetyn piialan. Moniydinprosessori on mikro-ohjain tai järjestelmäpiiri, joka koostuu kahdesta tai useammasta itsenäisestä ytimestä (tai CPU:sta). Ytimet on tyypillisesti integroitu yhdelle sirulle, vaikka ne voidaan toteuttaa useina piireinä yhdessä kotelossa.
Moniydinohjaimet voivat tuoda suuren suorituskyvyn pienessä tilassa. Tyypillisessä IoT-suunnittelussa kuten puettavassa laitteessa tarvitaan enemmän kuin yksi mikro-ohjain: BLE-ohjain langattomiin yhteyksiin, kosketusohjain käyttöliittymän toteutukseen ja isäntäohjain sovelluksen ajamiseen. Näiden kolmen ohjaimen toiminnallisuus voidaan tuottaa yhdellä pitkälle integroidulla moniydinohjaimella.
Moniydinohjaimilla on monia muitakin etuja. Esimerkiksi niille voidaan integroida riittävästi resursseja, jotta CPU:t voivat käsitellä intensiivisiä tehtäviä rinnakkain ja näin hyötyä moniajon tehokkuudesta. Nämä auttavat suunnittelijaa osoittamaan järjestelmätapahtumat tehokkaasti tietyille ytimille, jotta tehonkulutus- ja suorituskykytavoitteet saavutettaisiin. Esimerkiksi kaksiytimisissä puettavissa suunnitteluissa ajoittaiset toiminnot kuten langaton lähettäminen ja kosketuksen aistiminen, jotka tarvitsevat vähemmän CPU:n väliintuloa, voidaan osoittaa yhdelle ytimelle. Toiset toiminnot kuten anturidatan fuusio, joka vaatii CPU:n tehokasta käyttöä, voidaan osoittaa toiselle ytimelle. Tällainen partitiointi lyhentää viivettä, kun järjestelmässä ajetaan useampaa kuin yhtä sovellusta. Integrointi myös parantaa tehokkuutta yhdistämällä protokollapinoja ja ohjelmamuistit.
Kuva 5. Esimerkiksi moniydinohjaimesta IoT-sovellukseen.
Kuva 6 esittää moniydinohjainta eli Cypressin PSoC 6 BLE -piiriä. Tällä kaksiytimisellä piirillä on kaksi 32-bittistä Arm Cortex -prosessoria, Cortex-M4 ja Cortex-M0+. Molemmilla on 32-bittinen dataväylä, 32-bittiset rekisterit ja 32-bittinen muistiliitäntä. Cortex-M4 on pääprosessori, joka on suunniteltu lyhyille keskeytysten vasteilla, suureen koodintiheyteen ja tehokkaaseen 32-bittiseen laskentaan tiukassa kustannus- ja tehonkulutusbudjetissa.
Cortex-M0+ palvelee toisen CPU:na, joka huolehtii tietoturvasta ja suojaustoiminnoista. Cortex-prosessoreilla on toteutettu Thumb-käskykannan alijoukon ja niissä on kaksi toimintamoodia: Thread Mode eli säiemoodi sekä Handler Mode eli käsittelymoodi. Prosessorit menevät säiemoodiin tullessaan reset-tilasta suorittamaan sovellusohjelmaa. Poikkeuksien käsittelyyn ne siirtyvät Handler-moodiin. Kun poikkeusten prosessointi on valmis, CPU:t palaavat säietilaan.
Kuva 6. Sulautetun moniydinohjaimen esimerkki (PSoC 6 BLE).
Prosessorin sisäinen viestintä
Moniydinohjaimissa vaaditaan prosessorin sisäistä viestintää (IPC, inter processor communication) koordinoimaan operaatioita ydinten kesken. IPC toimii tietoliikenteen hallitsijana käsittelemässä viestien vaihtoa prosessorien välillä. Modernit CPU-arkkitehtuurit kuten Arm Cortex tukevat moniydinviestintää sekä laitteistossa että firmware-ohjelmistossa. Yksi tällainen esimerkki on SEV-käsky (send event), joka osoittaa prosessin kaikille ytimille. IPC:n toteuttamiseksi ohjainvalmistajat ovat omaksuneet erilaisia menetelmiä:
Keskeytyspohjainen: Tässä lähestymistavassa yksi ydin lähettää keskeytyksen toiselle ytimelle ilmaistakseen sovellustapahtuman. Tyypillisesti keskeytysrutiini on hyvin kompakti eikä vaadi paljon koodimuistia. Kuten kaikissa keskeytysmekanismeissa, jokaisella keskeytyksellä on oma ISR-rutiini (Interrupt service Routine), jonka kautta spesifejä tehtäviä voidaan ajaa halutulla ytimellä. Varsinaiselle datansiirrolle on jaettu muisti, johon eri ytimet pääsevät käsiksi. Datan jakamisen lisäksi muisti tarjoaa mekanismin viestin pyytämiseen ja niiden kuittaamiseen.
Postilaatikko on jokaiselle CPU:lle dedikoitu muistitila RAM-muistissa viestien lähettämiseen ja vastaanottamiseen muilta prosessoreilta. Jokainen ydin ylläpitää omaa RAM-muistiaan (eli laatikkoa) ja lähettää viestejä toisten ytimien postilaatikoihin.
Viestijono käyttää kahta jaetun muistin aluetta tallentamaan viestit, jotka jokainen ydin lähettää toiselle. Ensimmäinen on käskypuskuriksi kutsuttu dedikoitu muisti, joka tallentaa isännältä (master) orjalle (slave) lähetetyt viestit. Toista muistia kutsutaan viestipuskuriksi ja se antaa orjan vastata isännälle.
Kuva 7. Erilaisia IPC-viestinnän tapoja.
Semaforit ovat mekanismi, jotka estävät erilaisia lähteitä pääsemästä jaettuun resurssiin samanaikaisesti. Moniydinprosessorissa jaetut laitesijainnit toimivat semaforeina ilmaisemaan esimerkiksi, josko tiettyä jaettua oheislaitetta käyttää jo tietty prosessoriydin. Ennen oheislaitteen aktivoimista järjestelmän muiden ydinten täytyy lukea semaforin status nähdäkseen, onko oheislaite käytettävissä.
Sarjamuistiliitäntä on paras ratkaisu IoT-muistille. Muisti on keskeinen osa jokaista IoT-järjestelmää ja sitä käytetään sekä ohjelmakoodin että datan tallennukseen. Nykyaikaisissa IoT-laitteissa tarvitaan yhä enemmän älyä, minkä takia tarvitaan enemmän muistia koodille ja datalle. Tämän muistin integroiminen kokonaan laitteen sisäiseksi muistiksi kasvattaisi ohjainpiirin koko ja kustannuksia. Vaihtoehtoinen tapa on mahdollistaa muistin laajentaminen ulkoisesti, kun siihen on tarvetta. Tämä antaa suunnittelijoille mahdollisuuden lisätä muistia loppusovelluksen tarpeiden mukaan. Jos kehitysprojektin aikana käy ilmi, ettei suunnitellussa varattu sisäinen muisti riitä, ulkoista lisämuistia voidaan tuoda mukaan ilman, että koko järjestelmä täytyy suunnitella uudelleen.
On myös tärkeää ottaa huomioon ulkoisen muistin liitännän nopeus ja tietoturva, sekä sen helppokäyttöisyys. Yleisesti ottaen sarjaliitäntä on rinnakkaista parempi valinta, jotta säästetään mikro-ohjaimen rajallisia IO-liitäntöjä. Vaikka SPI-pohjainen sarjamuisti tarjoaa kohtuullisia liitäntänopeuksia dataloggaukseen, koodin suorittaminen ulkoisesta muistista vaatii suurempia nopeuksia. Tämä vaatimukset ovat saaneet mikro-ohjainvalmistajat kehittämään vaihtoehtoja SPI-väylälle. Tässä on eri SPI-muotojen nopea vertailu:
- SPI: Tukee 1 bitin siirtoa/kellojakso
- Dual-SPI: Tukee 2 bitin siirtoa/kellojakso
- Quad-SPI: Tukee 4 bitin siirtoa/kellojakso
- Dual Quad-SPI: Tukee yhden tavun siirtoa/kellojakso
Tyypillisesti mikro-ohjain tukee samanaikaisesti useita muistityyppejä, mikä antaa suunnittelijalle eniten joustavuutta.
Koska monet IoT-järjestelmän käsittelevät käyttäjän henkilökohtaista dataa, on tärkeää varmistaa datan tietoturva. Myös koodimuisti pitää turvata laitteen auktorisoimattoman käytön estämiseksi. Ulkoiset muistit ovat tässä suhteessa haavoittuvaisempia, joten ulkoisesti tallennetun datan suojaamiseen tarvitaan erikoismekanismeja. Tämän takia mikro-ohjaimissa käytetään erilaisia salaustekniikoita (esimerkiksi AES, DES, RSA) suojaamaan dataa ja koodia luvattomalta pääsyltä. Esimerkiksi PSOC 6 BLE -ohjaimelle Cypress tarjoaa erityistä SMIF-oheisliitäntää (Serial Memory Interface), joka tukee sekä XIP-moodia (Execute in Place) koodin ajamiseen suoraan ulkoiselta muistilta, että MMIO-moodia (memo mapped IO) dataloggaukseen. Liitäntää ohjataan erikoiskomennoilla, kuten Flashin ohjelmointi/poispyyhintä, muistien asettaminen sleep mode -tilaan, jne.
Kuva 8. SMIF-väyläesimerkki (Serial Memory Interface).
SNIF antaa käyttäjän konfoguroida useita muisteja, jotka voivat olla erityyppisiä ja -kokoisia. Useat muistit mapataan eri osoitteisiin XIP-muistimoodissa. Muistit voivat olla eri tyyppiä, joten niitä voidaan käyttää eri tarkoituksiin järjestelmässä. Muistit voivat olla myös identtisiä ja konfiguroitu peräkkäisiin muistiavaruuksiin/osoitteisiin, jolloin ne simuloivat yhtä jatkuvaa, suurta muistia. SMIF-oheisliitäntä yhdessä yhdessä SPI-väyläisen flashmuistin kanssa on ulkoisen NAND- tai NOR-flashin toimiva korvaaja ja sillä voidaan myös säästää korttialaa. NAND-muistiin verrattuna ratkaisu on selvästi helppokäyttöisempi, sillä sarjamuotoinen flashmuisti voidaan mapata suoraan prosessorin muistiin datantallennusta varten ja XIP-tuen avulla voidaan myös ajaa ulkoista ohjelmakoodia.
Järjestelmän turvallisuus, tietoturva ja yksityisyys
Kun laite on liitetty verkkoon, kuvaan tulee mukaan sen hakkeroinnin mahdollisuus. Tämän takia IoT-laitteen turvallisuudessa ei voi tehdä kompromisseja, oli kyse sitten henkilökohtaisesta puettavasta laitteesta tai verkkoon liitetystä ajoneuvosta. Datan suojausta tarvitaan kaikilla tasoilla, mukaan lukien tallennus, prosessointi ja tietoliikenne, jotta järjestelmän luotettavuus voidaan taata. Lisäksi pitää turvata jokainen sovellus- tai firmware-ohjelmisto, mikä käsittelee dataa. Tällainen tietoturva voidaan toteuttaa kahdella tasolla. Ensimmäinen on ohjelmistotaso ja toinen laitetason tietoturva, eli ohjelmiston suojaaminen raudalla.
Tyypillisesti ohjelmistopohjainen tietoturva käyttää koodiavaruuteen tallennettuja salausavaimia. Vaikka tämä toimii teknisesti salauksessa ja salauksen purkamisessa prosessi on silti haavoittuvainen, koska kyse on tallennetusta koodista. Sillä hetkellä, kun koodi dekoodataan, tietoturva vaarantuu.
Laitepohjainen turva käyttää integroitua piiristöä suojaamaan järjestelmää: esimerkiksi koodin ja datan salaamisessa ja purkamisessa. Laitesuojaus on itseriittoinen, eikä se tarvitse lisäohjelmistoja toimiakseen, mikä eliminoi haittakoodin mahdollisuuden, saastumisen, ja muut haavoittuvuudet, jotka ovat riski järjestelmälle, käyttäjän datalle ja palveluille. Tämän takia laitepohjainen tietoturva on suositeltava lähestymistapa sensitiivisen datan ja koodin suojaamiseen. Tämän takia IoT-sovellusten mikro-ohjaimilla on edistyneitä piirille integroituja suojaustoimintoja, kuten salauslohkoja, koodin suojaus-IP:tä ja muita laitepohjaisia mekanismeja.
Laitepohjaisella suojauksella on vielä se lisäetu, että sen suorituskyky on parempi ja tehonkulutus alhaisempi kuin firmware-pohjaisilla toteutuksilla. Esimerkiksi Cypressin PSoC 6 BLE -ohjaimen dedikoitu salauslohko kiihdyttää salaustoimintoja. Lisäksi lohko tuottaa TRN-satunnaislukuja (True Random Number), symmetriseen avaimeen pohjaavaa salausta ja purkua, viestien autentikointia, sekä monia aputoimintoja kuten mahdollista/estä, keskeytysasetukset ja liputukset (flags). Tämä mikro-ohjain on myös varustettu turvakäynnistys- eli secure boot -toiminnolla. Se käyttää ROM-rutiineja taatakseen käyttäjädatan autentikoinnin flash-muistissa. Turvakäynnistys on prosessi, johon sisältyvä salaus antaa IoT-laitteeseen käynnistää vain sovelluksia, jotka on autentikoitu. Siksi vain luotettuja sovelluksia käynnistetään. Tämän ansiosta järjestelmä voidaan käynnistää tiedetystä ja luotetusta tilasta.
Kuva 9. IoT-sovelluksen mikro-ohjaimen turvallisuusekosysteemi.