2. Модуль подсчета CRC
2.1 Введение в CRC
CRC (Cyclic redundancy code – циклический избыточный код) используется для получения контрольной суммы 32-битного слова с помощью двоичного многочлена 0x04C11DB7.
Подсчет CRC обычно используется для проверки корректности передачи-приема данных. В соответствие со стандартом EN/IEC 60335-1 CRC может использоваться для проверки целостности содержимого флеш-памяти. Контрольная сумма программы в контроллере считается во время его работы, а потом сравнивается с контрольной суммой, которая была подсчитана во время линковки.
2.2 Основные свойства CRC
- Использование полинома 0x04C11DB7:x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
- 32-битный регистр ввода-вывода
- Подсчет производится за 4 тактовых цикла AHB (HCLK)
- 8-битный регистр общего назначения (может использоваться как временное хранилище)

Модуль подсчета CRC
2.3 Функциональное описание CRC
В составе модуля подсчета CRC есть 32-битный регистр, который:
- используется как регистр ввода, для записи в него значения, которое потом загрузитися в калькулятор CRC.
- при чтении возвращает результат предыдущего подсчета
Каждый раз, когда в регистр данных CRC загружаются какие-либо данные, модуль создает результат, как комбинацию предыдущей и текущей контрольной суммы (расчет контрольной суммы происходит сразу над 32-битным словом, а не байт за байтом)
Операция записи приостанавливается до окончания подсчета контрольной суммы.
Содержимое регистра данных CRC можно сбросить до значения 0xFFFFFFFF с помощью сбрасывающего бита в регистре CRC_CR. Эта операция не затрагивает содержимое регистра CRC_IDR.
2.4 Регистры CRC
Модуль подсчета CRC содержит в себе 2 регистра данных и 1 управляющий.
2.4.1 Регистр данных (CRC_DR)
31 |
30 |
|
17 |
16 |
DR31 |
DR30 |
… |
DR17 |
DR16 |
rw |
rw |
… |
rw |
rw |
15 |
14 |
|
1 |
0 |
DR15 |
DR14 |
… |
DR1 |
DR0 |
rw |
rw |
… |
rw |
rw |
Используется как входной регистр модуля при записи туда значения. При чтении – возвращает результат предыдущего подсчета. Значение после сброса – 0xFFFFFFFF.
2.4.2 Независмый регистр данных (CRC_IDR)
15 |
… |
8 |
7 |
6 |
|
0 |
Reserved |
IDR7 |
IDR6 |
… |
IDR0 |
||
rw |
rw |
… |
rw |
8-битный регистр данных общего назначения. Может использоваться как временное хранилище данных, размером в 1 байт. При установке бита RESET в регистре CRC_CR не изменяет своего ззначения.
2.4.3 Регистр управления (CRC_CR)
31 |
… |
1 |
0 |
Reserved |
RESET |
||
w |
Установкае бита RESET в единицу приведет к сбросу модуля CRC и записи 0xFFFFFFFF в регистр CRC_DR. Чтение бита невозможно. После записи бит сбрасывается аппаратно.
2.5 Программирование модуля CRC
Библиотека CMSIS предоставляет следующие функции для работы с модулем:
|
Функция подсчитывает контрольную сумму для массива 32-битных слова.
Вход:
pBuffer
– указатель на массив данных для подсчета контрольной суммы.BufferLength
– размер массива данных.
Выход:
- Контрольная сумма для массива слов.
|
Функция подсчитывает контрольную сумму для 1 32-битного слова.
Вход:
Data
– 32-битное слово, для которого требуется подсчитать CRC.
Выход:
- Контрольная сумма для одного слова.
|
Функция возвращает текущее значение CRC.
Вход:
- Параметров нет.
Выход:
- Текущее значение регистра CRC_DR.
|
Функция записывает 8-битные данные в независимый регистр данных CRC_IDR.
Вход:
IDValue
– данные для записи.
Выход:
- Значения не возвращает.
|
Функция возвращает содержимое регистра CRC_IDR.
Вход:
- Параметров нет.
Выход:
- Текущее значение регистра CRC_IDR.
|
Сбрасывает регистр данных CRC_DR.
Вход:
- Параметров нет.
Выход:
- Значения не возвращает.
>>8-битный регистр общего назначения (может использоваться как временное хранилище)
>>В составе модуля подсчета CRC есть 32-битный регистр, который:
так который все-таки?
Там есть и 32-битный и 8-битный.