Memória de programa flash de partição dupla MICROCHIP PIC24
Informações do produto
Todos os dispositivos PIC24 e dsPIC33 vêm com um array Flash programável interno que pode ser usado para executar código do usuário. O array Flash tem uma longa vida de retenção e um grande número de ciclos de leitura/gravação, proporcionando grande flexibilidade no desenvolvimento e armazenamento de código. A memória do programa Flash de partição dupla possui uma versão atualizada com novos recursos.
- Espaço de endereçamento: Os dispositivos PIC24 e dsPIC33 endereçam um espaço de endereço de memória de programa de 4M x 24 bits.
- Espaço do programa do usuário: O mapa de memória do programa é dividido igualmente no espaço do programa do usuário (000000h a 7FFFFFh).
- Espaço de memória de configuração: O mapa de memória do programa é dividido igualmente no espaço de memória de configuração (ou teste) (800000h a FFFFFFh).
- Acessando o espaço do programa: Existem três métodos para acessar o espaço do programa:
- O contador de programa (PC) de 23 bits.
- Instruções de leitura de tabela (TBLRD) e gravação de tabela (TBLWT).
- Mapeando qualquer segmento de 32 Kbytes de memória de programa no espaço de endereço da memória de dados.
INTRODUÇÃO
Todos os dispositivos PIC24 e dsPIC33 possuem um array Flash programável interno para a execução do código do usuário. O array Flash de alta resistência oferece grande flexibilidade no desenvolvimento e armazenamento de código, combinando uma longa vida de retenção com um grande número de ciclos de leitura/gravação.
Esta versão da memória de programa Flash adiciona estes novos recursos:
- Operação Dual Partition Flash, permitindo o suporte de sistemas robustos de bootloader e armazenamento à prova de falhas de código de aplicativo, com opções projetadas para aprimorar a segurança do código
- Operação LiveUpdate, permitindo que o segmento de código (CS) inativo seja modificado ou completamente apagado enquanto o aplicativo principal continua em execução
- Programação direta em tempo de execução do array Flash a partir do espaço de dados RAM, com compactação opcional da imagem de dados RAM
Uso do produto
Para usar a memória de programa Flash de partição dupla, siga estas etapas:
- Consulte a nota no início do capítulo Memória de Programa Flash de Partição Dupla na folha de dados do dispositivo atual para verificar se este documento é compatível com o dispositivo que você está usando.
- Baixe as folhas de dados do dispositivo e as seções do manual de referência da família na Microchip Worldwide Website em: http://www.microchip.com.
- Acesse o espaço do programa usando qualquer um dos três métodos descritos acima.
- A memória de programa implementada pode ser dividida em área vetorial, que inclui os vetores de reinicialização e interrupção, e área de código, que também inclui os dados de configuração do Flash. Acessar áreas não implementadas do espaço do programa do usuário (ou seja, acima do limite superior implementado da memória do programa) causará uma armadilha de erro de endereço.
ARQUITETURA DE MEMÓRIA DO PROGRAMA
Os dispositivos PIC24 e dsPIC33 endereçam um espaço de endereço de memória de programa de 4M x 24 bits, conforme mostrado na Figura 2-1. O mapa de memória do programa é dividido igualmente em espaço de programa do usuário (000000h a 7FFFFFh) e espaço de memória de configuração (ou teste) (800000h a FFFFFFh). O espaço do programa do usuário contém o vetor de reinicialização, tabelas de vetores de interrupção (IVTs) e memória de programa. Existem três métodos para acessar o espaço do programa.
- O contador de programa (PC) de 23 bits.
- Instruções de leitura de tabela (TBLRD) e gravação de tabela (TBLWT).
- Mapeando qualquer segmento de 32 Kbytes de memória de programa no espaço de endereço da memória de dados.
A memória de programa implementada pode ser dividida em área vetorial, que inclui os vetores de reinicialização e interrupção, e área de código, que também inclui os dados de configuração do Flash. Acessar áreas não implementadas do espaço do programa do usuário (ou seja, acima do limite superior implementado da memória do programa) causará uma armadilha de erro de endereço.
Área vetorial
A área vetorial começa no início do espaço de memória do programa, em 000000h. Ele contém o vetor Master Reset, os vetores de trap de hardware e a Tabela de Vetores de Interrupção (IVT) para todas as interrupções de hardware implementadas.
Devido às diferenças arquitetônicas e ao tamanho do IVT, a área vetorial ocupa uma quantidade diferente de memória em diferentes famílias de dispositivos. Para dispositivos PIC24, a área vetorial se estende até 0000FEh. Para dispositivos dsPIC33, a área vetorial se estende até 0001FEh. A Figura 2-2 mostra a diferença entre os IVTs para diferentes dispositivos. Independentemente da família de dispositivos, os vetores de interrupção de hardware sempre iniciam em 000014h com vetor de interrupção 0.
A área vetorial corresponde aproximadamente ao segmento vetorial (VS) nas implementações de segurança CodeGuard™. Dependendo da configuração de segurança, a área vetorial pode ser tratada como parte do Boot Segment (BS) ou do General Segment (GS).
TABELA DE INTERRUPÇÃO DE VETOR ALTERNATIVO
Todos os dispositivos dsPIC33 e PIC24 fornecem a implementação de um IVT alternativo (AIVT), que pode ser usado em aplicações de código de alta segurança e para tratamento alternativo de exceções. Ao contrário dos dispositivos anteriores destas famílias, o AIVT não está permanentemente alocado na memória de programa em uma faixa de endereço fixa. Em vez disso, o AIVT só está presente quando:
- A segurança do CodeGuard é configurada para um segmento de inicialização com tamanho de pelo menos duas páginas (definido pelo registro de configuração do FBSLIM), e
- AIVT é habilitado programando o bit de configuração AIVTDIS para '0'.
Quando o AIVT está habilitado, ele fica localizado em uma faixa de endereços iniciando no início da última página da BS; cada vetor está localizado em um deslocamento fixo do limite da página. O tamanho total e o conteúdo (ou seja, a ordem vetorial) do AIVT refletem os do IVT.
Área de código
A área de código é a área da memória do programa do usuário que contém o código da aplicação do usuário. Estende-se do final da área vetorial até o início das palavras de configuração do Flash. Se um segmento de inicialização for implementado, ele começa no final da área vetorial e se estende por um intervalo predeterminado. A parte da área de código que não está no segmento de inicialização corresponde ao segmento geral (GS) nos sistemas de segurança CodeGuard. Exceto as Palavras de Configuração Flash no final da memória implementada, conforme descrito abaixo, toda a área fica disponível para o código da aplicação.
DADOS DE CONFIGURAÇÃO FLASH
A área no final da memória do programa Flash implementado (normalmente a última linha) é reservada para dados de configuração do Flash. Na reinicialização do dispositivo, essas informações de configuração são copiadas nos registros de configuração do dispositivo apropriados, que não são acessíveis ao usuário. Os dados de configuração do dispositivo só podem ser programados programando os valores desejados nas Palavras de Configuração Flash.
O número, a ordem e a organização dos bits de configuração variam entre arquiteturas de dispositivos e entre famílias de dispositivos dentro da mesma arquitetura. Alguns dispositivos organizam bits de configuração como palavras de configuração de 16 bits, que geralmente são agrupadas em termos funcionais. Outros dispositivos organizam bits de configuração em termos de bytes de configuração endereçáveis individualmente. A Figura 2-3 mostra a área organizada para Palavras de Configuração. Consulte a folha de dados do dispositivo para obter informações específicas da família.
Para dispositivos com capacidade de partição dupla, a palavra de configuração FBTSEQ é geralmente a penúltima palavra de configuração, localizada no final da memória do programa implementado.
organização da memória
O espaço de memória do programa é organizado como blocos endereçáveis por palavras. Embora seja tratado como tendo 24 bits de largura, é mais apropriado pensar em cada endereço da memória do programa como uma palavra inferior e uma palavra superior, sendo o byte superior da palavra superior não implementado. A palavra inferior sempre possui um endereço par, enquanto a palavra superior possui um endereço ímpar (Figura 2-4). Os endereços de memória do programa e do PC são sempre alinhados por palavra na palavra inferior (ou seja, o bit menos significativo (LSb) é sempre '0'). Os endereços são aumentados ou diminuídos em dois durante a execução do código.
ENDEREÇANDO A MEMÓRIA DO PROGRAMA
Para execução normal de código, o Endereço Efetivo (EA) para execução é fornecido pelo Contador de Programa (PC). O PC tem 23 bits de largura, permitindo acesso direto a qualquer local no espaço do programa do usuário. PC[0] é fixado como '0' para manter o alinhamento das instruções do programa. O PC é incrementado para o próximo endereço sequencial incrementando PC[1], aumentando assim o valor do PC em dois.
Para operações de leitura e gravação de tabela, o EA é criado concatenando o endereço de 16 bits de um dos registradores W com o endereço de 8 bits do registrador TBLPAG. Isso permite o acesso de operações de tabela aos espaços de usuário e de configuração. A geração de endereços para operações de tabela é discutida com mais detalhes na Seção 4.2.1 “Geração de endereços para operações de tabela”.
Para operações de Extended Data Space (EDS) e Program Space Visibility (PSV), o EA é criado concatenando os 15 bits inferiores de um registrador W com o endereço de 8 bits do DSRPAG/DSWPAG (dsPIC33) ou PSVPAG (PIC24F) registra. As operações de espaço de dados estendido e visibilidade de espaço de programa são discutidas no “Manual de referência da família dsPIC33/PIC24”, “Memória de dados” (dsPIC33, DS70595) e/ou “Memória de dados” (PIC24, DS30009717).
OPERAÇÃO FLASH DA PARTIÇÃO DE MEMÓRIA DO PROGRAMA
Para dispositivos com capacidade Dual Partition Flash, o modo Dual Partition Program Memory é selecionado programando os bits BTMODE[1:0] na palavra de configuração FBOOT. Ao contrário de outras palavras de configuração, FBOOT está localizado no espaço de memória de configuração, além de todos os outros registros de configuração Flash. O endereço exato é específico da arquitetura (ou seja, PIC24 ou dsPIC33) e pode variar entre famílias de dispositivos. A Tabela 3-1 lista as possíveis opções de partição Flash, que são discutidas nas seções a seguir.
Quando um dispositivo é programado pela primeira vez via In-Circuit Serial Programming™ (ICSP™), o programador deve programar FBOOT para definir corretamente o modo de partição Flash do dispositivo. Observe que não é possível reprogramar o FBOOT em tempo de execução usando Run-Time Self-Programming (RTSP). Os bits FBOOT devem ser configurados no modo ICSP por um programador. Isso ocorre porque a localização das palavras de configuração Flash muda do modo de partição padrão para o modo de partição dupla, o que pode causar operação inesperada do dispositivo.
Tabela 3-1: Opções de Partição Flash
MODO BT[1:0] | Opção de partição |
11 | Modo Padrão (Partição Única, padrão) |
10 | Modo de partição dupla |
01 | Modo de partição dupla protegida |
00 | Modo de partição dupla privilegiada(1) |
Nota 1: Não implementado em todos os dispositivos Dual Partition.
Modo Padrão (Partição Única)
O modo padrão, também conhecido como modo de partição única ou partição padrão, é o modo operacional padrão para memória de programa. É selecionado quando os bits de configuração do BTMODEx são '11' (sua configuração não programada). Este também é o modo operacional de memória de programa único disponível para todos os dispositivos dsPIC33 e PIC24 anteriores. No modo Padrão, toda a memória do programa do usuário é mapeada como um espaço de memória plano e contínuo, variando de 000000h até o limite superior da memória Flash implementada. Para exampPor exemplo, um dispositivo com 256 Kbytes de memória Flash possui uma faixa de endereços de memória de programa de 000000h a 02AFFFh, sendo que endereços acima dessa faixa não são implementados. Toda a faixa de memória implementada (excluindo espaços reservados para vetores Reset, IVTs e Palavras de Configuração Flash) está disponível para a aplicação do usuário. Em dispositivos com segurança de código segmentado, um Boot Segment também pode ser implementado.
Modos de partição dupla
Quando os bits de configuração BTMODEx são programados para um valor diferente de '11', o dispositivo opera em um dos três modos de partição dupla. Em todos esses modos, a memória Flash implementada é dividida simetricamente em duas regiões: uma Partição Ativa, começando em 000000h, e uma Partição Inativa, começando em 400000h. Para o dispositivo do ex anteriorampAssim, a memória Flash de 256 Kbytes seria implementada em duas áreas de 128 Kbytes cada, variando dos endereços 000000h a 0157FFh e 400000h a 4157FFh. Os endereços entre as duas áreas não estão implementados (veja a Figura 3-1).
Nos modos de Partição Dupla, dois aplicativos independentes podem ser programados no dispositivo, um para cada uma das duas partições de memória Flash, conhecidas como Partição 1 e Partição 2. Quando o dispositivo é inicializado, um deles é mapeado dinamicamente para a Partição Ativa e executado. O outro é mapeado para a Partição Inativa, onde permanece disponível para programar operações de memória. A atribuição de uma partição à partição ativa ou inativa é determinada automaticamente por uma assinatura de código, conhecida como número de sequência de inicialização. As partições de código também podem ser trocadas entre partições ativas e inativas, durante o tempo de execução, sob controle de software.
Os modos de Partição Dupla permitem que o aplicativo da Partição Ativa acesse (mas não execute) dados do programa na Partição Inativa ou reprograme a Partição Inativa. A gravação na memória Flash na partição inativa não exige que a CPU pare enquanto ocorrem as gravações Flash. Isso permite a funcionalidade LiveUpdate, onde a execução de funções de controle críticas ou comunicações sensíveis ao tempo pode ocorrer simultaneamente com atualizações de aplicativos. Certos modos de partição dupla impõem limitações adicionais ao processo para ajudar a garantir a segurança do código e a robustez da operação. O código não pode ser executado quando está mapeado para a partição inativa. As partições podem ser trocadas, mas apenas o código na Partição Ativa pode ser executado.
- MODO DE PARTIÇÃO DUPLA
O modo de Partição Dupla mais simples não impõe restrições às operações da Partição Ativa para o código nas Partições 1 ou 2. Quaisquer limitações nas interações entre Segmentos de Código em partições diferentes são determinadas pela configuração de recursos de segurança aprimorados. - MODO DE PARTIÇÃO DUPLA PROTEGIDA
O modo Partição Dupla Protegida protege o Segmento de Código padrão (Partição 1) de qualquer operação de gravação ou apagamento do Flash. Isso permite a implementação de um modo “Padrão de fábrica”, permitindo que uma imagem de backup à prova de falhas seja armazenada na Partição 1. Quando o modo Partição Dupla Protegida é usado, a Partição 1 não pode ser gravada ou apagada por operações de memória Flash enquanto estiver em a partição inativa. Se a Partição 1 também estiver protegida contra gravação através das configurações do bit de configuração, ela não poderá ser apagada ou gravada em nenhum momento. Por outro lado, a Partição 2 pode ser apagada ou gravada por operações de qualquer uma das partições. Isso permite que um bootloader à prova de falhas seja colocado na Partição 1, junto com uma imagem de código de backup à prova de falhas. Esta imagem de código pode então ser executada por padrão e usada para reescrever a Partição 2 no caso de uma atualização do Flash falhar. - MODO DE PARTIÇÃO DUPLA PRIVILEGIADO
O modo Privileged Dual Partition implementa proteções de segurança adicionais nos casos em que um aplicativo pode ter segmentos de código escritos por autores diferentes e um nível mais alto de segurança é necessário para proteger a propriedade intelectual de um desses segmentos. Um exampSeria um sistema em que a maior parte do código é escrita pelo desenvolvedor da aplicação do hardware, mas inclui uma biblioteca proprietária de terceiros. Este modo foi projetado para funcionar com recursos de segurança aprimorados em dispositivos selecionados, que podem proteger seletivamente diferentes segmentos de código no espaço de memória do programa.
O modo Privileged Dual Partition difere do modo Standard Dual Partition adicionando proteção especial aos bits de configuração BSLIMx de ambas as partições. Essa proteção bloqueia efetivamente os bits e evita alterações no tamanho do segmento de inicialização e do segmento geral. Com as configurações de segurança adequadas, isso garante que nenhum segmento será alterado ou lido inesperadamente em tempo de execução.
O modo Privileged Dual Partition não está implementado em todos os dispositivos com capacidade de Dual Partition. Consulte a folha de dados específica do dispositivo para obter detalhes. - SELECIONANDO UMA PARTIÇÃO DE CÓDIGO
Nos modos de partição dupla, existem dois métodos para determinar qual partição será mapeada para a partição ativa e executada: o número de sequência de inicialização e a instrução BOOTSWP. O bit P2ACTIV (NVMCON[10]) pode ser usado para determinar qual partição física é a partição ativa. Se P2ACTIV = 1, a Partição 2 está ativa; se P2ACTIV = 0, a Partição 1 está ativa. O número de sequência de inicialização é um valor de 12 bits usado para determinar automaticamente a partição ativa na reinicialização do dispositivo. Cada partição deve ter um número de sequência de inicialização exclusivo, que é armazenado na palavra de configuração Flash FBTSEQ. A instrução BOOTSWP é usada para trocar partições ativas e inativas sem redefinir o dispositivo.- Número de sequência de inicialização
O número de sequência de inicialização de 12 bits é armazenado na palavra de configuração Flash FBTSEQ, que está sempre localizada no último local da memória do programa do usuário, acima das outras palavras de configuração Flash (veja a Figura 3-2). Ao contrário de outros registradores de configuração, que usam apenas os 16 bits inferiores da palavra de memória do programa, o FBTSEQ tem 24 bits completos de largura. Cada partição deve, em condições normais de operação, ter um valor diferente para FBTSEQ. Quando os modos Dual Partition não são usados, o valor de FBTSEQ é ignorado.
O número de sequência de inicialização é armazenado em duas partes: o valor real no campo de bit, BSEQx
(FBTSEQ[11:0]), e o complemento de um do valor no campo de bits IBSEQx
(FBTSEQ[23:12]). Quando o número de sequência de inicialização é lido durante a reinicialização do dispositivo, os valores de BSEQx e IBSEQx são automaticamente comparados. Se esses dois valores não forem complementos mútuos, o Número de sequência de inicialização será considerado inválido. O valor do complemento não é criado automaticamente pelo hardware, nem é verificado pelo hardware durante a programação. A aplicação deve calcular e programar o valor apropriado.
Na reinicialização do dispositivo, os números de sequência de inicialização em ambas as partições são comparados. A partição com menor valor BSEQx é aquela que é mapeada para a Partição Ativa e seu código é executado. Se um dos números de sequência de inicialização for inválido, o dispositivo selecionará a partição com o número de sequência de inicialização válido como a partição ativa, independentemente de qual número de sequência de inicialização for menor. Se ambos os números de sequência de inicialização forem inválidos, a Partição 1 será selecionada por padrão como a Partição Ativa.
As partições podem ser preparadas para serem trocadas durante o tempo de execução reprogramando o Número de Sequência de Inicialização da Partição Inativa para ter um valor mais baixo. Quando um Reset é executado, a partição que possui o valor mais baixo agora se torna ativa. Este método é usado quando a partição inativa foi atualizada e mapeada para a partição ativa após uma redefinição.
A localização do FBTSEQ permite que ele seja facilmente excluído de uma soma de verificação ou outra verificação da memória do programa Flash. Como o valor FBTSEQ provavelmente será determinado em tempo de execução (com base no BSEQx da outra partição), muitas vezes ele não pode ser incluído em uma soma de verificação, como um CRC.
A sequência no topo da Figura 3-3 mostra o relacionamento entre as partições de código quando o número de sequência de inicialização é alterado e uma reinicialização do dispositivo é executada. - Instrução BOOTSWP
A instrução BOOTSWP é uma extensão do conjunto de instruções PIC24 e dsPIC33. Ele suporta o código LiveUpdate, permitindo que os segmentos de código sejam trocados entre as partições ativas e inativas sem a necessidade de uma reinicialização do dispositivo. Uma troca de partição usando a instrução BOOTSWP é chamada de “soft swap”. Para executar uma instrução BOOTSWP, o bit de configuração, BTSWP (FIDC[25]), deve ser limpo. Se uma instrução BOOTSWP for tentada com BTSWP definido, o resultado será uma instrução NOP.
A instrução BOOTSWP deve ser sempre seguida por uma instrução de palavra única que escreva no PC (ex. GOTO W, CALL W ou BRA W); o destino da instrução deve estar em um endereço dentro de 32 Kbytes do endereço atual. Após a execução, as partições ativas e inativas trocam de lugar e os vetores PC para o local especificado pela instrução GOTO na nova partição ativa.
Observação: Se a instrução BOOTSWP for executada de dentro de uma função que criou um novo quadro de pilha usando a instrução LNK, uma CALL deverá ser usada após BOOTSWP em vez de um GOTO; caso contrário, o dispositivo gerará uma armadilha de erro de pilha.- Após a execução da instrução BOOTSWP, o bit SFTSWP (NVMCON[11]) é setado. Este bit indica ao firmware que a instrução BOOTSWP ocorreu corretamente e que a partição atualmente ativa foi inserida via BOOTSWP em vez de uma reinicialização do dispositivo. O bit de status, P2ACTIV (NVMCON[10]), também pode ser lido para verificar qual partição está ativa.
- É importante ressaltar que, após a troca de partição, todos os periféricos e interrupções que estavam habilitados anteriormente permanecem habilitados. Além disso, a RAM e a pilha mantêm seus estados após a troca. É altamente recomendável que os aplicativos que usam soft swaps passem para uma rotina que reinicialize o dispositivo para garantir que o aplicativo continue funcionando conforme o esperado.
- Para robustez da operação, é necessário executar a sequência de desbloqueio padrão do NVM antes de executar a instrução BOOTSWP (gravando 55h e AAh no registrador NVMKEY em duas etapas sequenciais; consulte a Seção 4.1 “Registradores” para obter mais informações). É importante também desabilitar as interrupções antes de executar a sequência de desbloqueio. Caso a sequência de desbloqueio não seja realizada, o BOOTSWP será executado como um NOP forçado. A instrução GOTO após o BOOTSWP ainda é executada, fazendo com que o PC salte para esse local na partição operacional atual. Da mesma forma, BOOTSWP não tem efeito no modo Partição Padrão.
- A sequência na parte inferior da Figura 3-3 mostra o relacionamento entre as partições quando uma instrução BOOTSWP é executada. Observe que uma alteração na partição BOOTSWP é temporária; após uma reinicialização subsequente do dispositivo, a partição com o número de sequência de inicialização inferior é reatribuída à partição ativa.
- Número de sequência de inicialização
PROGRAMAÇÃO DE MEMÓRIA FLASH
Os dispositivos PIC24 e dsPIC33 podem ser programados por qualquer um dos três métodos:
- 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. ICSP e EICSP permitem um tempo de programação muito mais rápido que o RTSP. As técnicas RTSP são descritas nesta seção. Os protocolos ICSP e EICSP são definidos nos documentos de especificação de programação dos respectivos dispositivos, que podem ser baixados do Microchip weblocal (www.microchip.com).
Registros
As operações de programação são controladas através de seis registradores. Os registros NVMCON e NVMKEY são usados para habilitar e selecionar todas as operações. Os quatro registros restantes definem ponteiros de dados e endereços.
Observação: Nem todos os dispositivos implementam programação de buffer de RAM de dados. Consulte a folha de dados específica do dispositivo para obter mais informações.
REGISTROS DE CONTROLE
O registro NVMCON (Registro 4-1) controla todas as operações de programação do Flash. Os bits NVMOP[3:0] (NVMCOM[3:0]) selecionam a operação específica de gravação ou apagamento a ser executada. O bit WR (NVMCOM[15]) aciona a operação apropriada; ele permanece definido até que a operação seja concluída e então é apagado pelo hardware. O bit WREN (NVMCOM[14]) habilita ou desabilita operações de gravação e apagamento. O bit WR não pode ser configurado para disparar operações quando o WREN estiver limpo.
O registro NVMKEY (Registro 4-2) é um registro somente 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 durante 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.
Para iniciar um apagamento ou sequência de programação, são utilizados os seguintes passos:
- 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.
Example 4-1 mostra como a sequência de desbloqueio é executada.
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 NVMKEY deve ser executada sem interrupção, conforme discutido na Seção 3.2 “Modos de Partição Dupla”. 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 desabilita apenas interrupções de Prioridade 6 ou inferior, portanto não é recomendada, devendo ser utilizado o método Global Interrupt Enable.
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 NMVKEY; isso é aplicável a operações definidas e limpas. Deve-se tomar cuidado ao reativar interrupções para que a rotina alvo do NVM não permita interrupções quando uma função chamada anteriormente as desabilitou por outros motivos. Para resolver isso no Assembly, um stack 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 o GIE.
A seguinte sequência deve ser usada para desabilitar 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.
Example 4-1 fornece a sintaxe em Assembly.
REGISTROS DE ENDEREÇOS
Os registros NVMADRL e NVMADRH definem o ponteiro de endereço inicial para operações de gravação. Ambos os tipos de escrita de memória de programa (baseada em latch e com buffer de RAM) usam esses registradores para definir o endereço de destino. Os registradores NVMSRCADRL e NVMSRCADRH definem o endereço inicial na RAM de dados dos dados de origem ao usar programação com buffer de RAM. O registro NVMSRCADRH é usado em dispositivos com Extended Data Space (EDS) para apontar para endereços na memória Extended Data Space.
Registro 4-1: NVMCON: Registro de controle de programação Flash
R/S-0(1) | R/C-0 | R/C-0 | R/W-0 | R/C-0 | R-0 | R/W-0 | R/C-0 |
WR | CARRIÇA | WRRR | NVMPIDL(5) | SFTSWP | P2ACTIV | RPDF(2) | URERR(2) |
bit 15 | bit 8 |
U-0 | U-0 | U-0 | U-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 |
— | — | — | — | NVMOP[3:0] | |||
bit 7 | bit 0 |
Lenda: | S = bit somente configurável | C = bit somente eliminável |
R = bit legível | W = bit gravável | U = bit não implementado, lido como '0' |
-n = Valor em POR | '1' = Bit está definido | '0' = Bit foi apagado x = Bit é desconhecido |
Observação
- Este bit também é redefinido em um Brown-out Reset (BOR).
- As operações de linha de buffer de RAM não estão disponíveis em todos os dispositivos; nesses casos, esses bits não são implementados e são lidos como '0'.
- A seleção dessas opções definirá o bit WRERR e limpará o bit WR.
- As operações de programa com palavras duplas requerem duas palavras de instrução adjacentes (24 bits cada), alinhadas em um limite de quatro palavras de instrução.
- Implementado apenas em dispositivos selecionados; consulte a folha de dados específica do dispositivo para obter detalhes.
Observação
- Este bit também é redefinido em um Brown-out Reset (BOR).
- As operações de linha de buffer de RAM não estão disponíveis em todos os dispositivos; nesses casos, esses bits não são implementados e são lidos como '0'.
- A seleção dessas opções definirá o bit WRERR e limpará o bit WR.
- As operações de programa com palavras duplas requerem duas palavras de instrução adjacentes (24 bits cada), alinhadas em um limite de quatro palavras de instrução.
- Implementado apenas em dispositivos selecionados; consulte a folha de dados específica do dispositivo para obter detalhes.
Registro 4-2: NVMKEY: Registro de chave de memória não volátil
U-0 | U-0 | U-0 | U-0 | U-0 | U-0 | U-0 | U-0 |
— | — | — | — | — | — | — | — |
bit 15 | bit 8 |
W-0 W-0 W-0 W-0 W-0 W-0 W-0 W-0 |
NVMKEY[7:0] |
bit 7 bit 0 |
Lenda: | ||
R = bit legível | W = bit gravável | U = bit não implementado, lido como '0' |
-n = Valor em POR | '1' = Bit está definido | '0' = Bit foi apagado x = Bit é desconhecido |
Instruções de operação da mesa
As instruções da tabela fornecem um método de transferência de dados entre o espaço de memória de programa e o espaço de memória de dados dos dispositivos PIC24 e dsPIC33. Um resumo das instruções da tabela usadas durante a programação da memória de programa Flash é fornecido nesta seção.
Existem quatro instruções básicas de tabela:
- TBLRDL: leitura de tabela baixa
- TBLRDH: Leitura da tabela alta
- TBLWTL: Gravação de tabela baixa
- TBLWTH: Gravação de tabela alta
As instruções TBLRDL e TBLWTL são usadas para ler e escrever em bits[15:0] do espaço de memória do programa. TBLRDL e TBLWTL podem acessar a memória do programa no modo Word ou 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 no modo Word ou Byte. Como a memória do programa tem apenas 24 bits de largura, as instruções TBLRDH e TBLWTH têm a capacidade de endereçar um byte superior da memória do programa que não existe. Este byte é chamado de 'byte fantasma'. Qualquer leitura do byte fantasma retorna 00h; uma gravação no byte fantasma não tem efeito.
GERAÇÃO DE ENDEREÇOS PARA OPERAÇÕES DE TABELA
A memória de programa 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 LSb do endereço da tabela será usado como 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 4-1 ilustra como a memória do programa é endereçada usando as instruções da tabela. Um endereço de memória de programa de 24 bits é formado usando os bits TBLPAG[7:0] e o Endereço Efetivo (EA) de um registrador W, especificado na instrução da tabela (o Contador de Programa de 24 bits é mostrado para referência). Os 23 bits superiores do EA são usados para selecionar a localização da memória do programa. Para as instruções da tabela de modo Byte, o LSb do registrador W EA é usado para escolher qual byte da palavra de memória de programa de 16 bits é endereçado. Um '1' seleciona bits[15:8], um '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, as instruções da tabela também especificam um registrador W (ou um ponteiro W para um local de memória) que é a fonte dos dados da memória do programa a serem escritos ou o destino para uma leitura da memória do programa. Para uma operação Table Write no modo Byte, os bits[15:8] do registrador Working de origem são ignorados.
BAIXO ACESSO À PALAVRA
As instruções TBLRDL e TBLWTL são usadas para acessar os 16 bits inferiores dos dados da memória do programa. O LSb do endereço do registrador W é ignorado para acessos à tabela em toda a palavra. Para acessos de bytes, o LSb do endereço do registrador W determina qual byte será lido. A Figura 4-2 ilustra as regiões de dados da memória do programa acessadas pelas instruções TBLRDL e TBLWTL.
ALTO ACESSO À PALAVRA
As instruções TBLRDH e TBLWTH são usadas para acessar os oito bits superiores dos dados da memória do programa. Estas instruções também suportam os modos Word ou Byte Access para ortogonalidade, mas o byte mais alto dos dados da memória do programa sempre retornará '0', como mostrado na Figura 4-3.
ARMAZENAMENTO DE DADOS NA MEMÓRIA DO PROGRAMA
Supõe-se que para a maioria das aplicações, o byte alto (PM[23:16]) não será usado para dados, fazendo com que a memória do programa pareça ter 16 bits de largura para armazenamento de dados. Recomenda-se que o byte superior dos dados do programa seja programado como NOP (00h ou FFh) ou como valor de código de operação ilegal (3Fh), para proteger o dispositivo contra execução acidental de dados armazenados. As instruções TBLRDH e TBLWTH são fornecidas principalmente para fins de programa/verificação de array e para aplicações que requerem armazenamento de dados compactados.
COMPORTAMENTO DO BIT DE MEMÓRIA DO PROGRAMA
Os bits na memória de programa Flash só podem ser programados de '1' a '0' e podem ser posteriormente apagados para '1'. A tentativa de definir um bit com uma sequência de programação não terá efeito.
USANDO INSTRUÇÕES DE LEITURA DE TABELA
As leituras de tabela requerem duas etapas. Primeiro, um ponteiro de endereço é configurado usando o registro TBLPAG e um dos registros W. Então, o conteúdo da memória do programa na localização do endereço pode ser lido.
o código examples em Example 4-2 e ExampO le 4-3 demonstra como ler uma palavra da memória do programa usando as instruções da tabela no modo Word.
Observação: As diretivas tblpage() e tbloffset() são fornecidas pelo montador Microchip para dispositivos dsPIC33 e PIC24. Estas diretivas selecionam os valores de registro TBLPAG e W apropriados para a instrução da tabela a partir de um valor de endereço de memória de programa. Consulte o “MPLAB® Assembler, Linker and Utilities for PIC24 MCUs and dsPIC® DSCs User's Guide” (DS51317) para obter mais informações.
TRAVAS DE SEGURANÇA DE ESCRITA DE MESA
As instruções de gravação de tabela não gravam diretamente na matriz do programa Flash. Em vez disso, as instruções fazem com que os dados sejam programados para serem carregados primeiro nas travas de retenção. Essas travas são mapeadas na memória no espaço de memória de configuração, normalmente começando em FA0000h, e só podem ser acessadas usando as instruções de gravação de tabela. Quando todas as travas de retenção forem carregadas, a operação real de programação da memória é iniciada pela execução de uma sequência especial de instruções.
Diferentes dispositivos implementam diferentes números de travas de retenção, com base em um projeto específico de matriz de programa (ou seja, o tamanho de programação de linha e o algoritmo de programação de linha). Consulte a folha de dados específica do dispositivo e/ou as especificações de programação para obter mais detalhes.
Executando uma escrita de duas palavras
As gravações de palavras são executadas para duas palavras por vez usando um par de instruções TBLWTH e TBLWTL. As sequências de código em Example 4-4 ou ExampO arquivo 4-5 (equivalente em C) pode ser usado para escrever dois locais de trava de memória de programa para serem programados no Flash usando o modo Word Write.
Autoprogramação em tempo de execução (RTSP)
O RTSP permite que o código do usuário modifique o conteúdo da memória do programa Flash. O RTSP é realizado usando instruções TBLRD (Table Read) e TBLWT (Table Write) e os registros de controle NVM. Os dispositivos PIC24 e dsPIC33 suportam as seguintes operações de programação Flash:
- Apagamentos de páginas Flash
- Programação de linha (baseada em trava ou baseada em RAM)
- Programação de palavras
A programação Flash via RTSP é realizada, seja com blocos de memória chamados linhas, ou com duas palavras de memória Flash. Antes da programação, um local de memória deve ser apagado. As operações de apagamento são executadas em blocos de memória, chamados páginas, que consistem em múltiplas linhas. O tamanho de uma linha varia de acordo com o dispositivo; consulte a folha de dados do dispositivo para obter detalhes. Normalmente, para dispositivos dsPIC33 e PIC24, uma página é definida como oito (8) linhas. Este documento usa examparquivos com 64 instruções por linha (512 instruções por página).
PROGRAMAÇÃO DE LINHA USANDO TRAVAS DE RETENÇÃO DE ESCRITA
Conforme discutido na Seção 4.2.7 “Travas de retenção de gravação de tabela”, os dispositivos que implementam programação de linha baseada em trava possuem travas de retenção que contêm os dados de programação. Antes da operação de programação propriamente dita, os dados de gravação devem ser carregados nas travas por meio de instruções TBLWT em ordem sequencial. Ao executar uma gravação de linha, as palavras de instrução devem ser carregadas nas travas como uma linha completa.
A sequência básica para programação RTSP é configurar um Table Pointer e, em seguida, executar uma série de instruções TBLWT para carregar os buffers. A programação é realizada configurando os bits de controle no registro NVMCON. Para exampPor exemplo, em um dispositivo com 64 linhas de instruções, um ciclo de programação consistiria em 64 instruções TBLWTL e 64 TBLWTH para carregar as travas de gravação, seguido por uma sequência de programação desbloqueando NVMCON e configurando o bit WR. Example 4-6 mostra um example do processo.
PROGRAMAÇÃO DE LINHA USANDO O RAM BUFFER
Dispositivos dsPIC33 e PIC24 selecionados permitem que a programação de linha seja executada diretamente a partir 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) registro(s) NVMSRCADR, que são carregados com o endereço RAM de dados contendo a primeira palavra de dados do programa a ser escrita.
Antes de executar a operação do programa, o espaço buffer na RAM deve ser carregado com a linha de dados a ser programada. A RAM pode ser carregada em formato compactado (compactado) 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, sendo o byte superior de cada outra palavra 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-4.
Depois que o buffer RAM é carregado, os ponteiros de endereço Flash, NVMADRL e NVMADRH, são carregados com o endereço inicial de 24 bits da linha Flash a ser gravada. Tal como acontece com a programação das travas de gravação, o processo é iniciado escrevendo a 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 linha de buffer RAM também implementam uma ou duas travas de gravação. Eles são carregados usando as instruções TBLWT e são usados para realizar operações de programação de palavras.
Algoritmos Gerais de Programação Flash
As operações de programação flash são controladas usando os seguintes registros de controle de memória não volátil (NVM):
- NVMCON
- NVMKEY
- NVMADRL/H
- NVMSRCADRL/H (alguns dispositivos)
Uma sequência de programação completa é necessária para programar ou apagar o Flash interno no modo RTSP. Definir o bit WR (NVMCON[15]) inicia a operação e o bit WR é automaticamente apagado quando a operação é concluída.
Ao executar operações de programação Flash na Partição Ativa (particularmente no modo Partição Padrão), a CPU irá parar até que a operação seja concluída. Ao programar a Partição Inativa, a CPU pode continuar a operar sem travar. As seções a seguir descrevem algoritmos de programação que exibem travamento e não travamento da CPU.
APAGAR MEMÓRIA DO PROGRAMA (PARTIÇÃO ATIVA)
- Defina os bits NVMOPx (NVMCOM[3:0]) como '0011' para configurar o apagamento de página e defina o bit WREN (NVMCOM[14]).
- Escreva o endereço inicial do bloco a ser apagado nos registradores NVMADRL/H.
- Desabilitar interrupções.
- Escreva 55h para NVMKEY.
- Escreva AAh para NVMKEY.
- Defina o bit WR (NVMCOM[15]) para iniciar o ciclo de apagamento.
- Execute duas instruções NOP.
- Restaurar interrupções (opcional).
Quando o apagamento é concluído, o bit WR é apagado automaticamente
PROGRAMAÇÃO DE LINHAS (PARTIÇÃO ATIVA, MODO DE PARTIÇÃO PADRÃO)
O usuário pode programar uma linha de memória Flash de programa por vez. Para isso, é necessário apagar a página que contém a linha desejada. O processo geral para programação de linhas para a Partição Ativa é:
- Leia oito linhas de memória de programa (512 instruções) e armazene na RAM de dados.
- Atualize os dados do programa na RAM com os novos dados desejados.
- Apague o bloco:
- a) Defina os bits NVMOPx (NVMCOM[3:0]) como '0011' para configurar o apagamento de página e defina o bit WREN (NVMCOM[14]).
- b) Escreva o endereço inicial do bloco a ser apagado nos registradores NVMADRL/H.
- c) Desabilitar interrupções.
- d) Escreva 55h para NVMKEY.
- e) Escreva AAh para NVMKEY.
- f) Defina o bit WR (NVMCOM[15]). O ciclo de apagamento começa e a CPU para durante o ciclo de apagamento. Quando o apagamento é concluído, o bit WR é apagado automaticamente.
- g) Restaurar interrupções (opcional).
- Escreva as primeiras 64 instruções da RAM de dados nos buffers de memória do programa (consulte a Seção 4.2.7 “Travas de retenção de gravação de tabela”) ou escreva o registrador NVMSRCADR com o endereço inicial dos dados armazenados na RAM.
- Grave o bloco de programa na memória Flash:
- a) Defina os bits NVMOPx como '0010' para configurar a programação de linha e defina o bit WREN.
- b) Desabilitar interrupções.
- c) Escreva 55h para NVMKEY.
- d) Escreva AAh para NVMKEY.
- e) Defina o bit WR. O ciclo de programação começa e a CPU para durante o ciclo de gravação. Quando a gravação na memória Flash é concluída, o bit WR é apagado automaticamente.
- f) Restaurar interrupções (opcional).
- Repita as etapas 4 e 5 usando as próximas 64 instruções disponíveis do bloco na RAM de dados, incrementando os endereços em NVMADRL/H, até que todas as 512 instruções sejam gravadas de volta na memória Flash.
Observação: Nem todos os dispositivos apresentarão travamento da CPU durante um ciclo de gravação ou apagamento. Para evitar travamentos, é recomendado evitar leituras ou gravações do aplicativo na linha que está sendo apagada ou gravada.
Para proteção contra operações acidentais, a sequência de início de gravação para NVMKEY é necessária antes de qualquer operação de apagamento ou programa. Após a execução do comando de programação, o usuário deve aguardar o tempo de programação até que a programação seja concluída. As duas instruções que seguem o início da sequência de programação devem ser NOPs.
Observação
- O número de linhas, blocos e travas de retenção pode variar de dispositivo para dispositivo; consulte a folha de dados específica do dispositivo para obter os números reais, bem como o código de referência completo da programação da memória Flash.
- Para dispositivos com uma única trava de retenção, a memória do programa Flash deve ser gravada por programação de palavras.
PROGRAMANDO UMA PÁGINA NA PARTIÇÃO INATIVA (MODOS DE PARTIÇÃO DUPLA)
A programação nos modos Dual Partition requer considerações especiais. Como a CPU é capaz de continuar executando instruções enquanto a partição inativa está sendo programada, não ocorrerão travamentos da CPU.
O algoritmo para apagar e reprogramar uma página de dados em um dos modos de Partição Dupla é o seguinte:
- Apague o bloco:
- a) Defina os bits NVMOPx (NVMCOM[3:0]) como '0011' para configurar o apagamento de página.
- b) Defina o bit WREN (NVMCOM[14]).
- c) Escreva o endereço inicial do bloco a ser apagado nos registros NVMADR com
o endereço da página. - d) Desabilitar interrupções.
- e) Escreva 55h para NVMKEY.
- f) Escreva AAh para NVMKEY.
- g) Defina o bit WR (NVMCOM[15]). O ciclo de apagamento começa e a CPU continuará funcionando.
- h) Quando o apagamento for concluído, o bit WR será limpo automaticamente e o NVM Write Complete Interrupt Flag (NVMIF) ocorrerá.
- i) Restaurar interrupções (opcional).
- Prepare os dados a serem programados preenchendo o buffer RAM; alternadamente, carregue as travas de gravação com instruções TBLWT com os dados da primeira linha de memória (64 instruções).
- Programe o bloco:
- a) Defina os bits NVMOPx (NVMCON[3:0]) como '0010' para configurar a programação de linha.
- b) Defina o bit WREN (NVMCON[14]).
- c) Escreva o endereço inicial do bloco a ser gravado nos registradores NVMADR com o endereço inicial da linha.
- d) Desabilitar interrupções.
- e) Escreva 55h para NVMKEY.
- f) Escreva AAh para NVMKEY.
- g) Defina o bit WR (NVMCOM[15]). O ciclo de gravação começa e a CPU continuará funcionando.
- h) Quando o apagamento for concluído, o bit WR será limpo automaticamente e o NVM Write Complete Interrupt Flag (NVMIF) ocorrerá.
- i) Restaurar interrupções (opcional).
- Repita as etapas 2 e 3 para programar cada uma das linhas restantes de dados na página apagada.
PROGRAMANDO TODA A PARTIÇÃO INATIVA (MODOS DE PARTIÇÃO DUPLA)
Para atualizar totalmente o código na partição inativa:
- Apague a partição inativa:
- a) Defina os bits NVMOPx (NVMCOM[3:0]) como '0100' para configurar o apagamento da partição inativa.
- b) Defina o bit WREN (NVMCOM[14]).
- c) Desabilitar interrupções.
- d) Escreva 55h para NVMKEY.
- e) Escreva AAh para NVMKEY.
- f) Defina o bit WR (NVMCOM[15]). O ciclo de apagamento começa e a CPU permanecerá funcionando durante o ciclo.
- g) Quando o apagamento é concluído, o bit WR é limpo automaticamente e ocorre o NVM Write Complete Interrupt Flag (NVMIF).
- h) Restaurar interrupções (opcional).
- Escreva cada página da partição inativa usando escrita de página, conforme descrito na Seção 4.4.3 “Programando uma página na partição inativa (modos de partição dupla)”.
- Verifique os dados gravados. Um método sugerido é realizar um CRC nos dados a serem gravados e verificar o valor do CRC na partição completa para garantir que os dados foram gravados corretamente.
ATUALIZANDO A PARTIÇÃO ATIVA USANDO UM BOOTLOADER
- Apague e programe toda a partição inativa conforme descrito na Seção 4.4.4 “Programando toda a partição inativa (modos de partição dupla)”.
- Leia o registro de configuração FBTSEQ da partição ativa.
- Diminua o valor em um e grave no FBTSEQ da partição inativa.
- Forçar uma troca de partição:
- a) Se travamentos da CPU não forem um problema, execute uma reinicialização do dispositivo. Como a partição inativa tem um número de sequência de inicialização menor, ela se tornará a partição ativa após a redefinição.
- b) Se uma parada da CPU não for aceitável, execute a instrução BOOTSWP.
VISIBILIDADE DO ESPAÇO DO PROGRAMA E ESPAÇO DE DADOS ESTENDIDO (PSV E EDS)
Para todos os dispositivos dsPIC33 e PIC24, as instruções da tabela (consulte a Seção 4.2 “Instruções de operação da tabela”) podem ser usadas para acessar dados dentro do espaço de memória do programa. Isto é útil quando os dados só precisam ser lidos ou gravados, um byte ou palavra por vez. Também é possível mapear páginas de 16K palavras do espaço de memória do programa nos 32 Kbytes superiores do espaço de endereço de dados. Isto permite uma expansão efetiva do espaço de dados além dos limites normais de endereçamento de 64 Kbytes, bem como um acesso transparente sem o uso de instruções de tabela. Todos os dispositivos dsPIC33 e PIC24 são capazes de mapear qualquer página do espaço de memória do programa implementado para o espaço de dados. Esse recurso é conhecido como Visibilidade do Espaço do Programa (PSV). Alguns dispositivos expandem o PSV mapeando certos periféricos para um intervalo específico de páginas de memória de programa virtual. Esse recurso é particularmente útil para periféricos, como o Advanced Graphics Controller, que possui altos requisitos de transferência de dados. Essa expansão do PSV é conhecida como Extended Data Space (EDS).
PSV e EDS são implementados como recursos da memória de dados. Eles são implementados de forma diferente para dispositivos dsPIC33 e PIC24. Para uma descrição detalhada, consulte o “Manual de Referência da Família dsPIC33/PIC24”, “Memória de Dados”. (dsPIC33, DS70595) e/ou “Memória de Dados” (PIC24, DS30009717).
PSV e barracas de instrução
Para obter mais informações sobre paradas de instrução usando PSV, consulte o “dsPIC33/PIC24 Family Reference Manual”, “dsPIC33E Enhanced CPU” (DS70005158).
CADASTRE-SE MAPA
Um resumo dos SFRs associados à memória de programa Flash de partição dupla é fornecido na Tabela 6-1.
Tabela 6-1: Registradores de funções especiais associados à memória de programa Flash(1)
File Nome | Bit 15 | Bit 14 | Bit 13 | Bit 12 | Bit 11 | Bit 10 | Bit 9 | Bit 8 | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Todas as redefinições(2) |
TBLPAG | — | — | — | — | — | — | — | — | Ponteiro de endereço de página de tabela | 0000 | |||||||
NVMCON | WR | CARRIÇA | WRRR | NVMPIDL | SFTSWP | P2ACTIV | RPDF | URERR | — | — | — | — | NVMOP[3:0] | 0000 | |||
NVMKEY | — | — | — | — | — | — | — | — | NVMKEY[7:0] | 0000 | |||||||
NVMSRCADRL | Endereço inicial do buffer de programação de RAM de dados | 0000 | |||||||||||||||
NVMSRCADRH | Endereço do buffer de programação da RAM de dados (somente operações EDS) | 0000 | |||||||||||||||
NVMADRL | Endereço de destino da memória de programa flash, byte inferior (ADDR[15:0]) | 0000 | |||||||||||||||
NVMADRH | — | — | — | — | — | — | — | — | Endereço de destino da memória de programa flash, byte superior (ADDR[23:16]) | 0000 |
Esta seção lista notas de aplicação relacionadas a esta seção do manual. Estas notas de aplicação podem não ser escritas especificamente para as famílias de produtos PIC24 ou dsPIC33, 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 à memória de programa Flash de partição dupla 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 PIC24 e dsPIC33.
HISTÓRICO DE REVISÕES
- Revisão A (março de 2014)
Versão original deste documento. - Revisão B (fevereiro de 2015)
Alterado o título e todas as ocorrências da frase “Dual Boot Flash Program Memory” para “Dual Partition Flash Program Memory” ou “Dual Partition Flash”. - Revisão C (novembro de 2021)
Adicionado 4.1.1.1 “Desativando interrupções”.
Atualizado 4.1.1 “Registradores de controle”, 4.4.2 “Programação de linha (partição ativa, modo de partição padrão)”, 4.4.3 “Programando uma página na partição inativa (modos de partição dupla)” e 4.4.4 “Programando todo o Partição inativa (modos de partição dupla)”. Ex atualizadoample 4-5, Ex.ample 4-6 e Examp4-7.
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 nenhum outro fabricante de semicondutores pode garantir a segurança de seu código. Proteção de 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á comprometida 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.
AMBA, Arm, Arm7, Arm7TDMI, Arm9, Arm11, Artisan, big.LITTLE, Cordio, CoreLink, CoreSight, Cortex, DesignStart, DynamIQ, Jazelle, Keil, Mali, Mbed, Mbed Enabled, NEON, POP, RealView, SecurCore, Socrates, Thumb, TrustZone, ULINK, ULINK2, ULINK-ME, ULINK-PLUS, ULINKpro, μVision, Versatile são marcas comerciais ou marcas registradas da Arm Limited (ou suas subsidiárias) nos EUA e/ou em outros lugares.
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.
© 2014-2021, Microchip Technology Incorporated e suas subsidiárias.
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/support
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
Telefone86-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 fichas técnicas do dispositivo. Este documento se aplica a todos os dispositivos dsPIC33/PIC24. Consulte a nota no início do capítulo “Dual Partition Flash Program Memory” na folha de dados do dispositivo atual para verificar se este documento é compatível com o dispositivo que você está usando. As folhas de dados do dispositivo e as seções do manual de referência da família estão disponíveis para download no site da Microchip Worldwide Website em: http://www.microchip.com.
Documentos / Recursos
![]() |
Memória de programa flash de partição dupla MICROCHIP PIC24 [pdf] Guia do Usuário Memória de programa flash de partição dupla PIC24, PIC24, memória de programa flash de partição dupla, memória de programa flash, memória de programa |