Como utilizar Zephyr en la plataforma NXP-MCXN236 de bajo costo, versatil y poderosa

El propósito de este artículo es ilustrar como se usa el sistema operativo Zephyr en la plataforma de bajo costo, muy poderosa y versátil NXP-MCXN236 Development Board desde una computadora en Linux.

image

La plataforma de bajo costo, muy poderosa y versátil NXP-MCXN236 Development Board contiene un microcontrolador 32-bit Arm Cortex-M33 que es muy apropiado para usarse en aplicaciones industriales y de consumidores de Cosas del Internet (Conocidas como IoT en ingles). El diagrama de bloque correspondiente a esta plataforma NXP-MCXN236 Development Board se muestra a continuación,

Despues de instalar los archivos correspondientes para desarrollar con el sistema operativo Zephyr en la computadora de Linux (similar a el previo articulo), por favor proceda a instalar el siguiente archivo LinkServer_26.6.137.x86_64.deb.bin de el enlace de NXP. Esto permite completar el flujo de diseño para el proceso de programacion de este sistema. Para verificar la instalación, por favor proceda con lo siguiente,

DigiKey_Coffee_Cup: /usr/local/LinkServer/LinkServer --version
ls (uutils coreutils) 0.8.0

También, verifique usando la filosofía de prueba para determinar si el artefacto esta conectado, despues de haberlo conectado via el puerto USB J10 usando el cable USB que se incluye en el kit de la siguiente manera,

DigiKey_Coffee_Cup: /zephyrproject/zephyr$ LinkServer probes
  #  Description                                    Serial         Device    Board         Capabilities
---  ---------------------------------------------  -------------  --------  ------------  ----------------
  1  MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146  NTHJHYIGWSDV5  MCXN236   FRDM-MCXN236  DEBUG, VCOM, SIO


Si este paso es completado como se muestra previamente, entonces se procede a modificar la fuente del código localizado en samples/hello_world/src/main.c

/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <stdio.h>

int main(void)
{
        printf("DigiKey_Coffee_Cup Hello World! %s\n", CONFIG_BOARD_TARGET);

        return 0;
}

y construye la aplicación hello world en el ambiente virtual de python como se ve a continuación,

(venv) DigiKey_Coffee_Cup: /zephyrproject/zephyr/ west build -b frdm_mcxn236 samples/hello_world

...
...

 v4.4.0-8487-g17939cff6553
[168/168] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       27504 B         1 MB      2.62%
             RAM:        4328 B       192 KB      2.20%
           SRAM1:           0 B        96 KB      0.00%
        IDT_LIST:           0 B        32 KB      0.00%


Abre un nuevo terminal con una sesión de minicom. Finalmente, proceda a programar la aplicación de hello world en el NXP-MCXN236 Development Board.

(venv) DigiKey_Coffee_Cup: /zephyrproject/zephyr$ west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner linkserver
RUNNER - gdb_port = 3333, semih port = 8888
LinkServer: /usr/local/LinkServer/LinkServer, version v26.6.137
INFO: Exact match for MCXN236:FRDM-MCXN236 found
INFO: Selected device MCXN236:FRDM-MCXN236
INFO: Selected probe #1 NTHJHYIGWSDV5 (MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146)
INFO: MCU-Link firmware update `check`: Probe ([NTHJHYIGWSDV5] [MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146]) is running a firmware version which is older than the included firmware version [3.172]
INFO: Selected device matches probe's target identification info

El terminal de minicom debe de mostrar lo siguiente,

Welcome to minicom 2.10

OPTIONS: I18n 
Port /dev/ttyACM0, 08:34:37 [U]

Press CTRL-A Z for help on special keys
                                                        
*** Booting Zephyr OS build v4.4.0-8487-g17939cff6553 ***
DigiKey_Coffee_Cup Hello World! frdm_mcxn236/mcxn236                  
                                                       

Ahora construye el demo de parpadear el LED,

(venv) DigiKey_Coffee_Cup: west build -b frdm_mcxn236 samples/basic/blinky
...
...

[168/168] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       27580 B         1 MB      2.63%
             RAM:        4328 B       192 KB      2.20%
           SRAM1:           0 B        96 KB      0.00%
        IDT_LIST:           0 B        32 KB      0.00%

Entonces proceda a programarlo como se ve a continuación,

(venv) DigiKey_Coffee_Cup: west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner linkserver
RUNNER - gdb_port = 3333, semih port = 8888
LinkServer: /usr/local/LinkServer/LinkServer, version v26.6.137
INFO: Exact match for MCXN236:FRDM-MCXN236 found
INFO: Selected device MCXN236:FRDM-MCXN236
INFO: Selected probe #1 NTHJHYIGWSDV5 (MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146)
INFO: MCU-Link firmware update `check`: Probe ([NTHJHYIGWSDV5] [MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146]) is running a firmware version which is older than the included firmware version [3.172]
INFO: Selected device matches probe's target identification info


Luego, en el terminal de minicom se vera lo siguiente,

*** Booting Zephyr OS build v4.4.0-8487-g17939cff6553 ***
LED state: OFF
LED state: ON
LED state: OFF
LED state: ON
LED state: OFF
LED state: ON
LED state: OFF
LED state: ON

...
...



El siguiente video enseña el demo de parpadear en Zephyr del LED RGB en la plataforma NXP-MCXN236 Development Board,

Construya el demo de sincronización en Zephyr del thread en el kernel básico como sigue,

(venv) DigiKey_Coffee_Cup: zephyrproject/zephyr$ west build -b frdm_mcxn236 samples/synchronization

...
...
...

[168/168] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       28472 B         1 MB      2.72%
             RAM:        6824 B       192 KB      3.47%
           SRAM1:           0 B        96 KB      0.00%
        IDT_LIST:           0 B        32 KB      0.00%

mantenga el terminal minicom abierto y se procede a programar así,


/zephyrproject/zephyr$ west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner linkserver
RUNNER - gdb_port = 3333, semih port = 8888
LinkServer: /usr/local/LinkServer/LinkServer, version v26.6.137
INFO: Exact match for MCXN236:FRDM-MCXN236 found
INFO: Selected device MCXN236:FRDM-MCXN236
INFO: Selected probe #1 NTHJHYIGWSDV5 (MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146)
INFO: MCU-Link firmware update `check`: Probe ([NTHJHYIGWSDV5] [MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146]) is running a firmware version which is older than the included firmware version [3.172]
INFO: Selected device matches probe's target identification info

el terminal minicom debe de mostra la siguiente información relacionada los
threads en este demo desde la plataforma,

*** Booting Zephyr OS build v4.4.0-8487-g17939cff6553 ***                                                                                         
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!    
...
...


Esto concluye la demostración de agenda, comunicación, y coordinación de los threads en el tiempo en el kernel de Zephyr, ya que está operando como se espera.

La plataforma NXP-MCXN236 Development Board de bajo costo pero poderosa y versaátil basada en el artfacto MCX N236 con una memoria flash extera de 64 Mbit de Winbond.
La plataforma también contiene un circuito de alta velocidad USB, un acelerómetro, CAN PHY, codec de audio (DNP), sensor DMIC, LED RGB, botones, y un circuito de diagnóstico y prueba MCU-Link. Esta plataforma es compatible con los Arduino shield modules y los mikroBUS headers. La plataforma tambien tiene interfaces compatibles con camaras tales como la siguiente (si ya la tiene ya está obsoleta)

image

o como la siguiente que si está disponible en estos momentos en DigiKey,

image

y compatible con el módulo NXP low-cost LCD module como este disponible en DigiKey,

image

Esta plataforma de bajo costo pero poderosa y versátil NXP-MCXN236 Development Board. es compacta para desarrollo, para prototipos rápidos del MCX N23X MCUs para un sinnúmero de posibles aplicaciones de consumidores, aplicaciones IoT y está disponible en DigiKey. Mantengase sintonizado para más información relacionada a estas plataformas de NXP.

Que tenga un buen día.

This article is available in english here.

Este artículo esta disponible en inglés aqui.

1 Like