Platforme Freescale destinate Internet of Tomorrow: FRDM-K64F

by donpedro

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


Punctul forte pentru Freescale Freedom Board îl reprezintă suportul software. Punctul de pornire îl reprezintă Freescale Kinetis SDK, o colecție de drivere, bi­blioteci software şi exemple destinate dezvoltării aplicațiilor embedded pe microcontro­lere din familia Freescale Kinetis. KSDK se poate integra ușor cu alte biblioteci software de tip middleware (wolfSSL) sau RTOS (Freescale MQX sau Free RTOS) și medii de dezvoltare precum KDS (Kinetis Design Studio) – acesta din urmă vine cu suita de tool-urile GCC pentru procesare embedded ARM. Poate cel important suport vine de la ARM prin intermediul platformei online ARM mbed și a sistemului de operare ARM mbed OS pentru dezvoltarea aplicațiilor pe ARM Cortex-M. Pe baza suportului oferit de ARM mbed, Oracle a dezvoltat suportul special din Java ME (Micro Edition) 8.x pentru Freescale FRDM-K64F. La urmă am lăsat o noutate apărută în această toamnă și anume faptul că Freescale FRDM-K64F este certificată pentru conectarea la platforma de cloud computing Microso­ft® Azure™ IoT. Trebuie să menționăm că (pentru moment) Freescale FRDM-K64F este singura placă de dezvoltare embedded cu ARM Cortex-M4 oferită drept exemplu de client capabil să comunice în mod sigur cu infrastructura Microsoft Azure IoT.
În următoarele secțiuni vom prezenta mai în detaliu suportul software menționat mai sus pentru Freescale FRDM-K64. Ultima parte conține concluzii și o serie de rezultate obținute în urma unor teste de performanță.

Specificații hardware

Freescale_EA0915_Fig-1a

Figura 1: Freescale FRDM-K64F.

Pentru înțelegerea unor aspecte legate de suportul software, vom începe prezentând capabilitățile hardware atât ale microcontrolerului cât și modu­lele şi porturile expuse pe placa de bază.
Microcontrolerul este un Freescale Kinetis MK64 FN1M0VLL12 low power, cu nucleu ARM Cortex-M4 la 120MHz și Floating Point Unit, memorie Flash de 1MB și 256KB de SRAM – [1]. Aplicațiile embedded mai pot accesa memoria flash din portul micro SD – această memorie este necesară pentru rularea apli­cațiilor Java ME. Microcontrolerul deține o unitate de accelerare criptografică mmCAU (memory mapped cryptographic acceleration unit) și un mo­dul 10/100 Ethernet MAC. Modulul mmCAU supor­tă accelera­rea următorilor algoritmi criptografici: DES, 3DES, AES, MD5, SHA-1 și SHA-256 – [2].
Pe placa de bază avem două porturi micro USB: unul permite accesarea modului de debug (SDAUSB), iar celălalt este conectat direct la microcontroler (K64USB). Ambele porturi au rol de a alimen­ta placa. Întrucât vom menționa des portul SDAUSB, merită să menționăm și funcțiile acestuia (pentru detalii vezi [2], [4], [5]):

Mass storage device (MSD) și bootloader. Portul SDAUSB este văzut de sistemul de operare ca o
memorie Flash, iar programarea aplicațiilor în memoria internă a microcontrolerului se realizează printr-o simplă copiere de fișier. După programare bootloader-ul va reseta placa și va porni aplicația.

Interfață cu modulul de debug. Modulul de debug este de fapt un alt microcontroler Freescale Kinetis ce rulează un firmware ce implementează API-ul standard ARM CMSIS-DAP (vezi [6]). Versiunea aflată pe placă este OpenSDAv2. Ca diferență majoră faţă de OpenSDAv1 (disponibil pe plăcile Freescale Freedom până la FRDM-K64F) este aceea că bootloader-ul suportă doar fișiere binare cu extensia .bin în loc de .sda/.s19/.srec – vezi [5] pentru mai multe detalii. Ca observație, orice altă extensie este ignorată de bootloader. Proiectul de firmware OpenSDA este open source și poate fi descărcat de pe Github® – vezi [7].

Adaptor USB-la-Serial. Pentru ca acest port să fie recunoscut de sistemul de operare, trebuie
instalat un driver special mbed – vezi [8]. Portul serial mbed este folosit extensiv pentru afișarea
mesajelor de trasare ale aplicațiilor. Java ME de exemplu folosește acest port serial pentru
înregistrarea dispozitivelor și instalarea mașinii virtuale în memoria internă a dispozitivului.

După cum menționam, pentru conectivitate, placa expune un port de Ethernet și două porturi pentru module de extensie radio low power: pentru modulul Bluetooth JY-MCU și Nordic® nRF24L01+ (2.4GHz). De asemenea, pentru a putea depana atât firmware-ul OpenSDA cât și aplicația de pe microcontroler cu o probă externă, placa expune două porturi de JTAG. Acestea se pot dovedi utile pentru a recupera placa – bootloader-ul din OpenSDAv2 poate bloca (brick) placa, vezi [4].

Suport software

Freescale_EA0915_Fig-2

Freescale Kinetis Software Development Kit (KSDK)
Freescale KSDK reprezintă punctul de pornire pentru orice aplicație dezvoltată pe un microcontroler Freescale Kinetis. Colecția software este open source (cu excepția unor module produse de terți) și poate fi descărcată gratuit – vezi [10]. Versiunea actuală este 1.3.0. În KSDK se găsesc următoarele categorii de software: drivere, suport software pentru plăcile de dezvoltare (cum ar fi FRDM-K64F), biblioteci middleware, module RTOS, exemple plus sursele acestora – vezi [9]. Pentru o integrare ușoară cu alte module software și produse middleware, driverele au fost concepute pornind de la un HAL (hardware abstraction layer) ce abstractizează accesul la anumite grupuri de regiștri hardware pentru o anumită sub-familie din cadrul arhitecturii Freescale Kinetis. Pe baza acestuia s-au dezvoltat drivere pentru diferite module hardware – de exemplu, biblioteca pentru modulul criptografic mmCAU. Pentru a suporta RTOS-uri, KSDK oferă un OSA (operating system abstraction). Acest lucru a permis suportarea de RTOS-uri (Freescale MQX, FreeRTOS, Micrium uC/OS) și stive de software sau middleware (USB host sau OTG, sisteme de fișiere, console shell, biblioteci criptografice care folosesc mmCAU – de ex. wolfSSL). Un alt exemplu de integrare îl reprezintă suita software Freescale Processor Expert.
Aceasta se poate instala ca un plug-in de Eclipse (de ex. KDS – Kinetis Design Studio) și oferă o metodă vizuală de a configura și a genera cod pentru perifericele microcontrolerului.
Exemplele din KSDK se pot compila și cu mediul integrat de dezvoltare Kinetis Design Studio (KDS). Versiunea curentă este 3.0 – și este oferită de asemenea gratuit, vezi [11]. KDS este un IDE construit din software open source: GCC (GNU Tools for ARM Embedded Processors versiunea 4.8.4), GDB (GNU Debugger) și Eclipse (împreună cu extensiile de Eclipse pentru ARM GCC – vezi [12] – și openOCD – vezi [13]). După cum vom vedea, proiectele ARM mbed sunt de asemenea compatibile cu KDS.
Pentru a testa suportul actual din KSDK pentru FRDM-K64F și să vedem cât de repede se mișcă, am folosit proiectul de sever HTTP dat ca exemplu. Proiectul oferă posibilitatea de transformare într-un server HTTPS prin includerea bibliotecii wolfSSL. Înainte de a începe încărcarea unui exemplu în KDS este recomandat de consultat ghidul KSDK – vezi [14]. Ca sistem referință a fost folosit un SBC bazat pe un i.MX6SoloLite. Rezultatele testelor de benchmark cât și configurațiile de test se pot găsi la finalul acestui articol.

Platforma ARM mbed IoT

ARM mbed reprezintă un mediu online ([15]) dedi­cat dezvoltării aplicațiilor Internet of Things, pe microcontrolere cu nuclee ARM Cortex-M, de la stadiul de prototip până la produsul final. Platforma oferă un sistem de operare open source numit ARM mbed OS. Scopul acestuia este acela de a ușura munca de proiectare, ascunzând aspectele strict legate de o anumită platformă hardware printr-un nivel de abstractizare (HAL) [16]. Nu toate platformele hardware bazate pe ARM Cortex-M pot rula mbed OS. Ele trebuie să ofere anumite caracteristici hardware pentru execuția sistemului de operare, iar memoria trebuie să permită dezvoltarea ulterioară a aplicațiilor utilizatorilor. FRDM-K64F se numără printre plăcile de dezvoltare certificate mbed – [20].
Sistemul de operare este destinat clienților IoT. Partea interesantă este aceea ca aplicațiile se pot compila prin mediul integrat de dezvoltare disponibil online – Online Compiler IDE, vezi [17]. Acest IDE include un compilator ARMCC C/C++ și un sistem de control al versiunilor. Mediul oferă posibilitatea de importare în spațiul de lucru a proiectelor și a bibliotecilor dezvoltate de utilizatorii platformei mbed. Aceste proiecte și biblioteci sunt la rândul lor construite pe baza unui mbed SDK ce conține și API-ul pentru HAL – [19]. Întrucât proiectele complexe necesită o investigare amănunțită cu un debugger, Online Compiler IDE oferă posibilitatea de a exporta un proiect pentru un anumit IDE – [18]. Printre mediile integrate de dezvoltare suportate se găsește și KDS (Kinetis Design Studio). De asemenea, sursele SDK-ului pot fi descărcate gratuit.

Pentru sistemele de IoT server sau gateway mbed oferă middleware numit ARM mbed Device Server ce conectează rețeaua de noduri la Internet. Acesta va fi disponibil pe următoare versiune (3.0) a platformei mbed. Această versiunea aduce și alte lucruri interesante. SDK-ul va conține o suită de tool-uri pentru linia de comandă prin intermediul cărora proiectele se pot dezvolta și local, nu numai din interfața Web. De asemenea, vor fi adăugate implementări de software pentru comunicația wireless (Bluetooth, Wi-Fi, 6LoWPAN și protocolul Thread – [21]) și pentru securitatea transportului de date în rețea (TLS și DTLS – [22]).

Întrucât FRDM-K64F poate comunica prin Ethernet am vrut să verificăm viteza de transfer. În acest sens am folosit un simplu proiect de server TCP ce reflectă înapoi mesajul clientului. Rezultatele acestui test se găsesc în ultima parte a acestui articol.

Java Micro Edition

Înainte de a prezenta suportul software, este important să explicăm unele concepte Java ME. Această versiune de Java se adresează platformelor hardware cu resurse limitate. Întrucât aceste platforme pot avea resurse hardware foarte diferite s-a trecut la gruparea acestora pe baza unor speci­ficații. De aceea, din perspectiva Java ME, pentru o platformă hardware este important de cunoscut configurația și profilul suportat.

Referințe

FRDM-K64F
[1] Kinetis K6x MCU Family, http://cache.freescale.com/files/microcontrollers/doc/fact_sheet/KINK6XFS.pdf
[2] http://cache.freescale.com/files/32bit/doc/user_guide/FRDMK64FUG.pdf
[3] http://cache.freescale.com/files/microcontrollers/doc/ref_manual/K64P144M120SF5RM.pdf
KSDK
[4] http://mcuoneclipse.com/2014/04/20/binary-files-for-the-mbed-bootloader-with-eclipse-and-gnu-arm-eclipse-plugins/
[5] http://www.freescale.com/OPENSDA
[6] https://developer.mbed.org/handbook/CMSIS-DAP
[7] Open-source CMSIS-DAP software project: github.com/mbedmicro/CMSIS-DAP.
[8] https://developer.mbed.org/handbook/SerialPC
[9] Kinetis SDK v.1.3 API Reference Manual, http://cache.freescale.com/files/soft_dev_tools/doc/support_info/KSDK13APIRM.pdf
[10] http://www.freescale.com/ksdk
[11] http://www.freescale.com/kds
[12] http://gnuarmeclipse.github.io/
[13] http://openocd.org/
[14] http://cache.freescale.com/files/soft_dev_tools/doc/support_info/KSDK13GSUG.pdf

mbed
[15] https://developer.mbed.org/
[16] https://developer.mbed.org/handbook/Homepage
[17] https://developer.mbed.org/handbook/mbed-Compiler
[18] https://developer.mbed.org/handbook/Exporting-to-Eclipse-IDEs
[19] https://developer.mbed.org/handbook/mbed-SDK
[20] https://developer.mbed.org/platforms/
[21] http://threadgroup.org/
[22] https://developer.mbed.org/blog/entry/Announcing-our-plans-for-mbed-v30/

Java ME
[23] https://docs.oracle.com/javame/8.2/get-started-freescale-k64/
[24] https://docs.oracle.com/javame/8.2/release-notes-freescale-k64/
[25] http://docs.oracle.com/javame/config/cldc/opt-pkgs/api/cldc/api/index.html
[26] http://www.oracle.com/technetwork/java/embedded/javame/javame-sdk/downloads/index.html

Azure IoT
[27] https://github.com/Azure/azure-iot-sdks
[28] https://azure.microsoft.com/en-us/documentation/samples/iot-hub-c-mbed-temperature-anomaly/
[29] https://github.com/Azure/azure-iot-sdks/blob/master/c/doc/run_sample_on_freescale_k64f_mbed.md
[30] https://developer.mbed.org/users/AzureIoTClient/
[31] https://azure.microsoft.com/en-us/marketplace/certified-iot-program/
[32] https://github.com/Azure/azure-iot-sdks/blob/master/tools/DeviceExplorer/doc/how_to_use_device_explorer.md

Apache Bench
[33] https://httpd.apache.org/docs/2.2/programs/ab.html

Continuare în numărul viitor.

 

Freescale Semiconductor România S.R.L. – București
www.freescale.ro

 

 

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