
Cet exemple montre l'utilisation du périphérique CRC dans le microcontrôleur PIC18F47Q10. Le module CRC dans les microcontrôleurs PIC est un générateur de somme de contrôle implémenté en matériel qui calcule le CRC 16 bits avec un polynôme programmable. Il est associé à un scanner de mémoire pour les calculs CRC plus rapides. Le scanner de mémoire peut fournir automatiquement des données au module CRC Cet exemple utilise des paramètres standard CRC-16-CITT. Cette démo calcule le CRC de la mémoire du programme et la stocker dans la zone EEPROM du contrôleur après la programmation de l'appareil pour la première fois. Sur les aliments ultérieurs, l'appareil calcule le CRC Flash au démarrage et le vérifie contre le CRC stocké dans la zone EEPROM. En cas de décalage, l'exécution du programme indique une erreur CRC. Cette vérification CRC peut être planifiée périodiquement pendant le fonctionnement de l'appareil pour assurer l'intégrité du flash.

Figure 1: Organigramme du programme
Avec des capacités complètes de programme et de débogage, le kit d'évaluation PIC18F47Q10 Curiosity Nano offre une prise en charge complète du nouveau design. Le kit utilise le configurateur de code MPLAB® X IDE et MPLAB® (MCC), donnant accès aux périphériques analogiques et noyaux intelligents intelligents sur le PIC18F47Q10.

Figure 2: PIC18F47Q10 Curiosity Nano Board
Le générateur graphique Graphical de code GLAB X IDE, compilateur et MPLab (MCC) Free MPLAB X IDE, compilateur et MCC) tout au long du développement du micrologiciel d'application pour fournir une expérience utilisateur facile et sans tracas. Voici les versions d'outils utilisées pour cette application de démonstration:
Remarque: Pour exécuter la démo, les versions d'outils installées doivent être identiques ou ultérieures. Cet exemple n'est pas testé avec les versions précédentes.
Commencez par créer un nouveau projet et ouvrir MCC
Configurer les périphériques matériels
Ouvrez la configuration de la commande d'horloge présente dans le menu déroulant "Système" dans l'onglet Ressources du projet .

Figure 3: Contrôle de l'horloge
Ouvrez la configuration des bits de configuration présente dans le menu déroulant "Système" dans l'onglet Ressources du projet .

Figure 4: bits de configuration
Ajoutez des périphériques CRC, UART2, TMR0 et NVM au projet.
Assurez-vous d'ajouter des périphériques présents dans le menu déroulant des pilotes dans l'onglet Ressources de l'appareil .

Figure 5: périphériques
Configurer le périphérique CRC
Vérifiez que CRC est activé
Vérifiez que l'utilisation du polynôme prédéfini est activée
Sélectionnez CRC-16-CITCT dans la liste du polynôme prédéfini
Définissez la valeur des semences sur 0xffff
Définir le mode d'augmentation sur les données non augmentées avec 0
Définissez la largeur des données de données (bits) sur 16 (comme la largeur des données de mémoire flash est 16 bits)
Vérifiez que le scanner est activé (nous utiliserons le scanner pour récupérer les données à partir de la mémoire)

Figure 6: Configuration CRC
Vérifiez que générer des API EEPROM est définie (nous utiliserons ces API pour écrire des données EEPROM)

Figure 7: Configuration de la mémoire
Dans cette démo, UART2 est utilisé pour transmettre des données sur la fenêtre du terminal pour afficher la valeur CRC stockée et calculée ainsi que le message d'erreur s'il y a un décalage dans le CRC est détecté.

Figure 8: Configuration UART2
Dans cette démo, le temporisateur 0 est utilisé pour générer un événement périodique pour vérifier le CRC de la mémoire du programme. Timer 0 La période peut être ajustée pour modifier la fréquence de calcul CRC.

Figure 9: Configuration de la minuterie 0
Configurer les broches utilisées sur l'appareil
Définissez RE0 en tant que broche de sortie à l'aide de Pin Manager: View Grid. La LED est connectée à PIN RE0.
Sélectionnez RD0 comme sortie EUSART2: TX2.
RB7 utilisé pour RX2.

Figure 10: gestionnaire de broches: vue de la grille
Ajoutez le nom personnalisé à la broche de sortie RE0 en tant que LED, en utilisant les ressources du projet → Système → Pins. Cochez la case "Démarrer High" pour la broche LED RE0 pour éteindre la LED.

Figure 11: Gestionnaire de broches
Ouvrir le fichier main.c.
Étapes pour calculer Flash CRC à l'aide d'API générées par MCC:
CRC_SetScannerAddressLimit(START_ADDRESS, END_ADDRESS);
(L'adresse de démarrage utilisée dans cette démo est 0x00000 et l'adresse finale utilisée est 0x7ffe. Ainsi, la taille totale du bloc de la mémoire utilisée pour le calcul CRC est de 32 Ko).
Remarque: si la taille du programme dépasse 32 Ko, augmentez la taille du bloc en modifiant l'adresse finale
CRC_StartScanner();
while(CRC_IsCrcBusy() || CRC_IsScannerBusy());
CRC_GetCalculatedResult(false,0x00);

Figure 12: Programmez l'appareil
//#define ERASE_EEPROM_CRC dans le code, pour effacer l'emplacement EEPROM, qui stocke le CRC. Cela garantit qu'il n'y a pas de valeur CRC calculée incorrecte ou précédemment stockée précédemment à cet endroit. Construisez le projet et programmez l'appareil. Observez le message affiché sur la fenêtre du terminal.(Tout émulateur de terminal tel que le visualiseur de données MPLAB peut être utilisé. Définir le taux de bauds comme 9600.)

Figure 13: Eeprom Effacer le message
#define ERASE_EEPROM_CRC . Construisez le projet et programmez l'appareil.
Figure 14: Calcul CRC pour la première fois

Figure 15: CRC périodique
Remarque: CRC dans la figure 15 est calculé à l'aide du compilateur v2.41 avec -0 niveau d'optimisation.
Le module CRC est un générateur de somme de contrôle implémenté en matériel qui peut calculer le CRC 16 bits avec le polynôme programmable. Il utilise également une fonctionnalité de scanner de mémoire qui fournit une lecture flash automatique pour les calculs CRC. La configuration du module CRC est facile à l'aide de l'interface graphique MCC. En dehors de la configuration du module, MCC génère des API prêtes à l'emploi, pour le calcul sans tracas du CRC de la mémoire du programme, en utilisant CRC et le périphérique matériel de balayage de mémoire dans les microcontrôleurs PIC.