Hola a todos, tengo un problemita un tanto extraño. Estoy intentando implementar el metodo de borrado de la flash de un 18F6722 por el método de single row erase, para poder borrar la flash con voltajes mejores de 4.5v. He implementado el algoritmo que dice el documento de programming specification del 18F6722 y no hay manera de que funcione bien del todo.
El problema es el siguiente, segun el algoritmo en cada pasada se borra el bloque de 64bytes al que el TBLPTR apunta, para ello tengo un blucle donde se va cargando en el TBLPTR la dirección del sisguiente bloque a borrar, pero no borra todos los bloques, me borra los bloques de las direcciones 0, 128, 256, etc (bloque si bloque no). Para colmo si en vez de empezar a borrar en la dirección 0 empiezo en la 64, me borra los bloques de las direcciones 64, 192, 320, etc (bloque no bloque si), con lo cual ya estoy desquiciado por que no se que es lo que pasa y le he dado miles de vueltas al código y esta igual que dice el pdf.
Codigo a ejecutar según el pdf de microchip.
Step 1: Direct access to code memory and enable writes.
BSF EECON1, EEPGD
BCF EECON1, CFGS
BSF EECON1, WREN
Step 2: Point to first row in code memory.
CLRF TBLPTRU
CLRF TBLPTRH
CLRF TBLPTRL
Step 3: Enable erase and erase single row.
BSF EECON1, FREE
BSF EECON1, WR
NOP – hold PGC high for time P9 and low for time P10.
Step 4: Repeat step 3, with address pointer incremented by 64 until all rows are erased.
Mi codigo, modificado para cargar en cada pasada en TBLPTR la dirección del bloque a borrar
Step 1: Direct access to code memory and enable writes.
BSF EECON1, EEPGD
BCF EECON1, CFGS
BSF EECON1, WREN
Step 2: Point to first row in code memory.
MOVLW addr<21:16>
MOVWF TBLPTRU
MOVLW addr<15:8>
MOVWF TBLPTRH
MOVLW addr<7:0>
MOVWF TBLPTRL
Step 3: Enable erase and erase single row.
BSF EECON1, FREE
BSF EECON1, WR
NOP – hold PGC high for time P9 and low for time P10
Step 4: addr = addr + 64, y repetir los pasos 2 a 4, mientras queden bloques por borrar
Agradeceria una manita de alguien que sepa algo o lo haya implementado.
Saludos.