Entrar    Registrar

PIC32/24 Flash Write+Read CCS.

Software e Hardware para uC PIC

Moderadores: aluis-rcastro, guest2003, 51, Renie

  • Autor
    Mensagem

PIC32/24 Flash Write+Read CCS.

Mensagempor fabim » 30 Out 2018 09:41

Pessoal, bom dia!
Novamente, depois de quase ter um infarto de raiva, decidi pedir socorro pros Caras.

Estou a dois dias tentando fazer a programação e leitura da Flash para salvar alguns valores de calibração, como segue;

Código: Selecionar todos
//constantes que foram utilizadas com base nos links que irei mostrar a frente

#define CK_FLASH_END         (getenv("PROGRAM_MEMORY")-1)     
#define CK_FLASH_PAGE_SIZE   (getenv("FLASH_ERASE_SIZE")/2)
#define CK_NUM_PAGES         (CK_FLASH_END/CK_FLASH_PAGE_SIZE)
#define CK_USER_PAGE         (CK_FLASH_PAGE_SIZE*(CK_NUM_PAGES-1))

#org    (unsigned int32)CK_USER_PAGE,CK_FLASH_END {} //não entendi para que serve...


//Variavel que eu quero fazer o o storage na flash para ao iniciar fazer o load.


  struct{
      unsigned int16   Calibrated;       // sinaliza que está calibrado
      unsigned int16  Ofset;               //valor do ofset de tensão do circuito
      float           Calibration_Const;  //constante de multiplicação
  }Cal_Params;


O que ocorre é que, eu faço a gravação dos dados utilizando as constantes como seguiram.
Quando eu faço a leitura novamente, todos os valores que eu leio são 0....

Estou utilizando os comandos como seguem abaixo:

Write_Program_Memory(CK_USER_PAGE, &Cal_Params, sizeof(Cal_Params));
Read_Program_Memory(CK_USER_PAGE, &Cal_Params, sizeof(Cal_Params));

Conforme o manual do CCS, estes comandos deveriam ler e escrever na flash, pelo ponteiro de entrada e saida &Cal_Params, e a quantidade de bytes sizeof(Cal_Params));

Já fiz casting, já fiz dezenas de cálculos ja fiz de tudo e não funciona.

Li dois tópicos conforme abaixo:
https://ccsinfo.com/forum/viewtopic.php?p=162228
https://www.ccsinfo.com/forum/viewtopic.php?t=49089


Ja lí, reli, desreli, e mesmo assim não consigo saber onde estou errando.

Alguém consegue ver algo que eu não vi, ou já passou por algo parecido ?


Obrigado!!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 4955
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: PIC32/24 Flash Write+Read CCS.

Mensagempor fabim » 31 Out 2018 16:23

Bom pessoal, depois de dias a fio esmiuçando tudo....

A arquitetura do pic24 é de duas words, sendo a word baixa e alta.
A word baixa, possui 2 bytes que são transparentes para leitura e escrita.
A word alta, possui apenas o byte lsb, sendo o msb virtual (não implementado).

De forma que ao utilizar as funções Read_Program_Memory e Write_Program_Memory, você precisa antes:


1 - Criar um array de bytes com comprimento conforme lógicca de 3 bytes lsb + 1 byte msb phanton;
2 - Copiar para este array os bytes a serem gravados de forma que os bytes multiplos de 4 sejam pulados;
3 - De preferencia apontar para o endereço inicial de cada bloco de 1024 words, lembrando de não utilizar o ultimo bloco que é utilizado para FUSES e outros.

Baseado neste estudo, montei vários tryouts e nada de funcionar!!

Fiz então na unha, e algo errado aconteceu, é como se o compilador não conseguisse manipular corretamente.

Baixei a ultima versão DEMO do CCS, substitui o compilador (não IDE) da nossa versão PAGA de 2013 pela ultima versão.

VOILA !!!!!!

Enfim, pela terceira vez, BUG no compilador da ccs!!!

Estou tentando entender o mplab X, mais estou até com medinho de tanta parafernalha pra confundir meus cabelos brancos!!

Obrigado !!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 4955
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: PIC32/24 Flash Write+Read CCS.

Mensagempor aluis-rcastro » 01 Nov 2018 08:33

fabim escreveu:substitui o compilador (não IDE) da nossa versão PAGA de 2013 pela ultima versão.

VOILA !!!!!!


Explica, mas não ajuda: http://www.ccsinfo.com/devices.php?page=versioninfo
5.071 Fixed an issue with read/write_program_memory() when using a structure element for the address in PCH
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
aluis-rcastro
Dword
 
Mensagens: 5295
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: PIC32/24 Flash Write+Read CCS.

Mensagempor fabim » 01 Nov 2018 09:50

andre_teprom escreveu:
fabim escreveu:substitui o compilador (não IDE) da nossa versão PAGA de 2013 pela ultima versão.

VOILA !!!!!!


Explica, mas não ajuda: http://www.ccsinfo.com/devices.php?page=versioninfo
5.071 Fixed an issue with read/write_program_memory() when using a structure element for the address in PCH


Mas ai que está André!!
Independente de ser ou não estrutura, ele simplesmente ficava louco, como se gravasse e lesse em regiões que não respeitam os ponteiros!!
Eu apenas substituí o arquivo PicC.exe para a versão mais atual, compilei, gravei e funcionou perfeitamente!!
O mais interessante é que agora outro comportamento que eu não conseguia entender, sumiu!!
Estão omitindo outros bugs ai em!!

Valew André!!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 4955
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron