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