Platforme Freescale pentru Internet of Tomorrow: LS1021A-IoT

by donpedro

de Cătălin Horghidan, Software Developer CodeWarrior Debugger Tools
Freescale Semiconductor România


Întrucât anul trecut am putut oferi doar o succintă descriere, bazată în principal pe capabilitățile hardware ale modelului de procesor, acum ne propunem să prezentăm mai multe detalii despre platforma hardware și suportul software actual. Pe scurt, vom descrie platforma hardware LS1021A-IoT prezentând caracteristicile nucleelor, SoC-ului și componentele aflate pe placa de bază, suportul oferit de mediul integrat de dezvoltare CodeWarrior pentru ARMv7 ISA pentru această platformă și Freescale QorIQ Linux® SDK.

LS1021A-IoT gateway

Platforma hardware LS1020A-IoT este construită în jurul procesorului de comunicație Freescale LS1021A bazat pe arhitectura ARM. Datorită designului compact, a interfețelor de mare viteză și a soluțiilor de conectivitate low power, sistemul poate adresa un spectru larg de aplicații din domeniul automatizărilor și controlului industrial, al rețelelor și bineînțeles, IoT. Dintre aceste aplicații putem enumera: PLC (Programmable Logic Control), Fieldbus-to-Ethernet Gateway (conectarea protocoalelor din familia Fieldbus – ex. CAN® – prin intermediul unui calculator sau gateway la rețea), Wireless LAN Access Point (procesoarele din familia Freescale QorIQ sunt optimizate pentru 802.11ac sau 802.11n), NAS (Network Attached Storage) securizat, POS sau gateway IoT multi-protocol.

Freescale_EA0815_Fig-2

Figura 1: LS1021A-IoT gateway.

Ca o noutate pentru gama de platforme hardware bazate pe procesoarele Freescale QorIQ, este suportul pentru Arduino® Shield™.
Acest fapt permite conectarea la rețele de tip WPAN (Wireless Personal Area Networks) și 6LoWPan cum ar fi ZigBee® sau Bluetooth®. Nu în ultimul rând, trebuie menționată partea de securitate – indispensabilă în lumea IoT – asigurată de arhitectura Layerscape™ LS1020A Trust (Secure Boot, Secure Debug sau detecția acțiunilor externe pătrundere forțată în sistem – tamper) și ARM® TrustZone®.

Specificații Hardware

Procesorul de aplicații prezent în LS1020A-IoT face parte din familia Freescale QorIQ LS102x axată pe două nuclee ARM® Cortex®-A7 cu suport de vir­tualizare, ce pot rula până la o frecvență de 1GHz și sunt capabile de peste 5000 CoreMarks®. Nucleele conțin două memorii cache L1 de 32KB (pentru date și instrucțiuni) și o memorie cache L2 partajată de 512KB. Ambele memorii cache au activate mecanismul de ECC (Error Correction Code). Pentru accele­rarea algoritmilor multimedia și de procesare a semnalelor, nucleele conțin un modul ARM® NEON™ și o unitate de operații în virgulă mobilă VFPv4 cu dublă precizie. Controlerul DDR permite inter­fațarea cu memorii DDR3L/4 de până la 1600MHz.

Figura 2: Schema bloc a Freescale LS1021A-IoT.

Figura 2: Schema bloc a Freescale LS1021A-IoT.

SoC-ul (Sistem-on-Chip) LS1021A conține module și interfețe specifice familiei Freescale QorIQ. Aproape toate interfețele suportate sunt expuse de conectorii aflați pe placa de bază a LS1020A-IoT (vezi figura 2 pentru conexiunile între module și porturile externe și figura 3 pentru amplasarea lor pe placa de bază).

Ca toți membri familiei Freescale QorIQ, procesorul LS1021A a fost proiectat pentru a oferi viteze mari de transfer pentru periferice – în special pentru interfețele de rețea. Procesorul conține un modul SerDes (Serializer/Deserializer) ce poate opera la o frecvență de 6GHz și la care se pot atașa cele trei porturi de Gigabit Ethernet (în total placa de bază expune 6 porturi Gigabit Ethernet), cele două porturi PCI Express® 2.0 (pe placă sunt expuse de conectorii miniPCIe) sau portul SATA 3.0 (de asemenea expus de un conector).
Controlerele de Ethernet sunt de tipul VeTSEC (Virtualized Enhanced Triple-Speed Ethernet Controller) și suportă IEEE® 1588 (versiunea 2.0 de Precision Time Protocol – protocol utilizat pentru sincronizarea ceasurilor într-o rețea). MAC-urile suportă interfețele MII (100Mbs Media Independent Interface), SGMII (Serial Gigabit MII) și RGMII (Reduced Gigabit MII). Acestea sunt numite “virtua­lized” întrucât întreruperile hardware gene­rate de aceste periferice pot fi redirectate către anumite nuclee, lucru ce poate fi utilizat de sistemul de virtualizare.
În plus, pot fi programate pentru a distribui în mod egal traficul pe cele două nuclee sau pentru a filtra (firewall hardware) anumite pachete în funcție de protocol sau regulile de QoS (Quality of Service).
Pentru interfațarea cu memorii non-volatile externe, procesorul conține un controler integrat de Flash pe 16-biți (IFC), un controler QuadSPI (me­morii SPI de tip NOR sau NAND) și un controler pentru memoriile SD/MMC – placa de bază oferă un conector pentru memorii SD – [2].
Sistemul oferă două controlere de USB: unul versiunea 3.0 cu PHY integrat (expune două porturi USB A pe placa ce bază) iar celălalt, versiunea 2.0 ULPI (Ultra Low Pin count Interface) conectate la porturile miniPCIe. Pentru aplicațiile de automatizări și de control industrial, oferă patru porturi CAN® (disponibile pe conectorii de extensie GPIO aflați pe placă) și 10 UART-uri (unul pentru conectorul de Arduino®, altul legat la MK22FX512 – unitatea de debug integrată – iar restul accesibili pe conectorii GPIO). Unitatea de debug permite, în plus, accesarea unui port UART al LS1021A prin USB – prin mini portul USB 2. Alte porturi standard prezente pe placă sunt: două porturi SPI (legate la conectorul GPIO, conectorul Arduino®, CPLD – de fapt regiștri ce conțin o parte din configurația plăcii LS1021A-IoT, MK22FX512 și pentru mana­gementul switch-ului Gigabit Ethernet RTL8365MB atașat interfeței RGMII) și trei porturi I2C (spre conectorul Arduino®, MMA8451Q – accelerometru, porturile miniPCIe, senzorul de temperatură al plăcii de bază, modulul HDMI, ADC-ul extern, EEPROM – conține adresa MAC –, MC34VR500 – Power Management IC – și conectorii GPIO) – [2].
Versiunea de procesor de pe LS1021A-IoT conține și un controler de LCD sau DCU (Display Unit Controller) numit 2D-ACE. Este capabil de rezoluții video XVGA (1024 × 768 × 24 bpp × 60 Hz) [2]. Driverul din SDK suportă doar fbdev (Linux® framebuffer) fără accelerare hardware.
Specific pentru familia Freescale QorIQ este prezența unui modul pentru accelerarea funcțiilor de criptare/decriptare și a protocoalelor ce asigură transportul datelor în rețea. LS1021A include cel mai nou motor de securitate Freescale QorIQ SEC versiunea 5.5. Dintre algoritmii criptografici accelerați hardware (sau hardware offloading) amintim: criptare cu chei publice (RSA și Diffie-Hellman – 4096b – și curbe eliptice – 1024b), ZHA (ZUC Hardware Accelerator, suită de algoritmi recomandați în telefonie pentru 3GPP LTE – Long Term Evolution), chei simetrice (DES, 3DES în modurile ECB și CBC; AES 128-, 192- și 256-biţi, în modurile ECB, CBC, CTR, CCM, GCM, CMAC, OFB, CFB și XTS), hashing (MD5, SHA-1, SHA-256/384/512, HMAC), CRC (CRC32, CRC32C, 802.16e OFDMA). Dintre protocoalele de securitate de transport al datelor în rețea cu suport de offloading enumerăm: IPSec, SSL/TLS, 3G RLC, PDCP, SRTP, și 802.1ae (MACsec). SDK-ul pentru LS1021A-IoT conține driverele ce oferă hardware offloading pe modulul SEC. Documentația SDK-ului prezintă în detaliu modalitățile de utilizare și de testate a algoritmilor criptografici.

Placa de bază a LS1021A-IoT vine cu 1GB DDR3L (4 biți ECC ) un modul 128MB de QSPI NOR Flash (conectați la controlerul de QuadSPI). Portul Arduino® (UNO) este menit să ofere conectivitate cu module compatibile prin SPI, UART sau I2C; De exemplu, module ZigBee® sau Bluetooth®. Pentru managementul alimentării circuitelor de pe placa de bază (LS1021A, memoria DDR, modulele HDMI și Ethernet externe), se folosește un circuit integrat extern (MC34VR500). Pentru aplicațiile de rețea ce necesită suport audio, LS1021A-IoT conține un modul SGTL5000 conectat la portul SAI (Synchronous Audio Interface). Subsistemul audio din LS1021A poate avea până la patru interfețe SAI și suportă ASRC și SPDF – una din interfețe este conectată la modulul HDMI.

Figura 3: Placa de dezvoltare a Freescale LS1021A-IoT.

Figura 3: Placa de dezvoltare a Freescale LS1021A-IoT.

Întrucât este o placă de dezvoltare, LS1021A-IoT oferă pentru depanarea aplicațiilor o unitate de debug. Mai precis un microcontroler Kinetis MK22FX512 ce rulează un firmware CMSIS-DAP (ARM® Cortex® Microcontroller Software Interface Standard Debug Access Port). Această unitate permite depanarea aplicațiilor la nivel de JTAG fără alt dispozitiv extern și este compatibil cu tool-ul de debug din CodeWarrior pentru ARMv7 ISA. Firmware-ul este construit pe platforma open source ARM® MBED®. Acest lucru permite comunicația serială și trimiterea de comenzi de debug prin intermediul portului USB, dar și actualizarea rapidă la o nouă versiune de firmware. Prin intermediul acestui modul, tool-urile externe (cum sunt tool-urile pentru depanare prezente în CodeWarrior Development Studio) pot încărca aplicațiile și depana aplicații pe LS1021A. Dacă se dorește conectarea unui al tool de debug sau a unei unități de debug externe (cum ar fi CodeWarrior TAP) placa de bază expune și un port de JTAG (ARM® Cortex® 10-pin). Mai multe detalii despre CodeWarrior pentru ARMv7 ISA vom prezenta în secțiunea următoare legată de suportul software.
Mai trebuie menționat că în prezent este disponibilă o nouă versiune de gateway numită LS1021A-IotT-B. Acesta vine cu versiunea de silicon (rev. B) ce rezolvă problemele de performanță ale controlerului de Ethernet existente în prima versiune de procesor (rev. A).

Suport Software
Freescale QorIQ Linux® SDK

Pentru toate procesoarele din familia Freescale QorIQ, Freescale oferă (gratis) un SDK ce conține fișierele necesare compilării imaginilor de OS (sau) pentru o anumită platformă, plus alte instrumente de dezvoltare – sistemul de creare a imaginilor este bazat pe Yocto. Documentația SDK-ului este și disponibilă online – vezi adresa [7]. LS1021A-IoT nu face excepție. Însă pentru acest model a fost creat un SDK special, pentru utilizatorii interesați doar de platforma IoT.
Modul de prezentare al SDK-ul este sub forma unei imagini ISO și este disponibil pentru des­cărcare pe pagina Freescale a LS1021A-IoT.
Imaginea actuală de SDK pentru LS1021A-IoT este numită “QorIQ-SDK-V1.7 for LS1021AIOT” – asta pentru a evita confuzia cu SDK-ul furnizat pentru celelalte procesoare Freescale QorIQ (în prezent versiunea 1.8). De pe site, trebuie descărcate trei fișiere QorIQ-SDK-V1.7-SOURCE-20141218-yocto _RDS_20150302-a{x}.bin și apoi recompuse pe mașina locală. Pentru a genera o imagine (evident după configurarea sistemului Yocto pe mașina locală), set folosește comanda “bitbake” având ca parametru numele imaginii. Pentru LS1021A_IoT SDK-ul conține mai multe rețete Yocto însă cele mai utilizate sunt: fsl-image-core (construiește o imagine minimală de Linux la care se adaugă pachete software Freescale cum ar fi crypto), fsl-image-rds (construiește o imagine de OpenWrt pentru LS1021A-IoT) și fsl-image-virt (ima­gine ce conține pachete software pentru virtualizare, cum ar fi KVM, libvirt sau LXC) – [7].
Menționăm că suportul de virtualizare hardware este asigurat de arhitectura nucleelor ARM® Cortex®-A7 și unitatea de management a memoriei System-MMU (translațiile de la adresele virtuale la cele fizice pentru mai multe sisteme “oaspete” sunt accelerate de hardware și nu de software sau hypervisor).
Ca paranteză, conform [1], testele efectuate pe un sistem asemănător (TWR-LS1021A) au arătat o degradare de performanță (față de execuția testului în condiții normale, în afara mașinii virtuale) între 5 și 10% pentru KVM și 1-2% pentru LXC (Linux container).
Pentru familia Freescale QorIQ, CodeWarrior Development Studio reprezintă principalul mediu de dezvoltare. În ceea ce privește LS1021A-IoT, versiunea necesară este CodeWarrior pentru ARMv7 ISA. Ca o paranteză, este important de menționat arhitectura întrucât în prezent există și o versiune de CodeWarrior Development Studio ce suportă arhitectura ARM®v8 (pe 64 de biți, în timp ce ARMv7 este o arhitectură pe 32 de biți) și anume nucleele ARM® Cortex®-A53 și ARM® Cortex®-A57. Aceste nuclee sunt prezente în procesoarele Freescale QorIQ high-end bazate pe arhitectura ARM®.

CodeWarrior pentru ARMv7 ISA

CodeWarrior Development Studio este un mediu de dezvoltare bazat pe Eclipse și integrează o suită completă de tool-uri necesare dezvoltării apli­cațiilor embedded. Conține tool-uri de configurare și validare hardware și software, compilare, debug, trace și profiling. Versiunea actuală de CodeWarrior pentru ARMv7 ISA este 10.0.7.
Pentru configurarea și validarea setărilor unei anu­mite platforme hardware Freescale QorIQ, CodeWarrior pentru ARMv7 ISA oferă QCVS (QorIQ Configuration Validation Suite). Acest tool permite configurarea RCW (Reset Half Word – adresa de start a unei aplicații după Reset, plus alte setări specifice platformei), PBI (Pre Boot Initialization), configurarea controlerelor de DDR sau editarea de Data Tree (structura de date folosită pentru descrierea componentelor hardware ale unui sistem). Ca observație, imaginile generate de SDK conțin deja configurările optimizate și verificate pentru LS1021A-IoT. Pentru compilare și link-edi­tare CodeWarrior pentru ARMv7 ISA folosește suita GCC pentru ARM de la Linaro™. Aceleași tool-uri sunt folosite și de SDK pentru a compila imaginile de Linux®.
Tool-ul pentru debugging oferă două scenarii de utilizare: bare-metal (comenzile de debug sunt îndreptate asupra nucleelor, se pot accesa direct regiștri nucleelor sau SoC-ului și memoria) sau axat pe dezvoltarea aplicațiilor de Linux (utilizatorul poate depana aplicațiile la nivel de fir de execuție). Pentru dezvoltatorii de Linux® kernel sau drivere de dispozitive, CodeWarrior pentru ARMv7 ISA oferă extensii dedicate. Acestea includ un mod de operare compatibil cu un kernel symetric multi-processing (SMP) precum și abilitatea de a inspecta funcționarea unui modul de la înserarea până la scoaterea din spațiul kernel.

Dintre caracteristicile generale pentru toate mo­durile de debug menționăm: inspecția variabilelor și alcătuirea de expresii, moduri diferite de accesare și vizualizare a memoriei în funcție de contextul curent, vizualizarea codului la nivel de limbaj de asamblare (mnemonici), instalarea de puncte de întrerupere a execuției (breakpoint) atunci când un core (nucleu) ajunge într-un anumit punct sau încearcă să acceseze date de la o anumită adresă și funcții de control asupra execuției nucleelor (execuție pas cu pas a codului, pornire și oprire sincronă sau asincronă). Implicit, tool-ul de depanare oferă și funcții de scriere sau programare a codului sau a datelor în memoriile Flash.
De obicei, programarea memoriilor Flash este realizată de u-boot sau un bootloader, însă utilitatea tool-ului intervine atunci când nu avem unul pre-programat. În ceea ce privește LS1021-IoT, toate funcțiile enumerate mai sus rămân valabile și în cazul în care tool-ul se conectează prin proba internă de debug. Singurul dezavantaj față de o probă externă (cum ar fi CodeWarrior TAP) îl reprezintă viteza scăzută. Pentru mai multe detalii tehnice despre cum se folosește debugger-ul din CodeWarrior pentru ARMv7 ISA se poate consulta ghidul online – [8].

CodeWarrior pentru ARMv7 ISA oferă de asemenea și un tool pentru analiza dinamică de cod –Software Analysis. Acesta permite vizualizarea informațiilor și a statisticilor legate de execuția unui program. Cu ajutorul acestor detalii un arhitect poate detecta punctele critice ale unei aplicații. Tool-ul extrage datele legate de execuția unui nucleu folosind tehnologia ARM® CoreSight™ Embedded Trace Macrocell (ETM). Fiecare cadru ETM putând fi analizat după terminarea colectării într-o fereastră specială.

Informațiile de profiling oferite sunt: code coverage (timpul total de execuție al fiecărei funcții), performance view (timpul de execuție al unei funcții văzut ca o ierarhie părinte-copil – timpul total de execuție al tuturor copiilor și timpul individual), call tree (construiește ierarhia de apel a funcțiilor în cadrul unui program). Pe lângă acestea, tool-ul oferă posibilitatea vizualizării execuției funcțiilor în timp la nivel de ciclu de procesor.

Pentru extragerea informațiilor despre un program ce rulează în cadrul unui sistem embedded Linux®, CodeWarrior pentru ARMv7 ISA oferă un tool de trace pentru aplicațiile din user space. Acesta poate rula autonom față de CodeWarrior Development Studio și nu necesită o probă externă pentru trace.

Pentru utilizatorii care preferă o abordare bazată pe logging pentru debug, componenta de Software Analysis oferă Debug Print. Această facilitate permite emiterea de mesaje de trace din contextul unui kernel/module/user space spre o interfață unificată de logging fără a afecta performanța sistemului și folosind capabilitățile dedicate ale procesorului. Documentația pentru tool-urile de analiză oferit de CodeWarrior pentru ARMv7 ISA se poate accesa și online – [9].

Ca ultimă mențiune, CodeWarrior pentru ARMv7 ISA, ca și alte versiuni de CodeWarrior Development Studio (Power® Architecture, Advance Packet Processing sau ARM®v8) este dezvoltat de o echipă de software R&D din cadrul Freescale Semiconductor România.

Referințe
[1] Michael Röder, Peter van Ackeren (2015). Hardware Virtualization on ARM Cortex-A Low-Cost CPUs [Online]. Disponibil la: www.silica.com
[Data accesării: 15/09/15].
[2] QorIQ LS1021A-IOT Gateway Reference Design Board Reference Manual (03/2015). [Online] Disponibil la: www.freescale.com [Data accesării: 11/09/15].
[3] Connected World magazine Announces IoT Innovations Winner [Online]. Disponibil la: www.connectedworld.com [Data accesării 02/09/15].
[4] QorIQ LS1021A Family Communications Processor Product Brief (09/2014). [Online] Disponibil la: www.freescale.com [Data accesării: 11/09/15].
[5] Bruno Castelucci (04/2015). Layerscape Overview: QorIQ with ARM, Webseminar [Online]. Disponibil la: www.freescale.com [Data accesării: 11/09/15].
[6] Haim Cohen (11/2013). Layerscape – New Embedded Family Solution [Online]. Disponibil la: www.freescale.com [Data accesării: 15/09/15].
[7] Software and Tools Information Center [Online]. Disponibil la www.freescale.com/infocenter [Data accesării: 15/09/15].
[8] CodeWarrior Development Studio for QorIQ LS series – ARM V7 ISA Targeting Manual (08/2015). [Online] www.freescale.com [Data accesării: 15/09/15].
[9] CodeWarrior Development Studio for QorIQ LS series – ARM V7 ISA Tracing and Analysis Tools User Guide(08/2015). [Online] www.freescale.com
[Data accesării: 17/09/15].
Freescale, logo-ul Freescale, Kinetis, QorIQ și Qorivva sunt mărci comerciale ale Freescale Semiconductor, Inc, Reg. US Pat. & Tm. Off. CodeWarrior, Layerscape și Vybrid sunt mărci comerciale ale Freescale Semiconductor, Inc. Toate celelalte nume de produse sau servicii sunt proprietatea deținătorilor lor. Power Arhitecture şi Power.org cuvântul, mărcile și logo-urile Power și Power.org și mărcile asociate sunt mărci înregistrate și mărci de servicii autorizate de Power.org. ARM, logo-ul ARM, Cortex și TrustZone sunt mărci comerciale sau mărci înregistrate ale ARM Ltd. sau ale filialelor sale în UE sau în altă parte. Toate drepturile rezervate. Oracle și Java sunt mărci înregistrate ale Oracle și/sau afiliaților săi. © 2015 Freescale Semiconductor, Inc.

S-ar putea să vă placă și