Home > ARM, Контроллеры, stm32 > 2. Модуль подсчета CRC

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

Модуль подсчета 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 предоставляет следующие функции для работы с модулем:

uint32_t CRC_CalcBlockCRC (uint32_t pBuffer[], uint32_t BufferLength)

Функция подсчитывает контрольную сумму для массива 32-битных слова.
Вход:

  • pBuffer – указатель на массив данных для подсчета контрольной суммы.
  • BufferLength – размер массива данных.

Выход:

  • Контрольная сумма для массива слов.

 

uint32_t CRC_CalcCRC (uint32_t Data)

Функция подсчитывает контрольную сумму для 1 32-битного слова.
Вход:

  • Data – 32-битное слово, для которого требуется подсчитать CRC.

Выход:

  • Контрольная сумма для одного слова.

 

uint32_t CRC_GetCRC (void)

Функция возвращает текущее значение CRC.
Вход:

  • Параметров нет.

Выход:

  • Текущее значение регистра CRC_DR.

 

void CRC_SetIDRegister (uint8_t IDValue)

Функция записывает 8-битные данные в независимый регистр данных CRC_IDR.

Вход:

  • IDValue – данные для записи.

Выход:

  • Значения не возвращает.

 

uint8_t CRC_GetIDRegister (void)

Функция возвращает содержимое регистра CRC_IDR.
Вход:

  • Параметров нет.

Выход:

  • Текущее значение регистра CRC_IDR.

 

void CRC_ResetDR (void)

Сбрасывает регистр данных CRC_DR.
Вход:

  • Параметров нет.

Выход:

  • Значения не возвращает.
Advertisements
  1. 02.07.2011 at 09:01

    >>8-битный регистр общего назначения (может использоваться как временное хранилище)
    >>В составе модуля подсчета CRC есть 32-битный регистр, который:

    так который все-таки?

  2. 02.07.2011 at 11:50

    Там есть и 32-битный и 8-битный.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: