
Этот пример демонстрирует использование периферийного устройства CRC в микроконтроллере PIC18F47Q10. Модуль CRC в PIC Microcontrollers-это аппаратный реализованный генератор контрольной суммы, который вычисляет 16-битный CRC с программируемым полиномом. Он в сочетании с сканером памяти для более быстрых расчетов CRC. Сканер памяти может автоматически предоставлять данные в модуле CRC В этом примере используются стандартные параметры CRC-16-CCITT. Эта демонстрация вычисляет CRC памяти программы и сохраняет ее в области EEPROM контроллера после программирования устройства в первый раз. На последующих питаниях устройство вычисляет Flash CRC при запуске и проверяет его на CRC, хранящуюся в области EEPROM. В случае несоответствия выполнение программы указывает на ошибку CRC. Эта проверка CRC может периодически планировать во время работы устройства, чтобы обеспечить целостность вспышки.

Рисунок 1: Программная схема
Благодаря полному программному и отладкому возможностям, набор для оценки Nano PIC18F47Q10 предлагает полную поддержку нового дизайна. В комплекте используется конфигуратор кода MPLAB® X IDE и MPLAB® (MCC), обеспечивая доступ к интеллектуальному аналоговым и основным независимым периферийным устройствам на PIC18F47Q10.

Рисунок 2: PIC18F47Q10 Curiosity Nano Poard
Бесплатный графический генератор MPLAB X IDE, компилятор и конфигуратор кода MPLAB (MCC) используется по всему разработке прошивки приложений, чтобы обеспечить простой и беспрепятственный пользовательский опыт. Ниже приведены версии инструментов, используемые для этого демонстрационного приложения:
Примечание. Для запуска демонстрации установленные версии инструмента должны быть такими же или более поздними. Этот пример не проверяется с предыдущими версиями.
Начните с создания нового проекта и откройте MCC
Настройте аппаратные периферийные устройства
Откройте настройку управления часами , присутствующую в раскрывающемся меню «Система» на вкладке «Ресурсы проекта» .

Рисунок 3: Управление часами
Откройте настройку конфигурации битов , присутствующих в разделе «Система», на вкладке «Ресурсы проекта» .

Рисунок 4: Биты конфигурации
Добавьте в проект CRC, UART2, TMR0 и NVM.
Обязательно добавьте периферийные устройства, присутствующие в выпущенном меню драйверов на вкладке «Ресурсы устройства» .

Рисунок 5: Периферийные устройства
Настройка периферийного устройства CRC
Убедитесь, что CRC включен
Убедитесь, что использование предварительно определенного полинома включено
Выберите CRC-16-CCITT в списке предварительно определенных полиномов
Установите значение семян на 0xffff
Установить режим увеличения на данные, не дополненные 0
Установите ширину слов данных (биты) на 16 (так как ширина данных флэш-памяти составляет 16-бит)
Убедитесь, что сканер включен (мы будем использовать сканер для извлечения данных из памяти)

Рисунок 6: Конфигурация CRC
Убедитесь, что создание API eEPROM установлено (мы будем использовать эти API для написания данных EEPROM)

Рисунок 7: Конфигурация памяти
В этой демонстрации UART2 используется для передачи данных в окне терминала для отображения хранимого и вычисленного значения CRC, а также сообщения об ошибке, если обнаружено какое -либо несоответствие в CRC.

Рисунок 8: Конфигурация UART2
В этом демонстрационном таймере 0 используется для создания периодического события для проверки CRC памяти программы. Период таймера 0 может быть скорректирован, чтобы изменить частоту расчета CRC.

Рисунок 9: Конфигурация таймера 0
Настройте контакты, используемые на устройстве
Установите RE0 в качестве выходного вывода с помощью PIN -диспетчера: сетка. Светодиод подключен к PIN RE0.
Выберите RD0 как EUSART2: TX2 Вывод.
RB7 используется для RX2.

Рисунок 10: PIN -менеджер: вид сетки
Добавьте пользовательское имя в вывод RE0 в качестве светодиода, используя ресурсы проекта → System → Pins. Проверьте флажок «Start High» для светодиодного PIN -штифта RE0 для выключения светодиода.

Рисунок 11: PIN -менеджер
Откройте файл main.c.
Шаги по вычислению Flash CRC с использованием MCC, сгенерированных API:
CRC_SetScannerAddressLimit(START_ADDRESS, END_ADDRESS);
(Начальный адрес, используемый в этой демонстрации, составляет 0x00000, а конечный адрес используется 0x7ffe. Таким образом, общий размер блока памяти, используемой для расчета CRC, составляет 32 КБ.)
ПРИМЕЧАНИЕ. Если размер программы превышает 32 КБ, увеличьте размер блока, изменяя конечный адрес
CRC_StartScanner();
while(CRC_IsCrcBusy() || CRC_IsScannerBusy());
CRC_GetCalculatedResult(false,0x00);

Рисунок 12: Программируйте устройство
//#define ERASE_EEPROM_CRC в коде, чтобы стереть местоположение EEPROM, которое хранит CRC. Это гарантирует, что в этом месте нет неверного или более раннего рассчитанного значения CRC, хранящегося ранее. Создайте проект и программируйте устройство. Соблюдайте сообщение, отображаемое в окне терминала.(Любой эмулятор терминала, такой как визуализатор данных MPLAB.

Рисунок 13: Сообщение EEPROM стирания
#define ERASE_EEPROM_CRC . Создайте проект и программируйте устройство.
Рисунок 14: Впервые расчет CRC

Рисунок 15: Периодический CRC
Примечание. CRC на рисунке 15 вычисляется с использованием компилятора v2.41 с уровнем оптимизации -0.
CRC Module-это аппаратный реализованный генератор контрольной суммы, который может вычислить 16-битный CRC с помощью программируемого полинома. Он также использует функцию сканера памяти, которая обеспечивает автоматическое чтение вспышки для расчетов CRC. Настройка модуля CRC легко с помощью GUI MCC. Помимо конфигурации модуля, MCC генерирует готовые к использованию API, для беспрепятственного расчета CRC памяти программы, используя CRC и периферийное устройство для сканирования памяти в микроконтроллерах PIC.