Página 1 de 1

Gravar memória de programa 18F452

MensagemEnviado: 29 Jun 2009 23:46
por binho2tr
Estou com um pequeno problema, acho que jah entendi o q está acontecendo ... mas com a experiência de vcs pode ser que de uma idéia melhor ...
Tenho um programa que pega e grava senhas na memória de programa do pic, usava um 16f877 e tudo funcionava que era uma beleza !
usava um write_program_memory(0x7900,dado,16) e lá estava o dado gravado. Mas quando troquei o pic pelo 18f452 quando uso essa rotina ele grava 64bytes ao invés de gravar apenas os 16 que especifiquei.
Pelo que eu entendi o 18f452 sempre grava em blocos de 64bytes. ME CORRIJA SE HOUVER ALGUM ERRO NO RACIOCÍNIO !!!
ae que acontece o problema quando gravo na posição 0x7900 eu apago os dados que estavam gravados nas 3 posições seguintes (0x7910,0x7920,0x7930). Eu estou usando a seguinte alternative (se tiverem uma + interessante me ajudem).
Eu pego e leio a memória no endereço onde quero gravar.
read_program_memory(0x7900,buffer,64) e então altero o que quero e gravo novamente . Se alguém tiver algo a comentar, estou usando CCS !!!

MensagemEnviado: 30 Jun 2009 08:08
por Sergio38br
pelo que diz o dataxt, vc grava 8 bytes, mas apaga 64 bytes

" ...A read from program memory is executed on one byte
at a time. A write to program memory is executed on
blocks of 8 bytes at a time
. Program memory is erased
in blocks of 64 bytes at a time
. A bulk erase operation
may not be issued from user code...."

Em teoria vc esta fazendo o correto, mas por que vc não usa a eeprom em vez da flash??

[ ]'s
Sergio

MensagemEnviado: 30 Jun 2009 09:32
por binho2tr
Obrigado pela resposta cara !!! Estou usando a memória de programa pois preciso gravar uma grande quantidade de dados, pois vai ser senha ateh 16 caracteres + data +hora e serão 100 registros destes!