La placa de desarrollo personalizada PIC32 no se puede programar

0

Recientemente construí mi propia placa de desarrollo PIC32MX274F256D donde quiero experimentar.

Mi problema es que la placa no se puede programar. Probé ICD3 y PickIt3 con MPLAB X IDE e IPE.

La placa de desarrollo utiliza un cristal de 16MHz con tapas de 18pF como oscilaciones primarias y una de 32.768KHz con tapas de 12pF, como una oscilación secundaria para el RTC

Estos son mis bits de configuración:

Intenté alimentar la MCU desde el programador ICD3 / PickIt3 y también desde una fuente de alimentación externa de 3.3v

Intenté programar el MCU a través de PGC1 / 2/3/4. ¡Nada!

He cambiado los bits de configuración. ¡Nada!

Revisé la placa para detectar cortocircuitos, conexiones incorrectas, etc. ¡Nada!

Cuando intento programar la MCU a través de IPE, puedo borrar la MCU con éxito y realizar una comprobación en blanco.

También dejo que la herramienta elija los rangos de memoria. ¡Nada!

Cuando intento verificar después de borrar, aparece el siguiente mensaje:

Erasing...
Erase successful

Verifying...
The following memory areas(s) will be verified:

program memory: start address = 0x1d000000, end address = 0x1d03ffff
boot config memory
configuration memory
boot config memory
Address: 1fc00000 Expected Value: ffffffff Received Value: ff00002
program memory
Address: 1d000000 Expected Value: ffffffff Received Value: 27bdffa8

Verify failed 

Cuando realizo una acción de borrado y luego trato de programar la MCU, recibo el siguiente mensaje:

Erasing...
Erase successful

2018-08-26 13:25:47 +0300 - Hex file loaded successfully.
Loading code from C:\Users\me\Desktop\MPLAB PDN\projects\projects\PIC32_My_General_Examples\devBoard\devBoard.X\dist\default\production\devBoard.X.production.hex...
2018-08-26 13:26:04 +0300 - Programming...
Device Erased...

Programming...
The following memory area(s) will be programmed:
program memory: start address = 0x1d000000, end address = 0x1d0007ff
boot config memory
configuration memory
boot config memory
Address: 1fc0001c Expected Value: 275a0270 Received Value: 275a0010
Failed to program device

No sé qué estoy haciendo mal aquí.

También reemplacé el MCU con uno nuevo. ¡NADA!

A continuación, presento el programa de prueba que trato de enviar a la MCU para ver si se puede programar.

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

// DEVCFG3
// USERID = No Setting
#pragma config AI2C1 = ON // Alternate I/O Select for I2C1 (I2C1 uses the ASDA1/ASCL1 pins)
#pragma config AI2C2 = ON // Alternate I/O Select for I2C2 (I2C2 uses the ASDA2/ASCL2 pins)
#pragma config PMDL1WAY = ON // Peripheral Module Disable Configuration (Allow only one reconfiguration)
#pragma config IOL1WAY = ON // Peripheral Pin Select Configuration (Allow only one reconfiguration)
#pragma config FUSBIDIO = ON // USB USID Selection (Controlled by the USB Module)

// DEVCFG2
#pragma config FPLLIDIV = DIV_4 // PLL Input Divider (4x Divider)
#pragma config FPLLMUL = MUL_24 // PLL Multiplier (24x Multiplier)
#pragma config FPLLICLK = PLL_POSC // System PLL Input Clock Selection (POSC is input to the System PLL)
#pragma config UPLLIDIV = DIV_4 // USB PLL Input Divider (4x Divider)
#pragma config UPLLEN = ON // USB PLL Enable (USB PLL Enabled)
#pragma config FPLLODIV = DIV_2 // System PLL Output Clock Divider (PLL Divide by 2)
#pragma config BOREN = ON // Brown-Out Reset (BOR) Enable (Enable BOR)
#pragma config DSBOREN = ON // Deep Sleep BOR Enable (Enable ZPBOR during Deep Sleep Mode)
#pragma config DSWDTPS = DSPS32 // Deep Sleep Watchdog Timer Postscaler (1:2^36)
#pragma config DSWDTOSC = LPRC // Deep Sleep WDT Reference Clock Selection (Select LPRC as DSWDT Reference clock)
#pragma config DSWDTEN = ON // Deep Sleep Watchdog Timer Enable (Enable DSWDT during Deep Sleep Mode)
#pragma config FDSEN = ON // Deep Sleep Enable (Enable DSEN bit in DSCON)

// DEVCFG1
#pragma config FNOSC = SPLL // Oscillator Selection Bits (System PLL)
#pragma config FSOSCEN = ON // Secondary Oscillator Enable (Enabled)
#pragma config IESO = ON // Internal/External Switch Over (Enabled)
#pragma config POSCMOD = HS // Primary Oscillator Configuration (HS osc mode)
#pragma config OSCIOFNC = OFF // CLKO Output Signal Active on the OSCO Pin (Disabled)
#pragma config FPBDIV = DIV_1 // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1)
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled)
#pragma config WDTPS = PS1048576 // Watchdog Timer Postscaler (1:1048576)
#pragma config WDTSPGM = ON // Watchdog Timer Stop During Flash Programming (Watchdog Timer stops during Flash programming)
#pragma config WINDIS = OFF // Watchdog Timer Window Enable (Watchdog Timer is in Non-Window Mode)
#pragma config FWDTEN = OFF // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls))
#pragma config FWDTWINSZ = WINSZ_25 // Watchdog Timer Window Size (Window Size is 25%)

// DEVCFG0
#pragma config JTAGEN = OFF // JTAG Enable (JTAG Disabled)
#pragma config ICESEL = ICS_PGx3 // ICE/ICD Comm Channel Select (Communicate on PGEC1/PGED1)
#pragma config PWP = OFF // Program Flash Write Protect (Disable)
#pragma config SMCLR = MCLR_NORM // Soft Master Clear Enable (MCLR pin generates a normal system Reset)
#pragma config BWP = OFF // Boot Flash Write Protect bit (Protection Disabled)
#pragma config CP = OFF // Code Protect (Protection Disabled)

int main(void) {

    return (EXIT_SUCCESS);
}

También he adjuntado el esquema de la placa de desarrollo que he creado,

en caso de que veas algo que yo no.

Creo que lo he intentado todo ... ¡Por favor ayuda!

Gracias de antemano.

    
pregunta Lefteris

2 respuestas

2

Algunas cosas para comprobar de mi experiencia personal. Inestabilidad y ruido.

  1. Asegúrese de que su cable de programación sea corto y que todos los conductores estén razonablemente cerca de la misma longitud.
  2. Asegúrese de que sus cristales estén calificados para usar la capacidad de carga que ha montado (recuerde que los condensadores son esencialmente en serie en cuanto al cristal en cuestión, por lo que los condensadores que se muestran, su carga de 9pF y 6pF).
  3. Asegúrese de que su Vcap (C8) sea un poco de tantalio esr o un buen capacitor cerámico (muy importante para un funcionamiento estable).
  4. Confirme los valores que se instalaron para los condensadores Vcap y oscilador.

* Editar: La hoja de especificaciones también recomienda aislar el capacitor MCLR durante la programación para evitar su influencia. Si puede desoldar R11 para su programación inicial, puede mejorar la programación.

    
respondido por el Mathieu L.
2

¡Problema resuelto! ¡¡Gracias chicos!! Aumenté el R11 de 1k a 10k. Solo eso. Entonces, ¿por qué la hoja de datos dice que R11 me debe 1k? ¿Puedes explicarlo? No entiendo

    
respondido por el Lefteris

Lea otras preguntas en las etiquetas