errores de programación de PIC18F67J60 con PicKit 2

2

Estoy tratando de programar un PIC18F67J60 con un PicKit 2 pero el dispositivo no programa.

La salida del registro de Pickit 2 de MPLABX es:

Found PICkit 2 - Operating System Version 2.32.0
Target power not detected - Powering from PICkit 2   3.25
2014-01-03 11:35:52
PIC18F67J60 found (rev = 0x3)
Erasing Target
Programming Program Memory (0x0 - 0x3f)
Programming Program Memory (0x1ff80 - 0x1fff7)
Verifying Program Memory (0x0 - 0x3f)
Verifying Program Memory (0x1ff80 - 0x1fff7)
Programming Configuration Memory
Verifying Configuration Memory
PK2Error0027:  Failed verify (Address = 0x1fff9 - Expected Value 0xf4 - Value Read 0x0)
PK2Error0027:  Failed verify (Address = 0x1fff9 - Expected Value 0xf4 - Value Read 0x0)

El código es básicamente un parpadeo de un LED:

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

//general defines
#define _XTAL_FREQ 25000000

// CONFIG1L
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on SWDTEN bit))
#pragma config STVR = OFF       // Stack Overflow/Underflow Reset Enable bit (Reset on stack overflow/underflow disabled)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG1H
#pragma config CP0 = OFF        // Code Protection bit (Program memory is not code-protected)

// CONFIG2L
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config FOSC2 = OFF      // Default/Reset System Clock Select bit (INTRC enabled as system clock when OSCCON<1:0> = 00)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor enabled)
#pragma config IESO = OFF       // Two-Speed Start-up (Internal/External Oscillator Switchover) Control bit (Two-Speed Start-up disabled)

// CONFIG2H
#pragma config WDTPS = 32768    // Watchdog Timer Postscaler Select bits (1:32768)

// CONFIG3L

// CONFIG3H
#pragma config ETHLED = OFF     // Ethernet LED Enable bit (RA0/RA1 function as I/O regardless of Ethernet module status)

/*
 * 
 */
int main(int argc, char** argv) {

  //OSCCONbits.SCS = 0b10;

  TRISB = 0x00;

  while(1){

    LATBbits.LATB0 = 1;
    for(unsigned char i = 0; i < 25; i++)
      __delay_ms(10);
    LATBbits.LATB0 = 0;
    for(unsigned char i = 0; i < 25; i++)
      __delay_ms(10);

  }

  return (EXIT_SUCCESS);
}

Al utilizar PK2CMD puedo ver que el dispositivo se reconoce con la detección automática; sin embargo, cuando intento colocar el HEX directamente en el PIC, obtengo esta salida de terminal:

> pk2cmd -PPIC18F67J60 -M -F main.hex 
PICkit 2 Program Report
3-1-2014, 11:34:51
Device Type: PIC18F67J60

Program Memory Errors

Address   Good     Bad
01FFFE    00FFFF   00F000

Lo que parece un problema diferente a la salida de MPLABX. ¿Podría ser simplemente un chip malo (improbable?), Cualquier sugerencia sería genial.

ACTUALIZACIÓN:

Esquema a continuación:

Vcc es de 3.3V, por lo que ENVREG tiene una relación alta para usar el regulador incorporado para registrar hasta los 2.5V que el chip realmente usa, como resultado, el VDDCORE / VCAP está conectado a tierra con un electrolítico de 10uF. X1 es de 25MHz y he probado el Pickit 2 MCLR directamente en el pin, tal como está aquí y también sin el límite de 0.1uF (como lo sugiere la hoja de datos)

ACTUALIZACIÓN 2:

Intenté borrar el dispositivo con lo siguiente usando PK2CMD

> ./pk2cmd -PPIC18F67J60 -E
Erasing Device...

Operation Succeeded

pero, lamentablemente, todavía obtengo el mismo error al intentar programar: ¿hay alguna forma alternativa de borrar o el CP se establece de forma permanente en estos chips?

ACTUALIZACIÓN 3:

Resulta interesante que si desconecto el PicKit 2 y ejecuto el circuito con alimentación externa, solo el LED está encendido, no pulsando, solo encendido. No estoy seguro de si eso es de interés pero es algo.

Y la suma de control del dispositivo en la vista de proyecto en MPLAB para el dispositivo es Checksum: 0xC0C2

    
pregunta SimonBarker

2 respuestas

0

La solución fue comprar un PicKit 3: todo funciona bien ahora.

    
respondido por el SimonBarker
0

Hay algunos puertos llamados Programación en serie en circuito que PICkit utiliza para introducir el código hexadecimal en el microcontrolador en serie. Cuando un interruptor externo proporciona un voltaje en estos puertos, esto causa problemas con el PICkit. Tendrá que desconectarlos o ponerlos en modo tierra.

Se incluye en el PIC18F67J60 manual que:

  

Los pines PGC y PGD se utilizan para la Serie In-Circuit   Programación ™ (ICSP ™) y propósitos de depuración. Eso   Se recomienda mantener la longitud de traza entre el   El conector ICSP y los pines ICSP en el dispositivo como   lo más corto posible Si se espera que el conector ICSP   experimentar un evento de ESD, se recomienda una resistencia de serie,   con el valor en el rango de unas decenas de   Ohms, que no exceda de 100Ω.   Resistencias pull-up, diodos en serie y condensadores en el   No se recomiendan los pines PGC y PGD, ya que lo harán   interferir con las comunicaciones programador / depurador   al dispositivo. Si tales componentes discretos son una   requisito de aplicación, deben ser removidos de   El circuito durante la programación y depuración.

Compruébalos y prueba conectarlos a tierra o desconectarlos.

    
respondido por el Prabhpreet

Lea otras preguntas en las etiquetas