
Dieses Beispiel zeigt die Verwendung von CRC Peripheral in PIC18F47Q10 -Mikrocontroller. Das CRC-Modul in PIC-Mikrocontrollern ist Hardware implementierten Prüfsummengenerator, der 16-Bit-CRC mit programmierbarem Polynom berechnet. Es ist mit Speicherscanner für schnellere CRC -Berechnungen gekoppelt. Der Speicherscanner kann automatisch Daten für das CRC-Modul bereitstellen. In diesem Beispiel wird CRC-16-CCITT-Standardparameter verwendet. Diese Demo berechnet die CRC des Programmspeichers und speichert sie im EEPROM -Bereich des Controllers, nachdem Sie das Gerät erstmals programmiert haben. Bei den nachfolgenden Einschaltanschlüssen berechnet das Gerät den Flash CRC beim Start und überprüft es mit dem in EEPROM-Bereich gespeicherten CRC. Bei Nichtübereinstimmung wird die Programmausführung CRC -Fehler angibt. Diese CRC -Überprüfung kann während des Gerätebetriebs regelmäßig geplant werden, um die Flash -Integrität zu gewährleisten.

Abbildung 1: Programmflussdiagramm
Mit vollständigen Programm- und Debug -Funktionen bietet das Nano -Bewertungskit von PIC18F47Q10 die Curiosity Nano Evaluation Kit vollständig für das neue Design. Das Kit verwendet den MPLAB® X IDE- und MPLAB® -Codekonfigurator (MCC) und bietet Zugriff auf die intelligenten analogen und zentralen unabhängigen Peripheriegeräte auf dem PIC18F47Q10.

Abbildung 2: PIC18F47Q10 Curiosity Nano Board
Der grafische Codegenerator (MPLAB-Codekonfigurator) von Microchip MPLAB X ID, Compiler und MPLAB Code (MCC) werden in der gesamten Anwendungsfirmwareentwicklung verwendet, um eine einfache und problemlose Benutzererfahrung zu bieten. Im Folgenden finden Sie die für diese Demo -Anwendung verwendeten Werkzeugversionen:
Hinweis: Zum Ausführen der Demo müssen die installierten Werkzeugversionen gleich oder höher sein. Dieses Beispiel wird nicht mit früheren Versionen getestet.
Beginnen Sie mit der Erstellung eines neuen Projekts und öffnen Sie MCC
Konfigurieren Sie die Hardware -Peripheriegeräte
Öffnen Sie das Clock Control -Setup, das im Dropdown -Menü "System" auf der Registerkarte Projektressourcen vorhanden ist.

Abbildung 3: Taktregelung
Öffnen Sie das im Dropdown -Menü "System" vorhandene Konfigurationsbits -Setup auf der Registerkarte Projektressourcen .

Abbildung 4: Konfigurationsbits
Fügen Sie das Projekt CRC-, UART2-, TMR0- und NVM -Peripheriegeräte hinzu.
Stellen Sie sicher, dass die Peripheriegeräte, die im Dropdown -Menü der Treiber auf der Registerkarte "Geräteressourcen" vorhanden sind, hinzufügen.

Abbildung 5: Peripheriegeräte
Konfigurieren Sie das CRC -Peripherieur
Stellen Sie sicher, dass CRC aktiviert ist
Stellen Sie sicher, dass die Verwendung vordefinierter Polynom aktiviert ist
Wählen Sie CRC-16-CCITT aus der Liste des vordefinierten Polynoms
Stellen Sie den Samenwert auf 0xffff ein
Setzen Sie den Augmentationsmodus auf Daten, die nicht mit 0er erweitert sind
Setzen Sie die Datenwortbreite (Bits) auf 16 (als Flash-Speicherdatenbreite 16-Bit).
Stellen Sie sicher, dass der Scanner aktiviert ist (wir verwenden Scanner, um Daten aus dem Speicher abzurufen).

Abbildung 6: CRC -Konfiguration
Stellen Sie sicher, dass die Generierung von EEPROM -APIs festgelegt ist (wir werden diese APIs verwenden, um EEPROM -Daten zu schreiben).

Abbildung 7: Speicherkonfiguration
In dieser Demo wird UART2 verwendet, um Daten im Terminalfenster zu übertragen, um den gespeicherten und berechneten CRC -Wert sowie die Fehlermeldung anzuzeigen, wenn in der CRC ein Missverhältnis feststellt.

Abbildung 8: UART2 -Konfiguration
In diesem Demo -Timer wird 0 verwendet, um ein regelmäßiges Ereignis zur Überprüfung des CRC des Programmspeichers zu generieren. Der Zeitraum von Timer 0 kann eingestellt werden, um die CRC -Berechnungsfrequenz zu ändern.

Abbildung 9: Timer 0 -Konfiguration
Konfigurieren Sie die auf dem Gerät verwendeten Stifte
Setzen Sie RE0 als Ausgabestift mit Pin Manager: Grid Ansicht. LED ist mit Pin RE0 verbunden.
Wählen Sie RD0 als EUSART2: TX2 Ausgang.
RB7 für RX2 verwendet.

Abbildung 10: PIN -Manager: Grid -Ansicht
Fügen Sie dem RE0 -Ausgangspin benutzerdefinierter Name als LED hinzu, wobei die Projektressourcen → System → Pins verwendet werden. Aktivieren Sie das Kontrollkästchen "High High" für LED -PIN RE0, um die LED auszuschalten.

Abbildung 11: PIN -Manager
Öffnen Sie die Main.c -Datei.
Schritte zur Berechnung von Flash CRC mit MCC erzeugt APIs:
CRC_SetScannerAddressLimit(START_ADDRESS, END_ADDRESS);
(Die in dieser Demo verwendete Startadresse ist 0x00000 und die verwendete Endadresse beträgt 0x7ffe. Die Gesamtblockgröße des für die CRC -Berechnung verwendeten Speichers beträgt also 32 KB.)
Hinweis: Wenn die Programmgröße 32 KB überschreitet, erhöhen Sie die Blockgröße, indem Sie die Endadresse ändern
CRC_StartScanner();
while(CRC_IsCrcBusy() || CRC_IsScannerBusy());
CRC_GetCalculatedResult(false,0x00);

Abbildung 12: Programmieren Sie das Gerät
//#define ERASE_EEPROM_CRC Firmware früher geändert wird. Dies stellt sicher, dass es keinen falschen oder früher berechneten CRC -Wert gibt, der zuvor an diesem Ort gespeichert wurde. Erstellen Sie das Projekt und programmieren Sie das Gerät. Beobachten Sie die im Terminalfenster angezeigte Nachricht.(Jeder Terminalemulator wie MPLAB Data Visualizer kann verwendet werden. Setzen Sie die Baudrate als 9600.)

Abbildung 13: EEPROM -Löschennachricht
#define ERASE_EEPROM_CRC . Erstellen Sie das Projekt und programmieren Sie das Gerät.
Abbildung 14: erstmalige CRC -Berechnung

Abbildung 15: Periodischer CRC
HINWEIS: CRC in Abbildung 15 wird unter Verwendung von Compiler v2.41 mit -0 Optimierungsstufe berechnet.
Das CRC-Modul ist ein Hardware-implementierter Prüfsummengenerator, der 16-Bit-CRC mit programmierbarem Polynom berechnen kann. Es wird auch eine Speicher -Scanner -Funktion verwendet, die eine automatische Flash -Lesen für CRC -Berechnungen bietet. Das Konfigurieren des CRC -Moduls ist mit der MCC -GUI einfach. Abgesehen von der Modulkonfiguration generiert MCC bereit für die Verwendung von APIs, um die problemlose Berechnung des CRC des Programmspeichers mit CRC- und Speicher -Scan -Hardware -Hardware -Peripherie in den PIC -Mikrocontrollern zu verwenden.