Reinstalando firmware en una radiosonda: RS41 de Vaisala

Debe leer previamente estas dos entradas para poder seguir este proceso:

Así estaremos en un punto que:
  • Conoceremos el hardware de nuestra sonda, concretamente los modelos de: placa,  procesador y chip de radio.
  • Tendremos instalados en nuestro ordenador y conoceremos el funcionamiento de los programas openocd y STM32Cube Programming 
  • Dispondremos de un dispositivo  ST-Link V2 y lo tendremos  cableado correctamente con  la RS41
  • Tendremos desbloqueada la sonda RS41 que queremos reprogramar frente a borrado y  escritura 
Vamos a proceder a instalar  elfirmware RS41-NFW que utiliza Arduino IDE para su compilación, que es posible que ya haya usado en algun proyecto con ESP32, y para la carga del firmware usaremos openOCD o STM32 Cube Programing

Concretamente vamos a instalar la versión: 
  • "RS41-NFW v65, GPL-3.0 Franek Lada (nevvman, SP5FRA)" 


Siga las instrucciones del proyecto RS41-NFM, aquí solamente se comentan por encima, o se señala donde se encontraron dificaultades


Descargue librerias del proyecto

Descargue desde  https://github.com/Nevvman18/rs41-nfw los fuentes   y  descomprima el fichero ZIP. Las mas importantes son las carpetas o directorios_
  • fw/arduino-ide_variant-files/ de la cual extraeremos una definiciónd e placas 
  • rs41-nfw_sonde-firmware/ donde se encuentra el archivo .ino que finalmente compilaremos apra obtener las binarias apra cargar (.bin)

Añadir las placas STM32 

En preferencias del Arduino IDE incluir la siguiente librería https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

En Gestor de placas cargar STM32 y cuando acabe rearrancar ArduinoIDE




Borrar cache

Compruebe si existe un fichero cache para las Arduino IDE y si existe bórrelo (para macOS lo encontramos en ~/Library/Application Support/arduino-ide )


Cambiar carpeta por defecto por la del proyecto

Localice la librería 
Library/Arduino15/packages/STMicroelectronics/hardware/stm32/x.x.x/variants/STM32L4xx

Borre 
"L412RB(I-T)xP"  con  rm -rf "L412RB(I-T)xP"

Copie la carpeta que hemos descargado de github, si la hemos dejado en el raiz para macOS se ahce  cp -r ~/L412RB\(I-T\)xP 

Modifique el fichero boards.txt de la versión (en nuestro caso 2.12.0) añadiendo
# Generic L412RBTxP
GenL4.menu.pnum.GENERIC_L412RBTXP=Generic L412RBTxP
GenL4.menu.pnum.GENERIC_L412RBTXP.upload.maximum_size=131072
GenL4.menu.pnum.GENERIC_L412RBTXP.upload.maximum_data_size=40960
GenL4.menu.pnum.GENERIC_L412RBTXP.build.board=GENERIC_L412RBTXP
GenL4.menu.pnum.GENERIC_L412RBTXP.build.product_line=STM32L412xx
GenL4.menu.pnum.GENERIC_L412RBTXP.build.variant=STM32L4xx/L412RB(I-T)xP
GenL4.menu.pnum.GENERIC_L412RBTXP.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32L4xx/STM32L412.svd


Selección de la placa en Arduino IDE.
  • Para versiones anteriores (p. ej., RSM412):
    • Selecciona la serie STM32F1 genérica en Herramientas (IDE), luego ve a Herramientas (IDE) -> Número de pieza de la placa: y selecciona la placa F100C8Tx genérica.
  • Para versiones más recientes (p. ej., RSM414, RSM424):
    • Selecciona la serie STM32L4 genérica en Herramientas (IDE), luego ve a Herramientas (IDE) -> Número de pieza de la placa: y selecciona la placa L412RBTxP genérica recién instalada. ¿No la ves? Asegúrate de haber seguido la guía anterior.
  • Selecciona el programador (Upload) adecuado: Herramientas (IDE) -> Programador: -> STMicroelectronics ST-LINK.
  • Selecciona la configuración de optimización del compilador como "Más pequeña" Smallest  (-Os por defecto). 
Modificar el fichero .ino

//===== Device revision definitions
/* CHANGE-ME! SELECT YOUR BOARD REVISION BY UNCOMMENTING THE RIGHT DEFINITION BELOW (model can be found written on the PCB at the bottom part, see compilation manual for more info)*/
 
#define RSM4x4 // New PCB versions, RSM4x4 AND RSM4x5 (based on MCU STM32L412RBT6 LQFP64)
// #define RSM4x2  // Old PCB versions, RSM4x2 and RSM4x1 (based on MCU STM32F100C8T6B LQFP48)

Compilar como "Exportar binario compilado" desde IDE 
Nos dará un error del tipo , que nos dice que tras compilar no puede cargarlo, no hay problema
getopt: illegal option -- a
Terminating...
Failed uploading: uploading error: exit status 1

Copiar el binario que se encuentra en la subcarpeta build del directorio donde hemos estado compilando con  openocd

openocd -f interface/stlink.cfg -c "transport select hla_swd" -c "set CPUTAPID 0x2ba01477" -f target/stm32l4x.cfg -c "init; halt; program RS41-NFW-Arduino.ino.bin 0x08000000 verify reset exit"

O mucho mas facil desde

STC32cubic Programmer

En STC32cubic programmer la secuencia de carga del firmware es la siguiente

13:42:27 : Opening and parsing file: rs41-nfw_sonde-firmware.ino.bin 13:42:27 : Memory Programming ... 13:42:27 : File : rs41-nfw_sonde-firmware.ino.bin 13:42:27 : Size : 70.11 KB 13:42:27 : Address : 0x08000000 13:42:27 : Erasing memory corresponding to segment 0: 13:42:27 : Erasing internal memory sectors [0 35] 13:42:28 : Download in Progress: 13:42:30 : File download complete 13:42:30 : Time elapsed during download operation: 00:00:02.447 13:42:30 : Verifying... 13:42:30 : Read progress: 13:42:30 : Time elapsed during verifying operation: 00:00:00.463 13:42:30 : Download verified successfully 13:42:30 : RUNNING Program ... 13:42:30 : Address: : 0x08000000 13:42:30 : Application is running, Please Hold on... 13:42:30 : Start operation achieved successfully

PRUEBAS

En la primera parte del fichero  .ino vienen las definiciones generales y las especi
íficas de los difersos modos:
  • PIP
  • CW
  • APRS
  • RTTY
  • FOX
  • HORUS V2 
  • HORUS V3
En todos ellos puede ponerlos activos (true) o inactivos (false)


SECUENCIA DE ARRANQUE

LED DOBLE DE LA PLACA

Secuencia de arranque correcta
  • rojo
  • rojo y verde (naranja)
  • rojo y verde (naranja) intermitente 2 por segundo
  • rafaga de 5 verdes => Fin arranque
  • rojo y verde (naranja) intermitente 2 seguidos
  • verde intermitente
  • verde fijo => OK
Secuencia de arranque erronea por baterias bajas
  • rojo
  • naranja

Significado DEL LED DE LA PLACA
Durante el arranque:
- Rojo parpadea 3 veces: condiciones incorrectas para la calibración de humedad cero;
se sale de la calibración.
- Rojo parpadea 5 veces: calibración de humedad cero cancelada debido a un error en el brazo del sensor.
- Rojo fijo: inicialización del hardware.
- Naranja fijo: inicialización del brazo del sensor y del circuito de calefacción,
y también inicialización parcial del GPS.
- Naranja intermitente breve: calibración en curso, ya sea reacondicionamiento,
corrección de temperatura o comprobación de humedad cero.
- Verde parpadea. 5 veces: configuración del firmware completada, ingreso al programa principal

Durante el funcionamiento:
- Rojo fijo: error importante, como error en el brazo del sensor,
error de calibración inicial del sensor, error de conexión RPM411 (si está configurado).
- Naranja fijo: advertencia, como falta de señal GPS o voltaje
de la batería por debajo de 'vBatWarnValue'.
- Naranja intermitente: modo de rendimiento GPS mejorado habilitado y la sonda sigue buscando satélites.
- Verde intermitente: modo de rendimiento GPS mejorado habilitado y
la sonda ha encontrado varios satélites y pronto volverá al modo listo para volar.

La información del LED para el caso del GPS depende de la opción de gpsOprationmode del .ino
  • 0 - Totalmente desactivado (uso estacionario, como en una estación meteorológica;
  • las coordenadas estacionarias se pueden especificar en gpsLat-gpsLong)
  • 1 - Por defecto, siempre activado;
  • 2 - Ahorro de energía estándar en posición estable (solo RSM4x2;
  • función antigua que reduce el consumo cuando la señal GPS es fuerte;
  • vuelve automáticamente al máximo rendimiento cuando es necesario).
  • 3 - Gestión inteligente de GPS: algoritmo disponible solo para placas
  • RSM4x4. Este algoritmo, junto con las funciones Super-S, PSMCT, ITFM,
  • constelaciones y mensajes GNS del GPS M10 u-blox, permite una mejora
  • considerable en el consumo de energía y la resistencia a interferencias.
- Verde fijo: todos los sistemas funcionan correctamente y sin errores; la sonda está lista para ser lanzada. LED DEL GPS (bajo el chip)

Verde intermitente (Funciona del GPS)


MODOS

comun a todos
// TX power, 0 = -1dBm (~0.8mW), 1 = 2dBm (~1.6mW),
2 = 5dBm (~3 mW), 3 = 8dBm (~6 mW), 4 = 11dBm (~12 mW),
5 = 14dBm (25 mW), 6 = 17dBm (50 mW), 7 = 20dBm (100 mW)

PIP

Emitir un pitido de forma intermitente

// Pip:
bool pipEnable = false; // Enable pip tx mode (carrier)
constexpr float pipFrequencyMhz = 432.7; // Pip tx frequency
constexpr uint16_t pipLengthMs = 100; // Pip signal length in ms
constexpr uint16_t pipRepeat = 3; // Pip signal repeat count in 1 transmit window
constexpr int8_t pipRadioPower = 7;

CW

Transmite en Morse

morseUnitTime = 40 es una velocidad muy alta

Valor (ms)Velocidad (WPM)Sensación
4030Muy rápido (Nivel experto)
6020Rápido pero legible
8015Velocidad ideal para pruebas
10012Lento y muy claro
// Morse: // bool morseEnable = true; // Enable morse tx mode bool morseEnable = false; // disable morse tx mode constexpr float morseFrequencyMhz = 434.6; // Morse tx frequency constexpr uint16_t morseUnitTime = 40; // Morse unit time constexpr int8_t morseRadioPower = 7;



Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

No hay comentarios:

Publicar un comentario

Reinstalando firmware en una radiosonda: RS41 de Vaisala

Debe leer previamente estas dos entradas para poder seguir este proceso: 3R de radiosondas: RS41 de Vaisala ST-Link STM8/STM32 v2 Así estare...