
Este exemplo demonstra o uso de CRC periférico no microcontrolador PIC18F47Q10. O módulo CRC em microcontroladores PIC é um gerador de soma de verificação implementado em hardware, que calcula o CRC de 16 bits com o polinômio programável. É acoplado ao scanner de memória para cálculos mais rápidos do CRC. O scanner de memória pode fornecer automaticamente dados ao módulo CRC Este exemplo usa parâmetros padrão CRC-16-CCITT. Essa demonstração calcula o CRC da memória do programa e o armazenou na área da EEPROM do controlador depois de programar o dispositivo pela primeira vez. Nos power-ups subsequentes, o dispositivo calcula o Flash CRC na inicialização e o verifica contra o CRC armazenado na área de EEPROM. No caso de incompatibilidade, a execução do programa é indica erro de CRC. Essa verificação do CRC pode ser agendada periodicamente durante a operação do dispositivo para garantir a integridade do flash.

Figura 1: Fluxograma de programa
Com recursos completos de programas e depuração, o kit de avaliação de nano de nano de curiosidade PIC18F47Q10 oferece suporte completo para o novo design. O kit usa o MPLAB® X IDE e o MPLAB® Code Configurator (MCC), fornecendo acesso aos periféricos analógicos e independentes de núcleo inteligentes no PIC18F47Q10.

Figura 2: PIC18F47Q10 CURIOSOSIDADE NANO CONSELHO
O gerador de código gráfico do MPLAB X IDE, compilador e MPLAB do Microchip (MCC) é usado em todo o desenvolvimento do firmware do aplicativo para fornecer uma experiência fácil e sem complicações. A seguir, estão as versões da ferramenta usadas para este aplicativo de demonstração:
Nota: Para executar a demonstração, as versões da ferramenta instalada devem ser as mesmas ou posterior. Este exemplo não é testado com versões anteriores.
Comece criando um novo projeto e aberto MCC
Configure os periféricos de hardware
Abra a configuração do controle do relógio presente no menu suspenso "System" na guia Recursos do Projeto .

Figura 3: Controle do relógio
Abra a configuração dos bits de configuração presente no menu suspenso "System" na guia Recursos do Projeto .

Figura 4: Bits de configuração
Adicione os periféricos CRC, UART2, TMR0 e NVM ao projeto.
Certifique -se de adicionar periféricos presentes no menu suspenso Drivers na guia Recursos de dispositivo .

Figura 5: Periféricos
Configure o CRC periférico
Verifique se o CRC está ativado
Verifique se o uso de polinômio predefinido está ativado
Selecione CRC-16-CCITT da lista de polinômios predefinidos
Defina o valor da semente como 0xffff
Defina o modo de aumento para dados não aumentados com 0
Defina a largura da palavra de dados (bits) como 16 (como a largura dos dados da memória flash é de 16 bits)
Verifique se o scanner está ativado (usaremos o scanner para buscar dados da memória)

Figura 6: Configuração do CRC
Verifique se Gerate EEPROM APIs está definido (usaremos essas APIs para escrever dados da EEPROM)

Figura 7: Configuração de memória
Nesta demonstração, o UART2 é usado para transmitir dados na janela do terminal para exibir o valor CRC armazenado e calculado, bem como a mensagem de erro se houver alguma incompatibilidade no CRC.

Figura 8: Configuração UART2
Nesse cronômetro de demonstração 0 é usado para gerar um evento periódico para verificar o CRC da memória do programa. O período do timer 0 pode ser ajustado para alterar a frequência de cálculo do CRC.

Figura 9: Configuração do timer 0
Configure os pinos usados no dispositivo
Defina o RE0 como pino de saída usando o gerenciador de pinos: visualização da grade. O LED está conectado ao PIN RE0.
Selecione RD0 como EUSART2: Saída TX2.
RB7 usado para RX2.

Figura 10: Gerente de PIN: Visualização da grade
Adicione o nome personalizado ao pino de saída RE0 como LED, usando recursos do projeto → Sistema → pinos. Verifique a caixa de seleção "Start High" para o pino LED RE0 para desligar o LED.

Figura 11: Gerente de PIN
Open Main.c Arquivo.
Etapas para calcular o Flash CRC usando APIs geradas por MCC:
CRC_SetScannerAddressLimit(START_ADDRESS, END_ADDRESS);
(O endereço inicial usado nesta demonstração é 0x00000 e o endereço final usado é 0x7ffe. Portanto, o tamanho total do bloco da memória usado para o cálculo do CRC é de 32kb.)
Nota: Se o tamanho do programa exceder 32kb, aumente o tamanho do bloco, alterando o endereço final
CRC_StartScanner();
while(CRC_IsCrcBusy() || CRC_IsScannerBusy());
CRC_GetCalculatedResult(false,0x00);

Figura 12: Programe o dispositivo
//#define ERASE_EEPROM_CRC no código, para apagar o local da EEPROM, que armazena o CRC. Isso garante que não haja nenhum valor de CRC calculado incorreto ou anterior armazenado anteriormente nesse local. Crie o projeto e programe o dispositivo. Observe a mensagem exibida na janela do terminal.(Qualquer emulador de terminal como o Visualizador de dados MPLAB pode ser usado. Defina a taxa de transmissão como 9600.)

Figura 13: Mensagem de apagamento da EEPROM
#define ERASE_EEPROM_CRC . Crie o projeto e programe o dispositivo.
Figura 14: Cálculo da CRC pela primeira vez

Figura 15: CRC periódico
Nota: O CRC na Figura 15 é calculado usando o compilador v2.41 com o nível de otimização -0.
O módulo CRC é um gerador de soma de verificação implementado em hardware que pode calcular o CRC de 16 bits com o polinômio programável. Ele também usa um recurso de scanner de memória que fornece uma leitura automática de flash para cálculos de CRC. Configurar o módulo CRC é fácil usando a GUI da MCC. Além da configuração do módulo, o MCC gera APIs prontos para usar, para o cálculo livre de complicações do CRC da memória do programa, usando o CRC e o periférico de hardware de verificação de memória nos microcontroladores PIC.