¿Por qué este programa PIC18LF1220 solo dos veces y luego falla la programación?

1

Tengo un PIC18LF1220 en un paquete SSOP de 20 pines que se ejecuta a 4MHz desde una fuente de reloj interna y 3.3 voltios. He soldado el microcontrolador a una PCB con un plano de tierra en la capa inferior y la foto está en la capa superior. Estoy usando dos capacitores de bypass cerámicos de 0.1µF uno para VDD & VSS y uno para AVdd & Par de avss También tengo una resistencia pullup de 10kOhm en el pin MCLR. Tengo el encabezado de programación en la placa a unos 3 cm de la imagen y un par de la primera programación en esta placa prototipo funcionó bien, pero después de estas primeras programaciones, ICD3 dice lo siguiente:

Programming...
program memory
Address: 0 Expected Value: 59 Received Value: 0
Failed to program device

Este es el tercer chip pic a bordo que se niega a volver a programar. He tenido que cambiar el chip cada dos nuevos prototipos porque el mismo problema siempre ha ocurrido después de dos ejecuciones de programación. ¿Por qué la imagen se niega a reprogramarse después de dos programaciones anteriores que funcionaron bien? Hice que el programa anterior se ejecutara toda la noche para probar que funcionó correctamente (solo un simple programa de parpadeo) y ahora simplemente no hará nada, ya que parece que el borrado funcionó, pero no se cargó ningún código nuevo (al menos correctamente). Este comportamiento parece ser muy consistente ya que todos estos tres PIC han muerto después de intentar programarlos por tercera vez. Abajo está el mensaje completo dado por ICD3.

Connecting to MPLAB ICD 3...

Currently loaded firmware on ICD 3
Firmware Suite Version.....01.43.35
Firmware type..............PIC18F

Programmer to target power is enabled - VDD = 3,250000 volts.
Target device PIC18LF1220 found.
Device ID Revision = 7

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x74f
configuration memory

Device Erased...

Programming...
program memory
Address: 0 Expected Value: 59 Received Value: 0
Failed to program device

Podría ser que este lote en particular que tengo tenga algunos problemas de memoria flash (he verificado este problema en tres fotografías una tras otra). Todos los chips que tengo aquí son todos de silicona de revisión 7 por el ICD3. A continuación se muestran los bits de configuración que he estado usando si pudieran tener algo que ver con el problema (dudo mucho que causen este tipo de problema).

// CONFIG1H
#pragma config OSC = INTIO2     // Oscillator Selection bits (Internal RC oscillator, port function on RA6 and port function on RA7)
#pragma config FSCM = OFF        // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
#pragma config IESO = ON        // Internal External Switchover bit (Internal External Switchover mode enabled)

// CONFIG2L
#pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOR = OFF         // Brown-out Reset Enable bit (Brown-out Reset enabled)
// BORV = No Setting

// CONFIG2H
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled  (control is placed on the SWDTEN bit))
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config MCLRE = ON       // MCLR Pin Enable bit (MCLR pin enabled, RA5 input pin disabled)

// CONFIG4L
#pragma config STVR = ON        // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF        // Low-Voltage ICSP Enable bit (Low-Voltage ICSP disabled)

// CONFIG5L
#pragma config CP0 = OFF         // Code Protection bit (Block 0 (00200-0007FFh) code-protected)
#pragma config CP1 = OFF         // Code Protection bit (Block 1 (000800-000FFFh) code-protected)

// CONFIG5H
#pragma config CPB = ON         // Boot Block Code Protection bit (Boot Block (000000-0001FFh) code-protected)
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)

// CONFIG6L
#pragma config WRT0 = OFF       // Write Protection bit (Block 0 (00200-0007FFh) not write-protected)
#pragma config WRT1 = OFF       // Write Protection bit (Block 1 (000800-000FFFh) not write-protected)

// CONFIG6H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0001FFh) not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)

// CONFIG7L
#pragma config EBTR0 = OFF      // Table Read Protection bit (Block 0 (00200-0007FFh) not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection bit (Block 1 (000800-000FFFh) not protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0001FFh) not protected from table reads executed in other blocks)
    

1 respuesta

2

Creo que el bit de protección de bootblock puede estar prohibiendo la escritura en 0x0 (?)

config CPB = ON  // Boot Block Code Protection bit (000000-0001FFh)
    
respondido por el peter

Lea otras preguntas en las etiquetas