Pasos a seguir para instalar el Nordic nRF54L15-DK Zephyr Linux

Aquí están los pasos para instalar Zephyr en Linux para comenzar a desarrollar en el nRF54L15-DK kit por Nordic Semiconductor. Los siguientes comandos en el terminal muestran los pasos para instalarlo en su computadora,

sudo apt update

sudo apt upgrade

sudo apt install --no-install-recommends git cmake ninja-build gperf ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk xz-utils file make gcc libsdl2-dev libmagic1

python3 -m venv venv

source venv/bin/activate

(venv) pip install west

(venv) west init zephyrproject

(venv) cd zephyrproject

(venv) west update

(venv) west zephyr-export

(venv) west packages pip --install

(venv) cd zephyr

(venv) west sdk install

Luego se instala el programa nrfutil de este link para Linux (x64). Una vez es bajado, tiene que cambiar los permisos para ejecutarlo. (sudo chmod 777 nrfutil). Verifique la version y añadalo al “path” en su sistema. (.bashrc)

(venv) nrfutil self-upgrade

(venv) nrfutil install nrf5sdk-tools

(venv) sudo apt install libusb-1.0-0

(venv) nrfutil install sdk-manager

(venv) nrfutil install device

También por favor baje el siguiente programa JLink_Linux_V864_x86_64.deb e instálalo.

Conecte el nRF54L15-DK kit via el cable de USB a la computadora. Ahora estamos listos para construir y programar uno de los ejemplos de Zephyr dentro del directorio de zephyr,

(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/basic/blinky_pwm

Finalmente, baje el programa a el nRF54L15-DK kit,

(venv) /zephyr/zephyrproject/zephyr$ west flash

En este punto usted debe ver el LED 1 parpadeando a diferente ciclos de ancho de pulso,

Puede utilizar minicom o otro programa serial via el cable de USB a la computadora como se muestra a continuación,

*** Booting Zephyr OS build v4.2.0-2755-g258172992551 ***
PWM-based blinkyCalibrating for channel 0…[00:00:00.011,112]  
pwm_nrfx: Prescaler for period_cycles 16000000 not fou.[00:00:00.019,327]  pwm_nrfx: Prescaler for period_cycles 8000000 not foun.[00:00:00.027,465]  pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 200000.Done calibrating; maximum/minimum periods 250000000/7812500 nsec[00:00:00.043,638]  
pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 200000.
Using period 250000000[00:00:04.056,244]  
pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 100000.
Using period 125000000[00:00:08.068,788]  
pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 500000.
Using period 62500000…

Ya hemos completado la descripción de la instalación de Zephyr en Linux, contruido y programado el ejemplo que cambia el ancho de pulso modulado características aplicadas al LED1 en el nRF54L15-DK kit. Usted puede cambiar el código localizado aqui,

zephyrproject/zephyr/samples/basic/blinky_pwm/src/main.c

repita el proceso de compilación y programación demostrado anteriormente si hace cambios al código.

Otro ejemplo que podemos compilar y programar es un ejemplo que demuestra como se genera multiples “threads” usando :c:func:K_THREAD_DEFINE. Esto genera 3 “threads” independientes. Cada “thread” es entonces definido durante el proceso de compilación usando K_THREAD_DEFINE. Cada “thread” controla un LED individual. Estos LEDs localizados en el nRF54L15-DK kit, denominados led0 and led1, son controlados por funciones separadas,

  • blink0() controla el led0 y tiene un tiempo apagado de 100ms

  • blink1() controla el led1 y tiene un tiempo apagado de 1000ms

Cuando cualquiera de los dos “threads” activa su LED cambiando su estado, también pone información en un primero entra primero sale (FIFO) “buffer” :ref:FIFO <fifos_v2> identificando el “thread” correspondiente y cuantas veces lo ha cambiado de estado. El tercer “thread” utiliza :c:func:printk para imprimir la información añadida a el FIFO que es la consola del artefacto. Puede construir el ejemplo como sigue,

(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/basic/threads

Finalmente, baje el programa a el nRF54L15-DK kit

(venv) /zephyr/zephyrproject/zephyr$ west flash

Nuevamente, puede utilizar el programa minicom o otro programa similar para observar la salida por el cable USB como se muestra a continuación,

Welcome to minicom 2.9

OPTIONS: I18nPort /dev/ttyACM1, 00:16:08

Press CTRL-A Z for help on special keys

Toggled led0; counter=8
Toggled led0; counter=9
Toggled led1; counter=1
Toggled led0; counter=10
Toggled led0; counter=11
Toggled led0; counter=12
Toggled led0; counter=13
Toggled led0; counter=14
Toggled led0; counter=15
Toggled led0; counter=16
Toggled led0; counter=17
Toggled led0; counter=18
Toggled led0; counter=19
Toggled led1; counter=2
Toggled led0; counter=20
Toggled led0; counter=21
Toggled led0; counter=22
Toggled led0; counter=23
Toggled led0; counter=24
Toggled led0; counter=25
Toggled led0; counter=26
Toggled led0; counter=27
Toggled led0; counter=28
Toggled led0; counter=29

…

Aquí está el video correspondiente que muestra LED0 and LED1 corriendo en dos “threads” en Zephyr. Se puede notar que la frecuencia de LED0 es mas alta que el LED1 como previamente establecido,

Puedes cambiar el código definido aquí,

zephyrproject/zephyr/samples/basic/threads/src/main.c

y repetir el proceso de compilación y programación mostrado anteriormente.

A continuación, otro ejemplo que ilustra como un boton usa el puerto general de entrada “GPIO” con “interrupts”.

El ejemplo imprime un mensaje a la consola, cada vez que el boton numero 0 se presiona.

Welcome to minicom 2.9

OPTIONS: I18nPort /dev/ttyACM1, 00:27:52

Press CTRL-A Z for help on special keys

Button pressed at 673320
Button pressed at 1464286
Button pressed at 2446485
Button pressed at 6736908
Button pressed at 7425903
Button pressed at 8269811
Button pressed at 8398743
Button pressed at 8606173
Button pressed at 8725072
Button pressed at 9167836
Button pressed at 10183197
Button pressed at 10795567
Button pressed at 11698303

El ejemplo previo, se compila y se programa en el terminal como se muestra a continuación,

(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/basic/button

(venv) /zephyr/zephyrproject/zephyr$ west flash

Puedes cambiar el código definido aquí,

zephyrproject/zephyr/samples/basic/button/src/main.c

y repetir el proceso de compilación y programación mostrado anteriormente.

Finalmente, existe un ejemplo que ilustra como dinámicamente la potencia de salida se controla via el “LL” de el protocolo denominado “Bluetooth LE” via el Zephyr con los comandos “HCI VS”. La aplicación implementa un anuncio periferal variando la potencia de salida de radio frequencia. La potencia inicial en los primeros 5 segundos definido por el Kconfig la potencia de transmisión. Entonces, se varia la potencia de salida de transmisión del que anuncia y repetidamente descendiendo en un patron de escalera desde -4 dBm hasta -30 dBm donde la potencia de transmisión disminuye cada 5 segundos. Si la conección es existosa, el nivel de senal se monitorea y la potencia de transmisión modulada del artefacto periferal por coneción se ajusta correspondientemente, de forma que la energia se ahorra, dependiendo de cuan potente es el nivel de conección de la señal. El periferal implementa un sencillo “GATT” exponiendo el servicio “HR” notificando a las conneciones centrales de un “dummy” “HR” cada 2 segundos. Aqui a continuación se muestra como se compila y como se programa,

(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/bluetooth/hci_pwr_ctrl/

(venv) /zephyr/zephyrproject/zephyr$  west flash

El nRF54L15-DK kit muestra como la potencia de salida se ajusta en forma dinámica en el siguiente terminal de minicom,

Welcome to minicom 2.9

OPTIONS: I18nPort /dev/ttyACM1, 00:42:21

Press CTRL-A Z for help on special keys

*** Booting Zephyr OS build v4.2.0-2763-g5af3adf66fb3 ***
Starting Dynamic Tx Power Beacon Demo
[00:00:00.002,504]  
bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
[00:00:00.002,517]  bt_hci_core: HW Variant: nRF54Lx (0x0005)
[00:00:00.002,529]  bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 4.2 Build 99
[00:00:00.002,748]  bt_hci_core: HCI transport: Controller
[00:00:00.002,797]  bt_hci_core: Identity: F2:57:B1:05:95:C5 (random)[00:00:00.002,811]  bt_hci_core: HCI: version 5.4 (0x0d) revision 0x0000, manufacturer 0x05f1
[00:00:00.002,824]  bt_hci_core: LMP: version 5.4 (0x0d) subver 0xffff
Bluetooth initialized
Dynamic Tx power Beacon started
Get Tx power level ->-> default 
TXP = 24
Set Tx power level to 4
Actual Tx Power: 4
Get Tx power level → TXP = 4
Set Tx power level to 0
Actual Tx Power: 0
Get Tx power level → TXP = 0
Set Tx power level to -3
Actual Tx Power: -3
Get Tx power level → TXP = -3
Set Tx power level to -8
Actual Tx Power: -8

usted puede cambiar el código para este control dinámico de potencia de radio frequencia en el código aquí,

zephyrproject/zephyr/samples/samples/bluetooth/hci_pwr_ctrl/src/main.c

Esperamos que este resumen, provea una idea del proceso de instalación de Zephyr y algunas de las actividades que incorpora el nRF54L15-DK kit,

Que tenga un buen dia.

This post is also available in english here.

Este post esta disponible en inglés aqui.

Este artículo se encuentra en idioma japones aquí.

1 Like