ATmega328P el parpadeo del firmware se ha interrumpido: ¿se puede reparar?

3

Estoy trabajando en un PCB con un ATmega328P. Utilizo un conector Pogo porque tenemos que programar y probar la PCB en el exterior.

Programo con usbTiny , ( mosi/miso/rest/clk/power )

De todos modos, muchas veces durante la programación me muevo un poco, lo que altera los contactos de los pines de Pogo y aparece un error de verificación. Luego empiezo de nuevo y lo destello con éxito.

Pero a veces, después de un movimiento y una falta de coincidencia en la verificación, ya no puedo mostrarlo, como ahora.

me sale:

avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

An error occurred while uploading the sketch

Me cansé mucho de la fabricación una y otra vez :( y estoy seguro de que el chip aún está bien. Esto probablemente vuelva a suceder.

He leído que hay formas de guardarlo, como la programación en serie o el oscilador.

¿Cómo puedo hacer esto exactamente con la serie?

VERBOS:

       Using Port                    : usb
         Using Programmer              : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: 020:013
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : USBtiny
         Description     : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: initialization failed, rc=-1
    
pregunta LindaZ

1 respuesta

4

Parece probable que haya cambiado inadvertidamente los fusibles a uno de:

  • Deshabilitar / RESET
  • Velocidad de reloj diferente o fuente de reloj
  • Deshabilitar la programación SPI

Para recuperar esto, necesita usar un programador de "alto voltaje" que involucre mantener / RESET a + 12V mientras que secuencias específicas de comandos se envían a través de la mayoría de los otros pines. Esto puede ser difícil con su arreglo de "pogo pin".

Incluso puede ser imposible si poner 12V en / RESET daña otros circuitos (p. ej., si tiene una resistencia pull-up que sangraría 12V en la línea de 5V).

Tengo una publicación sobre el uso de otro Arduino para hacer programación de alto voltaje aquí .

Puedeverquehaymuchoscablesypuedequenoseaprácticohaceresoconlospogopines.

TambiénpuedeutilizarunaplacaAVRDragonparaproporcionarlasseñalesylospin-outsnecesarios.

Sinembargo,estorequeriríaqueretireselchipylocoloquesdentrodelprogramador,oquepasesunos18cablesalaplaca,similaralasoluciónanterior.

Lesugiero,mientrasprueba,quesueldeenuncabezalde6pinesadecuadopararealizarsuprogramaciónSPI.Esoeliminarálaspatillasdepogoyledaráuncontactoconfiableparalaprogramación.Unavezquelohayasdepurado,losmodelosdeproducciónnonecesitaráneso.

  

¿Quépasaconelosciladorexterno?

Podríausarmi boceto del detector de chips que ayudaría a mostrar si el chip no responde, o simplemente ha cambiado algunos fusibles (por ejemplo, la fuente del reloj).

Ejemplo de salida del boceto:

Atmega chip detector.
Entered programming mode OK.
Signature = 1E 95 0F 
Processor = ATmega328P
Flash memory size = 32768
LFuse = FF 
HFuse = DE 
EFuse = FD 
Lock byte = CF 
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 11 24 84 B7 14 BE 81 FF E6 D0 85 E0 80 93 81 00 
7E10: 82 E0 80 93 C0 00 88 E1 80 93 C1 00 86 E0 80 93 
...
7FE0: E7 DF 80 32 09 F0 F7 DF 84 E1 DA CF 1F 93 18 2F 
7FF0: DF DF 11 50 E9 F7 F4 DF 1F 91 08 95 FF FF FF FF 

MD5 sum of bootloader = 0F 02 31 72 95 C8 F7 FD 1B B7 07 17 85 A5 66 87 

First 256 bytes of program memory:

0: 0C 94 35 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 
10: 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 
20: 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 
30: 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 
40: 0C 94 80 03 0C 94 5D 00 0C 94 C9 00 0C 94 5D 00 
50: 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 
60: 0C 94 5D 00 0C 94 5D 00 E5 01 11 24 1F BE CF EF 
70: D8 E0 DE BF CD BF 11 E0 A0 E0 B1 E0 E0 E9 F8 E0 
80: 02 C0 05 90 0D 92 A2 32 B1 07 D9 F7 11 E0 A2 E2 
90: B1 E0 01 C0 1D 92 A2 3C B1 07 E1 F7 10 E0 CA E6 
A0: D0 E0 04 C0 22 97 FE 01 0E 94 42 04 C8 36 D1 07 
B0: C9 F7 0E 94 1F 02 0C 94 46 04 0C 94 00 00 08 95 
C0: FF 92 0F 93 1F 93 06 EA 11 E0 C8 01 40 E0 52 EC 
D0: 61 E0 70 E0 0E 94 FA 00 C8 01 0E 94 44 03 C8 01 
E0: 60 E0 71 E0 0E 94 75 03 91 E2 F9 2E E0 E0 F0 E0 
F0: F0 92 57 00 E4 91 C8 01 6E 2F 40 E1 50 E0 0E 94 

Fuente del boceto en GitHub - en la carpeta "Atmega_Board_Detector".

    
respondido por el Nick Gammon

Lea otras preguntas en las etiquetas