Actualización remota de firmware Arduino Nano

8

Estoy trabajando en Arduino Nano (32Kb de memoria flash de los cuales 2Kb utilizados por el gestor de arranque, 2Kb SRAM, 1Kb EEPROM) .

El microcontrolador toma la entrada de un dispositivo eléctrico a través del módulo RS485 y publica los datos leídos en un servidor remoto utilizando el módulo GPRS A6 . Se supone que el producto interactúa con el servidor remoto y publica datos a intervalos.

He completado la parte de integración y el dispositivo funciona bien, recopilando datos y publicando en el servidor (aproximadamente 10-15 km de distancia). El único desafío al que me enfrento es que si hay 100 dispositivos de este tipo y necesito actualizar el firmware, utilizando el servidor remoto (o cualquier otro mecanismo adecuado), ¿cómo debo proceder con él?

He leído muchas publicaciones que sugieren usar otro Arduino como ISP, este podría ser mi último enfoque (ya que aumentaría el costo final del producto).

La actualización de firmware por aire aún no está clara como en la comunidad de Stack Exchange para microcontroladores de gama baja. Cualquier discusión puede ser de gran ayuda para muchos.

Ashish K
fuente
Describa "ubicación remota", 10 metros, 1 km, 10 km de distancia para el usuario.
Bence Kaulics
@BenceKaulics estamos utilizando el módulo GPRS para enviar solicitudes al microcontrolador que está a unos 10 km de distancia.
Ashish K
3
Debe describir su caso de uso con mayor claridad, incluida la pila de software. Eche un vistazo a las otras preguntas de actualizaciones por aire .
Sean Houlihane
¿Es este un nuevo desarrollo, o estás tratando de adaptar un producto existente?
Sean Houlihane
@ SeanHoulihane Es un nuevo desarrollo. Podría elegir cualquier microcontrolador (el costo es el único límite) que puede enviar datos a un servidor en una ubicación remota (10 km). He utilizado un módulo GPRS para enviar datos y el único desafío al que me enfrento actualmente es cómo actualizar el firmware de forma remota.
Ashish K

Respuestas:

9

Respuesta corta: es posible.

Respuesta larga: es complicado. Es por eso que hay muchas implementaciones muy malas por ahí.

Como mínimo, tiene dos pasos en cualquier proceso de actualización remota / inalámbrica.

  1. Transmitiendo firmware
  2. Instalando firmware.

Por supuesto, este es el mínimo absoluto absoluto. Si está trabajando en iteraciones, también es un primer paso muy válido. Si tiene más de un dispositivo, deberá poder asociar el firmware correcto al dispositivo correcto . Si desea reducir la posibilidad de bloquear su dispositivo, querrá una forma de verificar el estado de su dispositivo antes y después de la actualización , también querrá asegurar el transporte y hacer que el transporte sea lo más confiable posible y, naturalmente, tener una estrategia alternativa en caso de error de actualización .

Son cinco pasos más que lo llevan a un producto confiable. Existen mejores prácticas para estas cosas, pero dependen del entorno de su proyecto. Tal vez sea algo barato y una tasa de falla del 5% en las actualizaciones está bien, tal vez sea un marcapasos e incluso un error en total es inaceptable porque conduce a un escenario fatal. Tendrá que encontrar soluciones a esos conceptos básicos que se adaptan a su producto.

Además, hay docenas de cosas diferentes a considerar. ¿Tendrás clientes? ¿Tienes que informarles? ¿Tienen algo que decir sobre el tiempo de actualización / instalación? ¿Sus dispositivos están en diferentes países? ¿Se aplican restricciones legales? ¿Se aplican las normas normativas? ¿Cuántos dispositivos estás actualizando? 1? ¿Una docena? Cientos? Millones?

Si actualiza cinco dispositivos, el proceso puede ser muy hablador. Si está actualizando millones, eso podría resultar muy costoso. Y sí, eso afecta lo que enumeré anteriormente como paso uno, transmitir el firmware. Tal vez cree un marcapasos y un costo de proceso de cientos de mensajes por actualización está bien considerando la alternativa.

Esas son solo las preguntas que escribí en dos minutos, por lo que esta lista ciertamente no es exhaustiva. Mi punto es que sin información sobre el escenario, realmente no podemos ayudarlo adecuadamente.

Helmar
fuente
Muchas gracias @Helmar, actualizaré la pregunta con el mayor detalle posible. Para los microcontroladores que no admiten un sistema operativo que lo ejecuta, la actualización remota del firmware sigue siendo vaga y una buena solución clara no solo me ayudaría a mí, sino a muchos que trabajan en placas de desarrollo de gama baja. También le pediría que lo verifique después de la actualización.
Ashish K
1
Posible, siempre y cuando la plataforma permita que el flash se divida en al menos 3 regiones (o si desea ejecutar desde RAM mientras vuelve a flashear y tiene muchos repuestos o un JTAG desplegable de forma remota).
Sean Houlihane
@SeanHoulihane, la serie ATmega no puede ejecutarse desde RAM.
Chris Stratton