¿Cuáles son algunas de las razones por las que mi atmega32u4 pierde el programa cuando está desconectado de la alimentación?

2

Tengo dos placas diferentes que ejecutan el mismo código con el mismo chip (ATMega32u4).

Resumen de problemas

El problema es que la 2ª placa parece perder el programa que se ha flasheado en el chip si pierde energía.

Ambas tarjetas tienen mini conectores USB y obtienen alimentación del USB y ambas funcionan a 5v.

Primera Junta (de trabajo)

La primera placa es un SparkFun Pro Micro "oficial".

Segundotablero(quefalla)

ElsegundotableroesunaimitacióndeesetableroquecompréenAmazon.Puedesverlosdetallesdeesetableroen: placa de eliminación de Micro Pro en Amazon

NOTA : no espero que nadie examine esas tablas a la perfección y me diga la razón exacta del motivo. Solo estoy agregando esa información en caso de que alguien note algo completamente diferente que indique el problema.

Programando los tableros

Cuando programo las tarjetas, configuro el IDE de Arduino en la tarjeta Pro Micro a 5v y 16Mhz, y el programa parpadea funciona igualmente bien en ambas tarjetas. Luego corro la tabla de imitación y funciona perfectamente. Es un pequeño programa que recibe datos de bluetooth y muestra los datos en otros lugares.

Pérdida de poder, pérdida de programa flasheado

En el primer tablero, lo programé una vez hace unas semanas y funciona después de estar apagado durante días. Obviamente, esa es la forma en que se supone que funciona.

En la segunda placa, si pierde potencia, parece que pierde el programa.

¿Cosas comunes para verificar?

Me pregunto si hay algunas cosas comunes que puedo verificar para determinar por qué el programa parece haberse perdido.

¿Hay alguna cosa obvia que me esté perdiendo? ¿Es posible que el fabricante no haya conectado algo correctamente, lo que causaría esto? Quiero decir, ¿este problema es común en la fabricación de tableros? Tengo 5 de estas tablas de imitación y he probado dos hasta el momento y ambas parecen tener el problema.

Cualquier ayuda es muy apreciada.

Editar: Información adicional

Encontré la siguiente información en una revisión en Amazon:

  

Como algunos otros críticos, mi Pro Micro parecía estar perdiendo el boceto   cuando se desconecta de la alimentación. Sin embargo, ahora he descubierto que la   Pro Micro no está perdiendo realmente el boceto, hay una diferente   problema en conjunto. Cuando el Pro Micro se vuelve a conectar a la alimentación, por   por alguna razón el gestor de arranque no está ejecutando el boceto. Si luego haces un   reinicio suave conectando el pin RST a tierra, al reiniciar el   el gestor de arranque comienza a ejecutar el boceto con éxito.

     

Por lo tanto, se puede solucionar el problema conectando un botón al pin RST   y presionando el botón cada vez que conecte el Pro Micro para que   Se reiniciará y se ejecutará el boceto. Es molesto que el problema exista,   pero al menos es viable.

  1. ¿Alguien puede explicar este fenómeno?
  2. ¿Podría haber otra solución alternativa que sea una solución automatizada, en lugar de presionar un botón cada vez?
pregunta raddevus

3 respuestas

3
  

¿Alguien puede explicar este fenómeno?

Sí, el gestor de arranque instalado simplemente espera un nuevo boceto de forma indefinida, sin tiempo de espera e ingresando al existente después de un período determinado.

  

¿Podría haber otra solución alternativa que sea una solución automatizada, en lugar de presionar un botón cada vez?

Instala un nuevo gestor de arranque. Tengo un boceto descrito en mi página sobre la grabación de cargadores de arranque que instala el cargador de arranque Leonardo. Creo que el cargador de arranque Pro Micro es similar o idéntico (es el mismo chip después de todo).

Solo necesita una segunda tarjeta (su otra Micro haría) para usar en la programación. El cableado para un Leonardo se describe en mi página; sin embargo, consulte a continuación el Micro. El código se encuentra en bocetos de Arduino en GitHub , en particular en el directorio "Atmega_Board_Programmer".

Debe conectar las dos placas juntas de la siguiente manera:

SCK  <--> SCK  (pin labelled 15 on the Pro Micro board) *
MISO <--> MISO (pin labelled 14 on the Pro Micro board)
MOSI <--> MOSI (pin labelled 16 on the Pro Micro board)
VCC  <--> VCC
Gnd  <--> Gnd
D10  <--> Reset (pin labelled 10 on the programming board to Reset on the
                 board to be programmed)

* Hasta donde puedo ver por su foto y el esquema

Posiblemente (probablemente) después de instalar el gestor de arranque, la placa se identificará en su PC como Leonardo y no como Micro, pero eso no importa ya que es el mismo chip subyacente.

    
respondido por el Nick Gammon
3

Bueno, las MCU atmega están basadas en flash, por lo que nunca deben "perder el programa" sin un ciclo de borrado explícito. Sin embargo, es posible que algo impida que el chip inicie su programa. ¿Ha intentado leer el programa almacenado en el chip después de apagar y encender el tablero y compararlo con el original? Si coincide, esto descartará que el programa se "pierda". Eso deja un par de posibilidades. Uno es un problema con el circuito de reinicio que evita que el chip salga del reinicio hasta que se conecte el cable USB y se inicie el software de programación. Otro problema posible es que el chip tiene un mal cargador de arranque instalado que no inicia automáticamente el código de usuario. Esa podría ser una solución bastante simple, simplemente instale el cargador de arranque correcto utilizando un programador ISP u otra placa que esté configurada para actuar como un programador ISP. Otra posibilidad es que el chip en sí sea una imitación ... en cuyo caso todas las apuestas están apagadas.

    
respondido por el alex.forencich
0

Tengo un programador de usbasp, así que después de leer la excelente respuesta de @ nick-gammon y sonaba como si solo tuviera que instalar un nuevo cargador de arranque en mis tablas de imitación, quería probarlo.

No sabía exactamente lo que tenía que hacer, así que decidí que debía ir y hacerlo rápidamente.

Al principio, navegué por el excelente sitio web de @ nick-gammon y encontré el gestor de arranque leonardo, pero me di cuenta de que no era un archivo .hex directamente, así que cuando lo probé y obtuve un error, pensé que no lo era. No voy a trabajar para mi configuración.

Configuración de hardware

En primer lugar, tengo un conector de 10 pines en mi programador usbasp que se parece a lo siguiente:

Asíescomoseveelcableadodemihardwareenlatarjetadeimitación.Esunaimagenfea,peroalmenoslaheetiquetado.

Unpardecosasatenerencuentaesque@nick-gammonmencionóqueD10seríaelreinicio,peroenmicasonoloes.Ensulugar,puedeverquemilíneaderestablecimientoseconectóalpinRSTenlaplacaqueestájustoporencimadelVCC.Ysí,loscoloresdeloscablessonextremadamenteconfusosparaVCCyRST,perolasetiquetassoncorrectas.

ObteniendoelarchivohexadecimaldelcargadordearranqueComomencionéenmipreguntaoriginal,queríaqueestastablasdeimitaciónfuncionarancomomiSparkFunProMicrooriginal(máscara).Reviséelsitiodesparkfunyproporcionaronelgestordearranquequeusaron.Esoesmuybonitoytuvesuertedepoderconseguirlo.Puedeobtenerloen: enlace y luego haga clic en Archivos de Arduino Addon . Obtendrá un archivo zip y luego podrá descomprimirlo y buscar en la carpeta \ sparkfun \ avr \ bootloaders \ caterina \ y encontrará un archivo .hex llamado: caterina-promicro16.hex. Estaba adivinando que este sería el archivo del cargador de arranque.

Parece que:

FlasheodelcargadordearranqueusandoAVRDude

Despuésdetodoeso,fuialalíneadecomandosyencendíAVRDude.Ledielsiguientecomando(asegurándomedequetieneelarchivocaterina-promicro16.hexdisponibleenelmismodirectorio,porsupuesto).

avrdude-cusbasp-pm32u4-Uflash:w:Caterina-promicro16.hex

Sitodoestácableadocorrectamente,verálosiguientecuandoelcargadordearranqueseinstaleensuATMega32u4.

Cuando vi todo eso, estaba mentalizado! Pero, todavía no podía estar seguro de que esto iba a resolver mi problema. Para hacer eso tuve que abrir Arduino IDE y flashear en mi programa original.

Seguí adelante e hice eso y probé el programa. Funcionó.

Desconecta y vuelve a intentarlo

Después de eso, tuve que desenchufar la placa de imitación y ver si perdería el programa, o en realidad si simplemente lo cargaría como debería. Lo probé y funcionó muy bien, así que lo desenchufé varias veces y funcionó cada vez. Mi programa siempre se está ejecutando ahora como esperaba.

También, compré 5 de estas tarjetas de imitación y las estoy cargando, dos hasta el momento y ambas funcionan fantásticamente.

Gracias por toda tu ayuda @ nick-gammon.

    
respondido por el raddevus

Lea otras preguntas en las etiquetas