Programação Flash MICROCHIP PIC24

Informações do produto
Programação Flash
As famílias de dispositivos dsPIC33/PIC24 possuem uma memória de programa Flash programável interna para execução do código do usuário. Existem até três métodos para programar esta memória:
- Operação de instrução de tabela
- Programação serial no circuito (ICSP)
- Programação no aplicativo (IAP)
As instruções da tabela fornecem o método de transferência de dados entre o espaço de memória do programa Flash e o espaço de memória de dados dos dispositivos dsPIC33/PIC24. A instrução TBLRDL é usada para ler bits[15:0] do espaço de memória do programa. A instrução TBLWTL é usada para gravar em bits[15:0] do espaço de memória do programa Flash. TBLRDL e TBLWTL podem acessar a memória do programa Flash no modo Word ou no modo Byte.
Além do endereço de memória do programa Flash, a instrução de tabela também especifica um registrador W (ou um ponteiro de registrador W para um local de memória), que é a fonte dos dados da memória do programa Flash a serem gravados ou o destino de um programa Flash memória lida.
Esta seção descreve a técnica para programar a memória do programa Flash. As famílias de dispositivos dsPIC33/PIC24 possuem uma memória de programa Flash programável interna para execução do código do usuário. Existem até três métodos para programar esta memória:
- Autoprogramação em tempo de execução (RTSP)
- Programação serial em circuito™ (ICSP™)
- Programação Serial In-Circuit Aprimorada (EICSP)
O RTSP é executado pelo software aplicativo durante a execução, enquanto o ICSP e o EICSP são executados por um programador externo usando uma conexão serial de dados com o dispositivo. O ICSP e o EICSP permitem um tempo de programação muito mais rápido do que o RTSP. As técnicas de RTSP são descritas na Seção 4.0 “Autoprogramação em tempo de execução (RTSP)”. Os protocolos ICSP e EICSP são definidos nos documentos de especificação de programação para os respectivos dispositivos, que podem ser baixados do Microchip weblocal (http://www.microchip.com). Ao programar na linguagem C, várias funções integradas estão disponíveis para facilitar a programação em Flash. Consulte o “Guia do usuário do compilador MPLAB® XC16 C” (DS50002071) para obter detalhes sobre as funções integradas.
Instruções de uso do produto
Para programar a memória do programa Flash, siga estas etapas:
- Consulte a folha de dados do dispositivo para verificar se a seção do manual de referência da família é compatível com o dispositivo que você está usando.
- Baixe a folha de dados do dispositivo e as seções do manual de referência da família da Microchip Worldwide Website em: http://www.microchip.com.
- Escolha um dos três métodos para programar a memória (Table Instruction Operation, In-Circuit Serial Programming (ICSP), In-Application Programming (IAP)).
- Se estiver usando a operação de instrução de tabela, use a instrução TBLRDL para ler os bits[15:0] do espaço da memória do programa e a instrução TBLWTL para gravar nos bits[15:0] do espaço da memória do programa Flash.
- Certifique-se de especificar um registro W (ou um ponteiro de registro W para um local de memória) como a fonte dos dados da memória do programa Flash a serem gravados ou o destino para uma leitura da memória do programa Flash.
Para obter mais informações e detalhes sobre a programação da memória do programa Flash, consulte o Manual de referência da família dsPIC33/PIC24.
OPERAÇÃO DE INSTRUÇÕES DE TABELA
As instruções da tabela fornecem o método de transferência de dados entre o espaço de memória do programa Flash e o espaço de memória de dados dos dispositivos dsPIC33/PIC24. Esta seção fornece um resumo das instruções da tabela usadas durante a programação da memória de programa Flash. Existem quatro instruções básicas de tabela:
- TBLRDL: Leitura de tabela baixa
- TBLRDH: Tabela lida alta
- TBLWTL: Gravação de tabela baixa
- ATENÇÃO: Mesa Gravação Alta
A instrução TBLRDL é usada para ler bits[15:0] do espaço de memória do programa. A instrução TBLWTL é usada para gravar em bits[15:0] do espaço de memória do programa Flash. TBLRDL e TBLWTL podem acessar a memória do programa Flash no modo Word ou no modo Byte.
As instruções TBLRDH e TBLWTH são usadas para ler ou escrever em bits[23:16] do espaço de memória do programa. TBLRDH e TBLWTH podem acessar a memória do programa Flash no modo Word ou Byte. Como a memória do programa Flash tem apenas 24 bits de largura, as instruções TBLRDH e TBLWTH podem endereçar um byte superior da memória do programa Flash que não existe. Este byte é chamado de “byte fantasma”. Qualquer leitura do byte fantasma retornará 0x00. Uma gravação no byte fantasma não tem efeito. A memória de programa Flash de 24 bits pode ser considerada como dois espaços de 16 bits lado a lado, com cada espaço compartilhando o mesmo intervalo de endereços. Portanto, as instruções TBLRDL e TBLWTL acessam o espaço de memória de programa “baixo” (PM[15:0]). As instruções TBLRDH e TBLWTH acessam o espaço de memória de programa “alto” (PM[31:16]). Qualquer leitura ou gravação em PM[31:24] acessará o byte fantasma (não implementado). Quando qualquer uma das instruções da tabela for usada no modo Byte, o bit menos significativo (LSb) do endereço da tabela será usado como o bit de seleção de byte. O LSb determina qual byte no espaço de memória de programa alto ou baixo é acessado.
A Figura 2-1 ilustra como a memória do programa Flash é endereçada usando as instruções da tabela. Um endereço de memória de programa de 24 bits é formado usando bits[7:0] do registrador TBLPAG e o Endereço Efetivo (EA) de um registrador W especificado na instrução da tabela. O contador de programa (PC) de 24 bits é ilustrado na Figura 2-1 para referência. Os 23 bits superiores do EA são usados para selecionar o local da memória do programa Flash.
Para as instruções da tabela de modo Byte, o LSb do registrador W EA é usado para selecionar qual byte da palavra de memória do programa Flash de 16 bits é endereçado; '1' seleciona bits[15:8] e '0' seleciona bits[7:0]. O LSb do registrador W EA é ignorado para uma instrução de tabela no modo Word. Além do endereço de memória do programa Flash, a instrução de tabela também especifica um registrador W (ou um ponteiro de registrador W para um local de memória), que é a fonte dos dados da memória do programa Flash a serem gravados ou o destino de um programa Flash memória lida. Para uma operação de gravação de tabela no modo Byte, os bits[15:8] do registro de trabalho de origem são ignorados.
Usando instruções de leitura de tabela
As leituras de tabela requerem duas etapas:
- O Address Pointer é configurado usando o registrador TBLPAG e um dos registradores W.
- O conteúdo da memória do programa Flash no local do endereço pode ser lido.
- LEIA MODO DE PALAVRA
O código mostrado no Example 2-1 e ExampO arquivo 2-2 mostra como ler uma palavra da memória do programa Flash usando as instruções da tabela no modo Word.

- MODO DE LER BYTE
O código mostrado no ExampA Figura 2-3 mostra o operador pós-incremento na leitura do byte baixo, que faz com que o endereço no registrador de trabalho seja incrementado em um. Isso define EA[0] como '1' para acesso ao byte do meio na terceira instrução de gravação. O último pós-incremento define W0 de volta para um endereço par, apontando para o próximo local de memória do programa Flash.
- TRAVAS DE ESCRITA DE MESA
As instruções de gravação de tabela não gravam diretamente na memória de programa não volátil. Em vez disso, as instruções de gravação da tabela carregam as travas de gravação que armazenam os dados de gravação. Os registradores de endereço NVM devem ser carregados com o primeiro endereço onde os dados latched devem ser gravados. Quando todas as travas de gravação tiverem sido carregadas, a operação de programação de memória real é iniciada executando uma sequência especial de instruções. Durante a programação, o hardware transfere os dados nas travas de gravação para a memória Flash. As travas de gravação sempre começam no endereço 0xFA0000 e se estendem até 0xFA0002 para programação de palavras ou até 0xFA00FE para dispositivos que possuem programação de linha.
Observação: O número de travas de gravação varia de acordo com o dispositivo. Consulte o capítulo “Flash Program Memory” da folha de dados do dispositivo específico para obter o número de travas de gravação disponíveis.
REGISTROS DE CONTROLE
Vários registradores de funções especiais (SFRs) são usados para programar as operações de gravação e apagamento da memória do programa Flash: NVMCON, NVMKEY e os registradores de endereço NVM, NVMADR e NVMADRU.
Registro NVMCON
O registrador NVMCON é o registrador de controle primário para Flash e operações de programa/apagamento. Este registro seleciona se uma operação de apagamento ou programa será realizada e pode iniciar o ciclo de programa ou apagamento. O registro NVMCON é mostrado no Registro 3-1. O byte inferior de NVMCON configura o tipo de operação NVM que será executada.
Registro NVMKEY
O registro NVMKEY (consulte o Registro 3-4) é um registro somente para gravação usado para evitar gravações acidentais de NVMCON que podem corromper a memória Flash. Uma vez desbloqueado, as gravações no NVMCON são permitidas para um ciclo de instrução no qual o bit WR pode ser definido para invocar uma rotina de apagamento ou programa. Dados os requisitos de tempo, é necessário desabilitar as interrupções.
Execute as seguintes etapas para iniciar uma sequência de exclusão ou programação:
- Desabilitar interrupções.
- Escreva 0x55 para NVMKEY.
- Escreva 0xAA para NVMKEY.
- Inicie o ciclo de gravação de programação definindo o bit WR (NVMCON[15]).
- Execute duas instruções NOP.
- Restaurar interrupções.

DESATIVANDO INTERRUPÇÕES
A desativação de interrupções é necessária para todas as operações do Flash para garantir um resultado bem-sucedido. Se ocorrer uma interrupção durante a sequência de desbloqueio do NVMKEY, ela poderá bloquear a gravação no bit WR. A sequência de desbloqueio da NVMKEY deve ser executada ininterruptamente, conforme discutido na Seção 3.2 “Registro NVMKEY”.
As interrupções podem ser desabilitadas em um dos dois métodos, desabilitando o Global Interrupt Enable (bit GIE) ou usando a instrução DISI. A instrução DISI não é recomendada, pois desabilita apenas as interrupções de Prioridade 6 ou inferior; portanto, o método Global Interrupt Enable deve ser usado.
As gravações da CPU no GIE levam dois ciclos de instrução antes de afetar o fluxo do código. Duas instruções NOP são necessárias posteriormente ou podem ser substituídas por quaisquer outras instruções de trabalho úteis, como carregar NVMKEY; isso é aplicável tanto para operações definidas como para limpar. Deve-se tomar cuidado ao reativar as interrupções para que a rotina de destino do NVM não permita interrupções quando uma função chamada anterior as desabilitou por outros motivos. Para resolver isso no Assembly, um empilhamento push e pop pode ser usado para reter o estado do bit GIE. Em C, uma variável na RAM pode ser usada para armazenar INTCON2 antes de limpar GIE. Use a seguinte sequência para desabilitar as interrupções:
- Empurre INTCON2 para a pilha.
- Limpe o bit GIE.
- Dois NOPs ou gravações em NVMKEY.
- Inicie o ciclo de programação definindo o bit WR (NVMCON[15]).
- Restaurar estado GIE por POP de INTCON2.

Registros de endereço NVM
Os dois registradores de endereço NVM, NVMADRU e NVMADR, quando concatenados, formam o EA de 24 bits da linha ou palavra selecionada para operações de programação. O registrador NVMADRU é usado para armazenar os oito bits superiores do EA, e o registrador NVMADR é usado para conter os 16 bits inferiores do EA. Alguns dispositivos podem se referir a esses mesmos registradores como NVMADRL e NVMADRH. Os registradores de endereço NVM devem sempre apontar para um limite de palavra de instrução dupla ao executar uma operação de programação de palavra de instrução dupla, um limite de linha ao executar uma operação de programação de linha ou um limite de página ao executar uma operação de apagamento de página.
Registro 3-1: NVMCON: Registro de Controle de Memória Flash

Observação
- Este bit só pode ser redefinido (isto é, limpo) em um Power-on Reset (POR).
- Ao sair do modo Idle, há um atraso de inicialização (TVREG) antes que a memória do programa Flash se torne operacional. Consulte o capítulo “Características elétricas” da folha de dados específica do dispositivo para obter mais informações.
- Todas as outras combinações de NVMOP[3:0] não são implementadas.
- Esta funcionalidade não está disponível em todos os dispositivos. Consulte o capítulo “Flash Program Memory” na folha de dados do dispositivo específico para as operações disponíveis.
- A entrada em um modo de economia de energia após a execução de uma instrução PWRSAV depende da conclusão de todas as operações NVM pendentes.
- Este bit está disponível apenas em dispositivos que suportam programação de linha em buffer de RAM. Consulte a folha de dados específica do dispositivo para disponibilidade.

Observação
- Este bit só pode ser redefinido (isto é, limpo) em um Power-on Reset (POR).
- Ao sair do modo Idle, há um atraso de inicialização (TVREG) antes que a memória do programa Flash se torne operacional. Consulte o capítulo “Características elétricas” da folha de dados específica do dispositivo para obter mais informações.
- Todas as outras combinações de NVMOP[3:0] não são implementadas.
- Esta funcionalidade não está disponível em todos os dispositivos. Consulte o capítulo “Flash Program Memory” na folha de dados do dispositivo específico para as operações disponíveis.
- A entrada em um modo de economia de energia após a execução de uma instrução PWRSAV depende da conclusão de todas as operações NVM pendentes.
- Este bit está disponível apenas em dispositivos que suportam programação de linha em buffer de RAM. Consulte a folha de dados específica do dispositivo para disponibilidade.
Registro 3-2: NVMADRU: Registro de endereço superior de memória não volátil

Registro 3-3: NVMADR: Registro de endereço de memória não volátil

Registro 3-4: NVMKEY: Registro de chave de memória não volátil

AUTOPROGRAMAÇÃO EM TEMPO DE EXECUÇÃO (RTSP)
O RTSP permite que o aplicativo do usuário modifique o conteúdo da memória do programa Flash. O RTSP é realizado usando as instruções TBLRD (Table Read) e TBLWT (Table Write), o registrador TBLPAG e os registradores de controle NVM. Com o RTSP, o aplicativo do usuário pode apagar uma única página da memória Flash e programar duas palavras de instrução ou até 128 palavras de instrução em determinados dispositivos.
Operação RTSP
The dsPIC33/PIC24 Flash program memory array is organized into erase pages that can contain up to 1024 instructions. The double-word programming option is available in all devices in the dsPIC33/PIC24 families. In addition, certain devices have row programming capability, which allows the programming of up to 128 instruction words at a time. Programming and erase operations always occur on an even double programming word, row or page boundaries. Refer to the “Flash Program Memory” chapter of the specific device data sheet for the availability and sizes of a programming row, and the page size for erasing. The Flash program memory implements holding buffers, called write latches, that can contain up to 128 instructions of programming data depending on the device. Prior to the actual programming operation, the write data must be loaded into the write latches. The basic sequence for RTSP is to set up the Table Pointer, TBLPAG register, and then perform a series of TBLWT instructions to load the write latches. Programming is performed by setting the control bits in the NVMCON register. The number of TBLWTL and TBLWTH instructions needed to load the write latches is equal to the number of program words to be written.
Observação: Recomenda-se que o registro TBLPAG seja salvo antes da modificação e restaurado após o uso.
CUIDADO
Em alguns dispositivos, os bits de configuração são armazenados na última página do espaço de memória do usuário do programa Flash em uma seção chamada “Flash Configuration Bytes”. Com esses dispositivos, a execução de uma operação de apagamento de página na última página da memória do programa apaga os bytes de configuração do Flash, o que permite a proteção do código. Portanto, os usuários não devem executar operações de apagamento de página na última página da memória do programa. Isso não é uma preocupação quando os bits de configuração são armazenados no espaço de memória de configuração em uma seção chamada “Registros de configuração de dispositivo”. Consulte o Mapa de memória do programa no capítulo “Organização da memória” da folha de dados do dispositivo específico para determinar onde os bits de configuração estão localizados.
Operações de Programação Flash
A program or erase operation is necessary for programming or erasing the internal Flash program memory in RTSP mode. The program or erase operation is automatically timed by the device (refer to the specific device data sheet for timing information). Setting the WR bit (NVMCON[15]) starts the operation. The WR bit is automatically cleared when the operation is finished. The CPU stalls until the programming operation is finished. The CPU will not execute any instructions or respond to interrupts during this time. If any interrupts occur during the programming cycle, they will remain pending until the cycle completes. Some dsPIC33/PIC24 devices may provide auxiliary Flash program memory (refer to the “Memory Organization” chapter of the specific device data sheet for details), which allows instruction execution without CPU Stalls while user Flash program memory is being erased and/ or programmed. Conversely, auxiliary Flash program memory can be programmed without CPU Stalls, as long as code is executed from the user Flash program memory. The NVM interrupt can be used to indicate that the programming operation is complete.
Observação
- Se um evento POR ou BOR ocorrer enquanto uma operação de programação ou apagamento RTSP estiver em andamento, a operação RTSP será abortada imediatamente. O usuário deve executar a operação RTSP novamente após o dispositivo sair do Reset.
- Se ocorrer um evento EXTR, SWR, WDTO, TRAPR, CM ou IOPUWR Reset enquanto um apagamento RTSP ou operação de programação estiver em andamento, o dispositivo será redefinido somente após a conclusão da operação RTSP.
ALGORITMO DE PROGRAMAÇÃO RTSP
Esta seção descreve a programação RTSP, que consiste em três processos principais.
Criando uma imagem RAM da página de dados a ser modificada
Execute estas duas etapas para criar uma imagem de RAM da página de dados a ser modificada:
- Leia a página da memória do programa Flash e armazene-a na RAM de dados como uma “imagem” de dados. A imagem RAM deve ser lida a partir de um limite de endereço de página.
- Modifique a imagem de dados RAM conforme necessário.
Erasing Flash Program Memory
Depois de concluir as etapas 1 e 2 acima, execute as quatro etapas a seguir para apagar a página de memória do programa Flash:
- Defina os bits NVMOP[3:0] (NVMCON[3:0]) para apagar a página da memória do programa Flash lida na Etapa 1.
- Escreva o endereço inicial da página a ser apagada nos registradores NVMADRU e NMVADR.
- Com interrupções desabilitadas:
- a) Escreva a sequência de teclas no registro NVMKEY para habilitar a configuração do bit WR (NVMCON[15]).
- b) Defina o bit WR; isso iniciará o ciclo de apagamento.
- c) Execute duas instruções NOP.
- O bit WR é limpo quando o ciclo de apagamento é concluído.
Programando a página de memória flash
A próxima parte do processo é programar a página de memória Flash. A página da memória Flash é programada usando os dados da imagem criada na Etapa 1. Os dados são transferidos para as travas de gravação em incrementos de linhas ou palavras de instrução duplas. Todos os dispositivos têm capacidade de programação de palavra de instrução dupla. (Consulte o capítulo “Flash Program Memory” na folha de dados do dispositivo específico para determinar se, e que tipo de programação de linha está disponível.) Depois que as travas de gravação são carregadas, a operação de programação é iniciada, que transfere os dados do gravar travas na memória Flash. Isso é repetido até que toda a página tenha sido programada. Repita as três etapas a seguir, começando na primeira palavra de instrução da página Flash e incrementando em etapas de palavras de programa duplas ou linhas de instrução, até que toda a página tenha sido programada:
- Carregue as travas de gravação:
- a) Defina o registrador TBLPAG para apontar para o local das travas de gravação.
- b) Carregue o número desejado de latches usando pares de instruções TBLWTL e TBLWTH:
- Para programação de palavra dupla, são necessários dois pares de instruções TBLWTL e TBLWTH
- Para programação de linha, um par de instruções TBLWTL e TBLWTH é necessário para cada elemento de linha de palavra de instrução
- Iniciar a operação de programação:
- a) Defina os bits NVMOP[3:0] (NVMCON[3:0]) para programar palavras de instrução duplas ou uma linha de instrução, conforme apropriado.
b) Escreva o primeiro endereço da palavra de instrução dupla ou da linha de instrução a ser programada nos registradores NVMADRU e NVMADR.
c) Com interrupções desabilitadas:
• Escreva a sequência de teclas no registro NVMKEY para habilitar a configuração do bit WR (NVMCON[15])
• Defina o bit WR; isso iniciará o ciclo de apagamento
• Executar duas instruções NOP
- a) Defina os bits NVMOP[3:0] (NVMCON[3:0]) para programar palavras de instrução duplas ou uma linha de instrução, conforme apropriado.
- O bit WR é limpo quando o ciclo de programação é concluído.
Repita todo o processo conforme necessário para programar a quantidade desejada de memória do programa Flash.
Observação
- O usuário deve lembrar que a quantidade mínima de memória do programa Flash que pode ser apagada usando RTSP é uma única página apagada. Portanto, é importante que uma imagem desses locais seja armazenada na RAM de uso geral antes que um ciclo de apagamento seja iniciado.
- Uma linha ou palavra na memória do programa Flash não deve ser programada mais de duas vezes antes de ser apagada.
- Em dispositivos com bytes de configuração armazenados na última página do Flash, executar uma operação de apagamento de página na última página da memória do programa limpa os bytes de configuração, o que permite a proteção do código. Nesses dispositivos, a última página da memória Flash não deve ser apagada.
ERASING ONE PAGE OF FLASH
A sequência de código mostrada no ExampO arquivo 4-1 pode ser usado para apagar uma página da memória do programa Flash. O registrador NVMCON está configurado para apagar uma página da memória do programa. Os registradores NVMADR e NMVADRU são carregados com o endereço inicial da página a ser apagada. A memória do programa deve ser apagada em um limite de endereço de página “par”. Consulte o capítulo “Flash Program Memory” da folha de dados do dispositivo específico para determinar o tamanho da página Flash.
A operação de apagamento é iniciada escrevendo um desbloqueio especial, ou sequência de teclas, no registro NVMKEY antes de definir o bit WR (NVMCON[15]). A sequência de desbloqueio precisa ser executada na ordem exata, conforme mostrado no Example 4-1, sem interrupção; portanto, as interrupções devem ser desativadas.
Duas instruções NOP devem ser inseridas no código após o ciclo de apagamento. Em determinados dispositivos, os bits de configuração são armazenados na última página do programa Flash. Com esses dispositivos, a execução de uma operação de apagamento de página na última página da memória do programa apaga os bytes de configuração do Flash, permitindo a proteção do código como resultado. Os usuários não devem executar operações de apagamento de página na última página da memória do programa.

CARREGANDO TRAVAS DE GRAVAÇÃO
As travas de gravação são usadas como um mecanismo de armazenamento entre as gravações de tabela do aplicativo do usuário e a sequência de programação real. Durante a operação de programação, o dispositivo irá transferir os dados das travas de gravação para a memória Flash. Para dispositivos que suportam programação de linha, ExampO arquivo 4-3 mostra a sequência de instruções que podem ser usadas para carregar 128 travas de gravação (128 palavras de instrução). As instruções 128 TBLWTL e 128 TBLWTH são necessárias para carregar as travas de gravação para programar uma linha de memória de programa Flash. Consulte o capítulo “Flash Program Memory” da folha de dados específica do dispositivo para determinar o número de travas de programação disponíveis em seu dispositivo. Para dispositivos que não suportam programação de linha, ExampO arquivo 4-4 mostra a sequência de instruções que podem ser usadas para carregar duas travas de gravação (duas palavras de instrução). São necessárias duas instruções TBLWTL e duas TBLWTH para carregar as travas de gravação.
Observação
- O código para Load_Write_Latch_Row é mostrado em Example 4-3 e o código para Load_Write_Latch_Word é mostrado no Example 4-4. O código em ambos os examples é referido no ex subseqüenteamples.
- Consulte a folha de dados específica do dispositivo para obter o número de travas.

EX DE PROGRAMAÇÃO DE LINHA ÚNICAAMPLE
O registrador NVMCON é configurado para programar uma linha da memória do programa Flash. A operação do programa é iniciada escrevendo um desbloqueio especial, ou sequência de teclas, no registrador NVMKEY antes de definir o bit WR (NVMCON[15]). A sequência de desbloqueio precisa ser executada sem interrupção e na ordem exata, conforme mostrado no Example 4-5. Portanto, as interrupções devem ser desativadas antes de escrever a sequência.
Observação: Nem todos os dispositivos têm capacidade de programação de linha. Consulte o capítulo “Flash Program Memory” da folha de dados do dispositivo específico para determinar se esta opção está disponível.
Duas instruções NOP devem ser inseridas no código após o ciclo de programação.

PROGRAMAÇÃO DE LINHA USANDO O RAM BUFFER
Dispositivos dsPIC33 selecionados permitem que a programação de linha seja executada diretamente de um espaço de buffer na RAM de dados, em vez de passar pelas travas de retenção para transferir dados com instruções TBLWT. A localização do buffer RAM é determinada pelo(s) registrador(es) NVMSRCADR, que são carregados com o endereço RAM de dados contendo a primeira palavra de dados do programa a ser gravado.
Antes de executar a operação do programa, o espaço do buffer na RAM deve ser carregado com a linha de dados a ser programada. A RAM pode ser carregada em um formato compactado (empacotado) ou descompactado. O armazenamento compactado usa uma palavra de dados para armazenar os bytes mais significativos (MSBs) de duas palavras de dados de programa adjacentes. O formato não compactado usa duas palavras de dados para cada palavra de dados do programa, com o byte superior de cada palavra alternada sendo 00h. O formato compactado usa cerca de 3/4 do espaço na RAM de dados em comparação com o formato não compactado. O formato não compactado, por outro lado, imita a estrutura da palavra de dados do programa de 24 bits, completa com o byte fantasma superior. O formato dos dados é selecionado pelo bit RPDF (NVMCON[9]). Esses dois formatos são mostrados na Figura 4-1.
Depois que o buffer de RAM é carregado, os ponteiros de endereço Flash, NVMADR e NVMADRU, são carregados com o endereço inicial de 24 bits da linha Flash a ser gravada. Assim como na programação das travas de gravação, o processo é iniciado pela gravação da sequência de desbloqueio do NVM, seguida pela configuração do bit WR. Uma vez iniciado, o dispositivo carrega automaticamente as travas corretas e incrementa os registros de endereço NVM até que todos os bytes tenham sido programados. Example 4-7 mostra um example do processo. Se NVMSRCADR for definido com um valor tal que ocorra uma condição de erro de subexecução de dados, o bit URERR (NVMCON[8]) será definido para indicar a condição.
Dispositivos que implementam programação de fila de buffer RAM também implementam uma ou duas travas de gravação. Estes são carregados usando as instruções TBLWT e são usados para executar operações de programação de palavras.
PROGRAMAÇÃO DE PALAVRAS
O registrador NVMCON é configurado para programar duas palavras de instrução da memória de programa Flash. A operação do programa é iniciada escrevendo um desbloqueio especial, ou sequência de teclas, no registrador NVMKEY antes de definir o bit WR (NVMCON[15]). A sequência de desbloqueio precisa ser executada na ordem exata, conforme mostrado no Example 4-8, sem interrupção. Portanto, as interrupções devem ser desativadas antes de escrever a sequência.
Duas instruções NOP devem ser inseridas no código após o ciclo de programação.

Gravando nos registros de configuração do dispositivo
Em certos dispositivos, os bits de configuração são armazenados no espaço da memória de configuração em uma seção chamada “Registros de configuração do dispositivo”. Em outros dispositivos, os bits de configuração são armazenados na última página do espaço de memória do usuário do programa Flash em uma seção chamada “Flash Configuration Bytes”. Com esses dispositivos, a execução de uma operação de apagamento de página na última página da memória do programa apaga os bytes de configuração do Flash, o que permite a proteção do código. Portanto, os usuários não devem executar operações de apagamento de página na última página da memória do programa. Consulte o Mapa de memória do programa no capítulo “Organização da memória” da folha de dados do dispositivo específico para determinar onde os bits de configuração estão localizados.
Quando os bits de configuração são armazenados no espaço de memória de configuração, o RTSP pode ser usado para gravar nos registradores de configuração do dispositivo, e o RTSP permite que cada registrador de configuração seja reescrito individualmente sem primeiro realizar um ciclo de apagamento. Deve-se ter cuidado ao escrever os registros de configuração, pois eles controlam os parâmetros operacionais críticos do dispositivo, como a fonte do relógio do sistema, habilitação de PLL e WDT.
O procedimento para programar um registro de configuração do dispositivo é semelhante ao procedimento para programar a memória do programa Flash, exceto que apenas as instruções TBLWTL são necessárias. Isso ocorre porque os oito bits superiores em cada registro de configuração do dispositivo não são usados. Além disso, o bit 23 do endereço Table Write deve ser definido para acessar os registros de configuração. Consulte “Device Configuration” (DS70000618) no “dsPIC33/PIC24 Family Reference Manual” e o capítulo “Special Features” na folha de dados específica do dispositivo para obter uma descrição completa dos registros de configuração do dispositivo.
Observação
- A gravação nos registros de configuração do dispositivo não está disponível em todos os dispositivos. Consulte o capítulo “Recursos especiais” na folha de dados específica do dispositivo para determinar os modos que estão disponíveis de acordo com a definição dos bits NVMOP[3:0] específicos do dispositivo.
- Ao executar o RTSP nos registros de configuração do dispositivo, o dispositivo deve estar operando usando o oscilador FRC interno (sem PLL). Se o dispositivo estiver operando a partir de uma fonte de relógio diferente, uma mudança de relógio para o oscilador FRC interno (NOSC[2:0] = 000) deve ser realizada antes de executar a operação RTSP nos registros de configuração do dispositivo.
- Se os bits de seleção de modo de oscilador primário (POSCMD[1:0]) no registro de configuração de oscilador (FOSC) estiverem sendo reprogramados para um novo valor, o usuário deve garantir que os bits de modo de comutação de relógio (FCKSM[1:0]) em o registrador FOSC tem um valor inicial programado de '0', antes de executar esta operação RTSP.
ALGORITMO DE ESCRITA DE REGISTRO DE CONFIGURAÇÃO
O procedimento geral é o seguinte:
- Grave o novo valor de configuração no latch Table Write usando uma instrução TBLWTL.
- Configure o NVMCON para uma gravação de registro de configuração (NVMCON = 0x4000).
- Escreva o endereço do registrador de configuração a ser programado nos registradores NVMADRU e NVMADR.
- Desabilitar interrupções, se habilitado.
- Escreva a sequência de teclas no registrador NVMKEY.
- Inicie a sequência de gravação definindo o bit WR (NVMCON[15]).
- Reative as interrupções, se necessário.
Example 4-10 mostra a seqüência de códigos que podem ser usados para modificar o registro de configuração de um dispositivo.
CADASTRE-SE MAPA
Um resumo dos registros associados à Programação Flash é fornecido na Tabela 5-1.
Esta seção lista as notas de aplicação relacionadas a esta seção do manual. Estas notas de aplicação podem não ter sido escritas especificamente para as famílias de produtos dsPIC33/PIC24, mas os conceitos são pertinentes e podem ser usados com modificações e possíveis limitações. As notas de aplicação atuais relacionadas à Programação Flash são:
Observação: Visite o Microchip weblocal (www.microchip.com) para Notas de Aplicação adicionais e código examparquivos para as famílias de dispositivos dsPIC33/PIC24.
HISTÓRICO DE REVISÕES
Revisão A (agosto de 2009)
Esta é a versão inicial lançada deste documento.
Revisão B (fevereiro de 2011)
Esta revisão inclui as seguintes atualizações:
- Exampos:
- Ex removidoample 5-3 e Examp5-4
- Ex atualizadoample 4-1, Ex.ample 4-5 e Examp4-10
- Quaisquer referências a #WR foram atualizadas para #15 no Example 4-1, Ex.ample 4-5 e Examp4-8
- Atualizado o seguinte no Exampitem 4-3:
- Atualizado o título “Programação de palavras” para “Carregar travas de gravação para programação de linhas”
- Qualquer referência a #ram_image foi atualizada para #0xFA
- Ex adicionadoamp4-4
- Atualizado o título em Examp4-8
- Notas:
- Adicionadas duas notas na Seção 4.2 “Operações de programação do Flash”
- Atualizada a nota na Seção 4.5.2 “Carregando travas de gravação”
- Adicionadas três notas na Seção 4.6 “Gravando nos Registros de Configuração do Dispositivo”
- Adicionada Nota 1 na Tabela 5-1
- registos:
- Atualizados os valores de bit para NVMOP[3:0]: Operação NVM Selecionar bits no registro de controle de memória flash (NVMCON) (consulte o registro 3-1)
- Seções:
- Seções removidas 5.2.1.4 “Write Word Mode” e 5.2.1.5 “Write Byte Mode”
- Seção 3.0 "Registros de controle" atualizada
- Atualizado o seguinte na Seção 4.5.5 “Programação de palavras”:
- Alterado o título da seção “Programação de uma palavra de memória flash” para “Programação de palavras”
- Atualizado o primeiro parágrafo
- Mudou os termos “uma palavra” para “um par de palavras” no segundo parágrafo
- Adicionada uma nova Etapa 1 à Seção 4.6.1 “Algoritmo de Gravação de Registro de Configuração”
- Tabelas:
- Tabela 5-1 atualizada
- Algumas referências à memória do programa foram atualizadas para a memória do programa Flash
- Outras pequenas atualizações, como atualizações de idioma e formatação, foram incorporadas ao longo do documento
Revisão C (junho de 2011)
Esta revisão inclui as seguintes atualizações:
- Exampos:
- Ex atualizadoamp4-1
- Ex atualizadoamp4-8
- Notas:
- Adicionada uma observação na Seção 4.1 “Operação RTSP”
- Adicionada a Nota 3 na Seção 4.2 “Operações de Programação do Flash”
- Adicionada a Nota 3 na Seção 4.2.1 “Algoritmo de Programação RTSP”
- Added a note in Section 4.5.1 “Erasing One Page of Flash”
- Nota 2 adicionada na Seção 4.5.2 “Carregando travas de gravação”
- registos:
- Atualizada a descrição do bit para os bits 15-0 no registro de endereço de memória não volátil (consulte o Registro 3-3)
- Seções:
- Seção 4.1 "Operação RTSP" atualizada
- Seção 4.5.5 "Programação de palavras" atualizada
- Outras pequenas atualizações, como atualizações de idioma e formatação, foram incorporadas ao longo do documento
Revisão D (dezembro de 2011)
Esta revisão inclui as seguintes atualizações:
- Seção 2.1.3 "Travas de gravação de tabela" atualizada
- Seção 3.2 "Registro NVMKEY" atualizada
- Atualizadas as notas no NVMCON: Registro de controle de memória flash (consulte o Registro 3-1)
- Extensas atualizações foram feitas em toda a Seção 4.0 “Autoprogramação em tempo de execução (RTSP)”
- Outras pequenas atualizações, como atualizações de idioma e formatação, foram incorporadas ao longo do documento
Revisão E (outubro de 2018)
Esta revisão inclui as seguintes atualizações:
- Ex adicionadoample 2-2, Ex.ample 4-2, Ex.ample 4-6 e Examp4-9
- Adicionada a Seção 4.5.4 “Programação de linha usando o buffer de RAM”
- Seção 1.0 “Introdução” atualizada, Seção 3.3 “Registros de endereço NVM”, Seção 4.0 “Autoprogramação em tempo de execução (RTSP)” e Seção 4.5.3 “Ex de programação de linha únicaampa"
- Registro atualizado 3-1
- Ex atualizadoamp4-7
- Tabela 5-1 atualizada
Revisão F (novembro de 2021)
Adicionada a Seção 3.2.1 “Desativando Interrupções”.
Ex atualizadoample 3-1, Ex.ample 4-1, Ex.ample 4-2, Ex.ample 4-5, Ex.ample 4-6, Ex.ample 4-7, Ex.ample 4-8, Ex.ample 4-9 e Examp4-10.
Updated Section 3.2 “NVMKEY Register”, Section 4.5.1 “Erasing One Page of Flash”, Section 4.5.3 “Single Row Programming Example” e Seção 4.6.1 “Algoritmo de Gravação de Registro de Configuração”.
Observe os seguintes detalhes do recurso de proteção de código em produtos Microchip:
- Os produtos Microchip atendem às especificações contidas em sua Ficha de Dados Microchip específica.
- A Microchip acredita que sua família de produtos é segura quando usada da maneira pretendida, dentro das especificações operacionais e sob condições normais.
- A Microchip valoriza e protege agressivamente seus direitos de propriedade intelectual. Tentativas de violar os recursos de proteção de código do produto Microchip são estritamente proibidas e podem violar a Lei de Direitos Autorais do Milênio Digital.
- Nem a Microchip nem qualquer outro fabricante de semicondutores pode garantir a segurança de seu código. A proteção do código não significa que estamos garantindo que o produto seja “inquebrável”. A proteção de código está em constante evolução. A Microchip está empenhada em melhorar continuamente os recursos de proteção de código de nossos produtos
Esta publicação e as informações aqui contidas podem ser usadas apenas com produtos Microchip, inclusive para projetar, testar e integrar produtos Microchip com seu aplicativo. O uso dessas informações de qualquer outra forma viola estes termos. As informações sobre os aplicativos do dispositivo são fornecidas apenas para sua conveniência e podem ser substituídas por atualizações. É sua responsabilidade garantir que seu aplicativo atenda às suas especificações. Entre em contato com o escritório de vendas local da Microchip para obter suporte adicional ou obtenha suporte adicional em https://www.microchip.com/en-us/support/design-help/client-supportservices.
ESSAS INFORMAÇÕES SÃO FORNECIDAS PELA MICROCHIP “COMO ESTÃO”. A MICROCHIP NÃO FAZ REPRESENTAÇÕES OU GARANTIAS DE QUALQUER TIPO, SEJA EXPRESSA OU IMPLÍCITA, ESCRITA OU ORAL, LEGAL OU DE OUTRA FORMA, RELACIONADA ÀS INFORMAÇÕES, INCLUINDO, SEM LIMITAÇÃO, QUAISQUER GARANTIAS IMPLÍCITAS DE NÃO VIOLAÇÃO, COMERCIALIZAÇÃO E ADEQUAÇÃO A UM DETERMINADO FIM, OU GARANTIAS RELACIONADAS A SUA CONDIÇÃO, QUALIDADE OU DESEMPENHO. EM NENHUM CASO A MICROCHIP SERÁ RESPONSÁVEL POR QUALQUER PERDA, DANO, CUSTO OU DESPESA INDIRETA, ESPECIAL, PUNITIVA, INCIDENTAL OU CONSEQUENTE DE QUALQUER TIPO RELACIONADA ÀS INFORMAÇÕES OU SEU USO, SEJA QUAL FOR A CAUSA, MESMO QUE A MICROCHIP TENHA SIDO AVISADA DA POSSIBILIDADE OU OS DANOS SÃO PREVISÍVEIS. ATÉ O LIMITE MÁXIMO PERMITIDO POR LEI, A RESPONSABILIDADE TOTAL DA MICROCHIP EM TODAS AS RECLAMAÇÕES DE QUALQUER FORMA RELACIONADAS ÀS INFORMAÇÕES OU SEU USO NÃO EXCEDERÁ O VALOR DAS TAXAS, SE HOUVER, QUE VOCÊ PAGOU DIRETAMENTE À MICROCHIP PELAS INFORMAÇÕES.
O uso de dispositivos Microchip em suporte de vida e/ou aplicações de segurança é inteiramente por conta e risco do comprador, e o comprador concorda em defender, indenizar e isentar a Microchip de quaisquer e todos os danos, reivindicações, processos ou despesas resultantes de tal uso. Nenhuma licença é transmitida, implicitamente ou de outra forma, sob quaisquer direitos de propriedade intelectual da Microchip, a menos que declarado de outra forma.
Para obter informações sobre os Sistemas de Gestão de Qualidade da Microchip, visite www.microchip.com/quality.
Marcas registradas
O nome e logotipo Microchip, o logotipo Microchip, Adaptec, AnyRate, AVR, logotipo AVR, AVR Freaks, BesTime, BitCloud, CryptoMemory, CryptoRF, dsPIC, flexPWR, HELDO, IGLOO, JukeBlox, KeeLoq, Kleer, LANCheck, LinkMD, maXStylus, maXTouch, MediaLB, megaAVR, Microsemi, logotipo Microsemi, MOST, logotipo MOST, MPLAB, OptoLyzer, PIC, picoPower, PICSTART, logotipo PIC32, PolarFire, Prochip Designer, QTouch, SAM-BA, SenGenuity, SpyNIC, SST, logotipo SST, SuperFlash , Symmetricom, SyncServer, Tachyon, TimeSource, tinyAVR, UNI/O, Vectron e XMEGA são marcas registradas da Microchip Technology Incorporated nos EUA e em outros países. AgileSwitch, APT, ClockWorks, The Embedded Control Solutions Company, EtherSynch, Flashtec, Hyper Speed Control, HyperLight Load, IntelliMOS, Libero, motorBench, mTouch, Powermite 3, Precision Edge, ProASIC, ProASIC Plus, ProASIC Plus logo, Quiet-Wire, SmartFusion, SyncWorld, Temux, TimeCesium, TimeHub, TimePictra, TimeProvider, TrueTime, WinPath e ZL são marcas registradas da Microchip Technology Incorporated nos EUA
Supressão de Chave Adjacente, AKS, Analógico para a Era Digital, Qualquer Capacitor, AnyIn, AnyOut, Comutação Aumentada, BlueSky, BodyCom, CodeGuard, CryptoAuthentication, CryptoAutomotive, CryptoCompanion, CryptoController, dsPICDEM, dsPICDEM.net, Dynamic Average Matching, DAM , ECAN, Espresso T1S, EtherGREEN, GridTime, IdealBridge, In-Circuit Serial Programming, ICSP, INICnet, Intelligent Paralleling, Inter-Chip Connectivity, JitterBlocker, Knob-on-Display, maxCrypto, maxView, memBrain, Mindi, MiWi, MPASM, MPF, MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, NVM Express, NVMe, Omniscient Code Generation, PICDEM, PICDEM.net, PICkit, PICtail, PowerSmart, PureSilicon, QMatrix, REAL ICE , Ripple Blocker, RTAX, RTG4, SAM-ICE, Serial Quad I/O, simpleMAP, SimpliPHY, SmartBuffer, SmartHLS, SMART-IS, storClad, SQI, SuperSwitcher, SuperSwitcher II, Switchtec, SynchroPHY, Total Endurance, TSHARC, USBCheck, VariSense, VectorBlox, VeriPHY, ViewSpan, WiperLock, XpressConnect e ZENA são marcas comerciais da Microchip Technology Incorporated nos EUA e em outros países.
SQTP é uma marca de serviço da Microchip Technology Incorporated nos EUA
O logotipo Adaptec, Frequency on Demand, Silicon Storage Technology, Symmcom e Trusted Time são marcas registradas da Microchip Technology Inc. em outros países.
GestIC é uma marca registrada da Microchip Technology Germany II GmbH & Co. KG, uma subsidiária da Microchip Technology Inc., em outros países.
Todas as outras marcas registradas aqui mencionadas são propriedade de suas respectivas empresas.
© 2009-2021, Microchip Technology Incorporated e suas subsidiárias.
Todos os direitos reservados.
ISBN: 978-1-5224-9314-3
Vendas e serviços em todo o mundo
AMÉRICAS
- Escritório Corporativo
2355 West Chandler Blvd.
Chandler, Arizona 85224-6199
Telefone: 480-792-7200
Fax: 480-792-7277
Suporte técnico: http://www.microchip.com/
apoiar Web Endereço: www.microchip.com - Atlanta
Duluth, Geórgia
Telefone: 678-957-9614
Fax: 678-957-1455 - Austin, Texas
Telefone: 512-257-3370 - Boston
Westborough, Massachusetts
Telefone: 774-760-0087
Fax: 774-760-0088 - Chicago
Itasca, IL
Telefone: 630-285-0071
Fax: 630-285-0075 - Dallas
Addison, TX
Telefone: 972-818-7423
Fax: 972-818-2924 - Detroit
Novi, MI
Telefone: 248-848-4000 - Houston, Texas
Telefone: 281-894-5983 - Indianápolis
Noblesville, Indiana
Telefone: 317-773-8323
Fax: 317-773-5453
Telefone: 317-536-2380 - Los Angeles
Missão Viejo, CA
Telefone: 949-462-9523
Fax: 949-462-9608
Telefone: 951-273-7800 - Raleigh, Carolina do Norte
Telefone: 919-844-7510 - Nova Iorque, NY
Telefone: 631-435-6000 - São José, CA
Telefone: 408-735-9110
Telefone: 408-436-4270 - Canadá – Toronto
Telefone: 905-695-1980
Fax: 905-695-2078
ÁSIA/PACÍFICO
- Austrália – Sydney
Telefone: 61-2-9868-6733 - China – Pequim
Telefone: 86-10-8569-7000 - China-Chengdu
Telefone: 86-28-8665-5511 - China – Chongqing
Telefone: 86-23-8980-9588 - China – Dongguan
Telefone: 86-769-8702-9880 - China – Cantão
Telefone: 86-20-8755-8029 - China – Hangzhou
Telefone: 86-571-8792-8115 - China – RAE de Hong Kong
Telefone: 852-2943-5100 - China – Nanquim
Telefone: 86-25-8473-2460 - China-Qingdao
Telefone: 86-532-8502-7355 - China – Xangai
Telefone: 86-21-3326-8000 - China-Shenyang
Telefone: 86-24-2334-2829 - China – Shenzen
Telefone: 86-755-8864-2200 - China – Suzhou
Telefone: 86-186-6233-1526 - China-Wuhan
Telefone: 86-27-5980-5300 - China –Xian
Telefone: 86-29-8833-7252 - China – Xiamen
Telefone: 86-592-2388138 - China-Zhuhai
Telefone: 86-756-3210040 - Índia – Bangalore
Telefone: 91-80-3090-4444 - Índia – Nova Deli
Telefone: 91-11-4160-8631 - Índia - Pune
Telefone: 91-20-4121-0141 - Japão – Osaka
Telefone: 81-6-6152-7160 - Japão – Tóquio
Telefone: 81-3-6880- 3770 - Coreia – Daegu
Telefone: 82-53-744-4301 - Coreia – Seul
Telefone: 82-2-554-7200 - Malásia – Kuala Lumpur
Telefone: 60-3-7651-7906 - Malásia – Penang
Telefone: 60-4-227-8870 - Filipinas – Manila
Telefone: 63-2-634-9065 - Cingapura
Telefone: 65-6334-8870 - Taiwan-Hsin Chu
Telefone: 886-3-577-8366 - Taiwan – Kaohsiung
Telefone: 886-7-213-7830 - Taiwan – Taipé
Telefone: 886-2-2508-8600 - Tailândia – Bangkok
Telefone: 66-2-694-1351 - Vietnã – Ho Chi Minh
Telefone: 84-28-5448-2100
EUROPA
- Áustria – Wels
Telefone: 43-7242-2244-39
Fax: 43-7242-2244-393 - Dinamarca – Copenhague
Telefone: 45-4485-5910
Fax: 45-4485-2829 - Finlândia – Espoo
Telefone: 358-9-4520-820 - França – Paris
Telefone: 33-1-69-53-63-20
Fax: 33-1-69-30-90-79 - Alemanha – Garching
Telefone: 49-8931-9700 - Alemanha – Han
Telefone: 49-2129-3766400 - Alemanha – Heilbronn
Telefone: 49-7131-72400 - Alemanha – Karlsruhe
Telefone: 49-721-625370 - Alemanha – Munique
Telefone: 49-89-627-144-0
Fax: 49-89-627-144-44 - Alemanha – Rosenheim
Telefone: 49-8031-354-560 - Itália – Milão
Telefone: 39-0331-742611
Fax: 39-0331-466781 - Itália – Pádua
Telefone: 39-049-7625286 - Holanda – Drunen
Telefone: 31-416-690399
Fax: 31-416-690340 - Noruega – Trondheim
Telefone: 47-7288-4388 - Polônia – Varsóvia
Telefone: 48-22-3325737 - Romênia – Bucareste
Telefone: 40-21-407-87-50 - Espanha – Madri
Telefone: 34-91-708-08-90
Fax: 34-91-708-08-91 - Suécia – Gotemburgo
Telefone: 46-31-704-60-40 - Suécia – Estocolmo
Telefone: 46-8-5090-4654 - Reino Unido – Wokingham
Telefone: 44-118-921-5800
Fax: 44-118-921-5820
Observação:
Esta seção do manual de referência da família destina-se a servir como um complemento às folhas de dados do dispositivo. Dependendo da variante do dispositivo, esta seção do manual pode não se aplicar a todos os dispositivos dsPIC33/PIC24. Consulte a nota no início do capítulo “Flash Program Memory” na folha de dados do dispositivo atual para verificar se este documento é compatível com o dispositivo que você está usando.
Folhas de dados do dispositivo e seções do manual de referência da família estão disponíveis para download na Microchip Worldwide Website em: http://www.microchip.com.
Documentos / Recursos
![]() |
Programação Flash MICROCHIP PIC24 [pdf] Guia do Usuário Programação Flash PIC24, PIC24, Programação Flash, Programação |
![]() |
Programação Flash MICROCHIP PIC24 [pdf] Guia do Usuário Programação Flash PIC24, PIC24, Programação Flash |






