
Este ejemplo demuestra el uso de CRC periférico en el microcontrolador PIC18F47Q10. El módulo CRC en los microcontroladores PIC es el generador de suma de comprobación implementado que calcula el CCR de 16 bits con polinomio programable. Se combina con el escáner de memoria para cálculos de CRC más rápidos. El escáner de memoria puede proporcionar automáticamente datos al módulo CRC Este ejemplo utiliza parámetros estándar CRC-16-CCITT. Esta demostración calcula el CRC de la memoria del programa y la almacena en el área EEPROM del controlador después de programar el dispositivo por primera vez. En los enchufes posteriores, el dispositivo calcula el Flash CRC al inicio y lo verifica con el CRC almacenado en el área de EEPROM. En caso de desajuste, la ejecución del programa indica un error CRC. Esta verificación de CRC se puede programar periódicamente durante la operación del dispositivo para garantizar la integridad Flash.

Figura 1: diagrama de flujo del programa
Con el programa completo y las capacidades de depuración, el kit PIC18F47Q10 Curiosity Nano Evaluation ofrece soporte completo para el nuevo diseño. El kit utiliza el configurador de código MPLAB® X IDE y MPLAB® (MCC), proporcionando acceso a los periféricos independientes analógicos y centrales inteligentes en el PIC18F47Q10.

Figura 2: PIC18F47Q10 Curiosity Nano Board
El generador de código gráfico Microchip's Mplab X IDE, compilador y configurador de código MPLAB (MCC) se usa en todo el desarrollo de firmware de aplicaciones para proporcionar una experiencia de usuario fácil y sin problemas. Las siguientes son las versiones de herramientas utilizadas para esta aplicación de demostración:
Nota: Para ejecutar la demostración, las versiones de la herramienta instalada deben ser las mismas o posteriores. Este ejemplo no se prueba con versiones anteriores.
Comience creando un nuevo proyecto y abre MCC
Configurar los periféricos de hardware
Abra la configuración de control del reloj presente en el menú desplegable "Sistema" en la pestaña Recursos del proyecto .

Figura 3: Control del reloj
Abra la configuración de Bits de configuración presente en el menú desplegable "Sistema" en la pestaña Recursos del proyecto .

Figura 4: Bits de configuración
Agregue los periféricos CRC, UART2, TMR0 y NVM al proyecto.
Asegúrese de agregar periféricos presentes en el menú desplegable de controladores en la pestaña de recursos del dispositivo .

Figura 5: Periféricos
Configurar el periférico CRC
Verifique que CRC esté habilitado
Verifique que el uso de polinomio predefinido esté habilitado
Seleccione CRC-16-CCITT de la lista de polinomiales predefinidos
Establezca el valor de la semilla en 0xffff
Establecer el modo de aumento en datos no aumentados con 0
Establecer el ancho de palabras de datos (bits) a 16 (ya que el ancho de datos de memoria flash es de 16 bits)
Verifique que el escáner esté habilitado (utilizaremos el escáner para obtener datos de la memoria)

Figura 6: Configuración de CRC
Verifique que se establezca API de Generación de EEPROM (utilizaremos estas API para escribir datos EEPROM)

Figura 7: Configuración de la memoria
En esta demostración, UART2 se usa para transmitir datos en la ventana del terminal para mostrar el valor de CRC almacenado y calculado, así como el mensaje de error si se detecta algún desajuste en el CRC.

Figura 8: Configuración de UART2
En este temporizador de demostración, 0 se utiliza para generar un evento periódico para verificar el CRC de la memoria del programa. El período del temporizador 0 se puede ajustar para cambiar la frecuencia de cálculo de CRC.

Figura 9: Configuración del temporizador 0
Configurar los pines utilizados en el dispositivo
Establezca RE0 como pin de salida usando PIN Manager: Vista de cuadrícula. LED está conectado al PIN RE0.
Seleccione RD0 como EUSART2: salida TX2.
RB7 utilizado para RX2.

Figura 10: Administrador de PIN: Vista de cuadrícula
Agregue el nombre personalizado al pin de salida RE0 como LED, utilizando recursos del proyecto → Sistema → PINS. Marque la casilla de verificación "Inicio alto" para el pin RE0 del LED para apagar el LED.

Figura 11: Administrador de PIN
Abra el archivo main.c.
Pasos para calcular Flash CRC usando API generadas por MCC:
CRC_SetScannerAddressLimit(START_ADDRESS, END_ADDRESS);
(La dirección de inicio utilizada en esta demostración es 0x00000 y la dirección final utilizada es 0x7ffe. Por lo tanto, el tamaño total del bloque de la memoria utilizada para el cálculo de CRC es de 32 kb).
Nota: Si el tamaño del programa excede los 32 kb, aumente el tamaño del bloque cambiando la dirección final
CRC_StartScanner();
while(CRC_IsCrcBusy() || CRC_IsScannerBusy());
CRC_GetCalculatedResult(false,0x00);

Figura 12: programar el dispositivo
//#define ERASE_EEPROM_CRC en el código, para borrar la ubicación EEPROM, que almacena el CRC. Esto se asegura de que no haya ningún valor CRC incorrecto o calculado anteriormente almacenado previamente en esa ubicación. Construya el proyecto y programa el dispositivo. Observe el mensaje que se muestra en la ventana del terminal.(Se puede usar cualquier emulador terminal como MPLAB Data Visualizer. Establezca la velocidad de baudios como 9600).

Figura 13: Mensaje de borrado de EEPROM
#define ERASE_EEPROM_CRC . Construya el proyecto y programa el dispositivo.
Figura 14: Cálculo de CRC por primera vez

Figura 15: CRC periódico
Nota: La CRC en la Figura 15 se calcula utilizando el compilador V2.41 con el nivel de optimización -0.
El módulo CRC es un generador de suma de comprobación implementado que puede calcular CRC de 16 bits con polinomio programable. También utiliza una función de escáner de memoria que proporciona una lectura automática de flash para los cálculos de CRC. Configurar el módulo CRC es fácil utilizando la GUI MCC. Además de la configuración del módulo, MCC genera API listas para usar, para el cálculo sin problemas del CRC de la memoria del programa, utilizando el periférico de hardware CRC y escaneo de memoria en los microcontroladores PIC.