Hola amigos, tengo hecha la rutina "bulk erase" para borrar toda la memoria("chip erase") de los dispositivos "PIC18F2XX0/2X21/2XX2/2XX5/4XX0/4X21/4XX2/4XX5".
Los pasos necesarios para implementar rutina los he sacado del siguiente datasheet:
http://ww1.microchip.com/downloads/en/DeviceDoc/39622j.pdf.
Y este es mi código:
direccionPcPic18.tablePointer = BULK_ERASE_CONTROL_REGISTERS_1 ;//0x3C0005
cargarDireccionPcPic18(direccionPcPic18);
enviarComandoPic18(TABLE_WRITE);
datoEscribirPic18 = 0x3F3F;
enviarDatoPic18();
direccionPcPic18.tablePointer = BULK_ERASE_CONTROL_REGISTERS_0;//0x3C0004
cargarDireccionPcPic18(direccionPcPic18);
enviarComandoPic18(TABLE_WRITE);
datoEscribirPic18 = 0x8F8F;
enviarDatoPic18();
enviarComandoPic18(CORE_INSTRUCCION);
datoEscribirPic18 = INSTRUCCION_NOP;
enviarDatoPic18();
enviarComandoPic18(CORE_INSTRUCCION);
delayP11();//5 ms
delayP10();// 100us
datoEscribirPic18 = INSTRUCCION_NOP;
enviarDatoPic18();
Las funciones de enviar comandos, datos y cargar las direcciones funcionan correctamente... El problema está en que unos dispositivos se me borran correctamente(4550,4450,2550,2450,etc.) pero otros no se borran(4620,2620,4680,etc.) y se supone que es el mismo protocolo, por lo que no le encuentro mucho sentido...
Se que es una pregunta bastante particular sobre ICSP, pero agradecería cualquier tipo de ayuda porque llevo 4 dias dandole vueltas sin llegar a ninguna solución...
Saludos y gracias!