Página 1 de 1

Como gravar dados flash msp430 via software

MensagemEnviado: 27 Abr 2009 09:55
por veioloko
Ola pessoal

Alguem ja fez ou sabe se é muito complicado gravar dados na flash do Msp430 com o programa rodando?

Encontrei o app note abaixo

http://www.gaw.ru/pdf/TI/app/msp430/slaa103.pdf

No meu caso eu queria gravar somente 2 offsets para adicionar na conversao AD. Ou seja, um dado para calibração.

Seria mais facil colocar uma memoria externa ou gravar via software mesmo?

MensagemEnviado: 30 Abr 2009 12:42
por alessandro
Se não for muita coisa, é mais prático colocar na FLASH, há quase 2 anos utilizei este recurso devido a falta de espaço fisico e ficou muito bom.

MensagemEnviado: 15 Mai 2009 12:19
por HC908
//***************************************
//* Programa para trabalhar com a Flash *
//* *
//* Projeto TIX *
//***************************************

//Rotina para apagar a Flash
void erase_flash(void)
{
uint8 *Flash_ptr; //Aloca ponteiro para Flash

WDTCTL = WDTPW + WDTHOLD; //Pára Watch Dog Timer
_disable_interrupts(); //Desbilita interrupções
Flash_ptr = (uint8 *)0xFA00; //Ponteiro para Flash
FCTL2 = FWKEY + FSSEL0 + 20; //Define senha, fonte de CLK, Fator div CLK
FCTL1= FWKEY + ERASE; //Apagamento apenas do segmento específico
FCTL3 = FWKEY + LOCKA; //Senha, Desabilita proteção
*Flash_ptr=0; //Limpa ponteiro
FCTL1 = FWKEY; //Senha
FCTL3 = FWKEY + LOCKA + LOCK; //
Flash_ptr = (uint8 *)0xFC00; //Aponta outro segmento
FCTL2 = FWKEY + FSSEL0 + 20; //Define senha, fonte de CLK, Fator div CLK
FCTL1= FWKEY + ERASE; //Apagamento apenas do segmento específico
FCTL3 = FWKEY; //Senha
*Flash_ptr=0; //Limpa ponteiro
FCTL1 = FWKEY; //Senha
FCTL3 = FWKEY + LOCKA + LOCK; //
_enable_interrupts(); //Habilita interrupções

}
//Rotina para gravar na Flash
void write_flash(uint16 endereco, uint8 value)
{
uint8 *Flash_ptr; //Aloca ponteiro

_disable_interrupts(); //Desabilita interrupções
FCTL2 = FWKEY + FSSEL0 + 20; //Senha, Fonte de CLK, Fator div CLK
FCTL3 = FWKEY + LOCKA;
FCTL1= FWKEY + WRT;
Flash_ptr=(uint8 *)0xFA00 + endereco; //Aponta para end. no segmento A
*Flash_ptr=value; //Coloca valor no end
FCTL1= FWKEY; //Senha
FCTL3 = FWKEY + LOCKA + LOCK; //
_enable_interrupts(); //Habilita interrupções
}

//Rotina para ler conteúdo da Flash
uint8 read_flash(uint16 endereco)
{
uint8 *Flash_ptr; //Aloca ponteiro
Flash_ptr=(uint8 *)0xFA00 + endereco; //Aponta para valor
return(*Flash_ptr); //Retorna valor apontado
}

MensagemEnviado: 27 Mai 2009 16:27
por veioloko
OPAAA assim fica facil ein!

Muito obrigado ein! funcionou!

MensagemEnviado: 27 Mai 2009 23:27
por HC908
q bom q funcionou. qualquer coisa da um grito

MensagemEnviado: 28 Mai 2009 10:16
por veioloko
bom deixa eu gritar entao rs

0xFA00

como determino este valor...ele varia conforme o msp430?
como faço para saber se o local onde estou escrevendo não ira sobrepor a memoria de programa.

MensagemEnviado: 09 Jun 2009 16:15
por veioloko
fui usar a mesma rotina no msp430f235 e nao funcionou
antes estava usando no msp430f2619 que tem memoria maior

como vejo o endereco a ser escrito no msp?