
Contoh ini menunjukkan penggunaan periferal CRC dalam mikrokontroler PIC18F47Q10. Modul CRC di Microcontrollers PIC adalah perangkat keras yang diimplementasikan oleh perangkat checksum yang menghitung CRC 16-bit dengan polinomial yang dapat diprogram. Ini digabungkan dengan pemindai memori untuk perhitungan CRC yang lebih cepat. Pemindai memori dapat secara otomatis menyediakan data ke modul CRC Contoh ini menggunakan parameter standar CRC-16-CCITT. Demo ini menghitung CRC dari memori program dan menyimpannya di area EEPROM pengontrol setelah memprogram perangkat untuk pertama kalinya. Pada power-up berikutnya, perangkat menghitung Flash CRC saat startup dan memeriksanya terhadap CRC yang disimpan di area EEPROM. Dalam hal ketidakcocokan eksekusi program menunjukkan kesalahan CRC. Pemeriksaan CRC ini dapat dijadwalkan secara berkala selama operasi perangkat untuk memastikan integritas flash.

Gambar 1: Flowchart Program
Dengan program lengkap dan kemampuan debug, Kit Evaluasi Nano Curiosity PIC18F47Q10 menawarkan dukungan lengkap untuk desain baru. Kit ini menggunakan MPLAB® X IDE dan MPLAB® Code Configurator (MCC), menyediakan akses ke periferal analog cerdas dan inti independen di PIC18F47Q10.

GAMBAR 2: PIC18F47Q10 CONIOSIOSIT NANO BOARD
MLROCHIP MPLAB X IDE, COMPILER, dan MPLAB COFFIGurator (MCC) Generator kode grafis digunakan di seluruh pengembangan firmware aplikasi untuk memberikan pengalaman pengguna yang mudah dan bebas repot. Berikut ini adalah versi alat yang digunakan untuk aplikasi demo ini:
Catatan: Untuk menjalankan demo, versi alat yang diinstal harus sama atau lebih lambat. Contoh ini tidak diuji dengan versi sebelumnya.
Mulailah dengan membuat proyek baru dan buka MCC
Konfigurasikan periferal perangkat keras
Buka Pengaturan Kontrol Jam yang ada di bawah menu dropdown "Sistem" di tab Project Resources .

Gambar 3: Kontrol Jam
Buka Pengaturan Bit Konfigurasi yang ada di bawah menu dropdown "System" di tab Project Resources .

Gambar 4: Bit Konfigurasi
Tambahkan periferal CRC, UART2, TMR0 dan NVM ke proyek.
Pastikan untuk menambahkan periferal yang ada di bawah menu dropdown driver di tab Sumber Daya Perangkat .

Gambar 5: Periferal
Konfigurasikan periferal CRC
Verifikasi bahwa CRC diaktifkan
Verifikasi bahwa menggunakan polinomial yang telah ditentukan sebelumnya diaktifkan
Pilih CRC-16-CCITT dari daftar polinomial yang telah ditentukan sebelumnya
Atur nilai benih ke 0xffff
Atur mode augmentation ke data yang tidak ditambah dengan 0
Atur Data Word Width (Bits) ke 16 (karena lebar data memori flash adalah 16-bit)
Verifikasi bahwa pemindai diaktifkan (kami akan menggunakan pemindai untuk mengambil data dari memori)

Gambar 6: Konfigurasi CRC
Verifikasi bahwa menghasilkan API EEPROM diatur (kami akan menggunakan API ini untuk menulis data EEPROM)

Gambar 7: Konfigurasi Memori
Dalam demo ini, UART2 digunakan untuk mengirimkan data pada jendela terminal untuk menampilkan nilai CRC yang disimpan dan dihitung serta pesan kesalahan jika ada ketidakcocokan dalam CRC terdeteksi.

Gambar 8: Konfigurasi UART2
Dalam timer demo ini 0 digunakan untuk menghasilkan acara berkala untuk memeriksa CRC dari memori program. Timer 0 periode dapat disesuaikan untuk mengubah frekuensi perhitungan CRC.

Gambar 9: Konfigurasi Timer 0
Konfigurasikan pin yang digunakan pada perangkat
Setel RE0 sebagai pin output menggunakan PIN Manager: Tampilan Grid. LED terhubung ke PIN RE0.
Pilih RD0 sebagai EUSArt2: output TX2.
RB7 digunakan untuk RX2.

Gambar 10: Pin Manager: Tampilan Grid
Tambahkan nama khusus ke pin output RE0 sebagai LED, menggunakan Sumber Daya Proyek → Sistem → Pin. Centang kotak centang "Mulai Tinggi" untuk LED Pin RE0 untuk mematikan LED.

Gambar 11: Manajer Pin
Buka file Main.c.
Langkah -langkah untuk menghitung Flash CRC menggunakan API yang dihasilkan MCC:
CRC_SetScannerAddressLimit(START_ADDRESS, END_ADDRESS);
(Alamat mulai yang digunakan dalam demo ini adalah 0x00000 dan alamat akhir yang digunakan adalah 0x7ffe. Jadi total ukuran blok memori yang digunakan untuk perhitungan CRC adalah 32kb.)
Catatan: Jika ukuran program melebihi 32kb maka tingkatkan ukuran blok dengan mengubah alamat akhir
CRC_StartScanner();
while(CRC_IsCrcBusy() || CRC_IsScannerBusy());
CRC_GetCalculatedResult(false,0x00);

Gambar 12: Program perangkat
//#define ERASE_EEPROM_CRC dalam kode, untuk menghapus lokasi EEPROM, yang menyimpan CRC. Ini memastikan bahwa tidak ada nilai CRC yang salah atau dihitung sebelumnya yang disimpan sebelumnya di lokasi itu. Bangun proyek dan program perangkat. Amati pesan yang ditampilkan di jendela terminal.(Emulator terminal apa pun seperti MPLAB Data Visualizer dapat digunakan. Atur Baud Rate sebagai 9600.)

Gambar 13: Pesan Hapus Eeprom
#define ERASE_EEPROM_CRC . Bangun proyek dan program perangkat.
Gambar 14: Perhitungan CRC pertama kali

Gambar 15: CRC berkala
Catatan: CRC pada Gambar 15 dihitung menggunakan Compiler V2.41 dengan level optimisasi -0.
Modul CRC adalah generator checksum yang diimplementasikan perangkat keras yang dapat menghitung CRC 16-bit dengan polinomial yang dapat diprogram. Ini juga menggunakan fitur pemindai memori yang menyediakan flash baca otomatis untuk perhitungan CRC. Mengkonfigurasi modul CRC mudah menggunakan MCC GUI. Terlepas dari konfigurasi modul, MCC menghasilkan API yang siap digunakan, untuk perhitungan bebas kerumitan CRC dari memori program, menggunakan CRC dan periferal perangkat keras pemindaian memori di mikrokontroler PIC.