Инструменты пользователя

Инструменты сайта


prog:spec:crccode

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
prog:spec:crccode [2019/05/06 18:07]
katya [Полином и расчёт контрольной суммы]
prog:spec:crccode [2019/05/06 18:11] (текущий)
katya
Строка 12: Строка 12:
  
 ====Порождающий многочлен==== ====Порождающий многочлен====
-Чтобы рассчитать CRC из входных данных необходим определенный набор нулей и единиц. Их количество,​ а также последовательность записывается с помощью порождающего многочлена.+Чтобы рассчитать CRC из входных данныхнеобходим определенный набор нулей и единиц. Их количество,​ а также последовательность записывается с помощью порождающего многочлена.
 Обычно в спецификациях указывают этот самый порождающий или же результирующий полином. Обычно в спецификациях указывают этот самый порождающий или же результирующий полином.
 Для понимания формирования полинома в качестве примера приведём таблицу:​ Для понимания формирования полинома в качестве примера приведём таблицу:​
Строка 32: Строка 32:
  
 =====Блок CRC в 1986ВЕ4У и 1986ВК234===== =====Блок CRC в 1986ВЕ4У и 1986ВК234=====
-Как уже ранее было отмечено,​ блок аппаратного расчёта контрольной суммы присутствует в двух МК Миладнра серии 1986 на базе ядра Cortex-M0: 1986ВЕ4У и 1986ВК234. Представлен он 5-тю регистрами:​ управления,​ статуса,​ входных/​выходных ​ данных и регистра задания полинома. Блок имеет возможность выполнять расчёт только 16-битного crc, о чём говорит "​1"​ старшего разряда регистра CRC_POL, которую нельзя изменить. Блок на вход может принимать 8-ми, 16-ти, 32-х битные слова данных,​ может обрабатывать их как в прямом,​ так и в обратном порядке (со старшего бита). Скорость расчёт составляет 2 бита /PCLK. В контроллере реализовано FIFO на 4 отсчёта,​ а также канал DMA для загрузки новых слов. Запрос к DMA формируется при условии опустошения FIFO. В стандартном Software Pack для Keil под 4У есть небольшой примеры работы с блоком CRC. Попробуем его рассмотреть. +Как уже ранее было отмечено,​ блок аппаратного расчёта контрольной суммы присутствует в двух МК Миландра серии 1986 на базе ядра Cortex-M0: 1986ВЕ4У и 1986ВК234. Представлен он 5-тю регистрами:​ управления,​ статуса,​ входных/​выходных ​ данных и регистра задания полинома. Блок имеет возможность выполнять расчёт только 16-битного crc, о чём говорит "​1"​ старшего разряда регистра CRC_POL, которую нельзя изменить. Блок на вход может принимать 8-ми, 16-ти, 32-х битные слова данных,​ может обрабатывать их как в прямом,​ так и в обратном порядке (со старшего бита). Скорость расчёт составляет 2 бита /PCLK. В контроллере реализовано FIFO на 4 отсчёта,​ а также канал DMA для загрузки новых слов. Запрос к DMA формируется при условии опустошения FIFO. В стандартном Software Pack для Keil под 4У есть небольшой примеры работы с блоком CRC. Попробуем его рассмотреть. 
-Настройки блока максимально простые. Необходимо,​ как всегда,​ разрешить тактирование самого блока в регистре PER2_CLOCKи провести его инициализацию,​ которая по сути заключается в задании полинома и стартового значения:​+Настройки блока максимально простые. Необходимо,​ как всегда,​ разрешить тактирование самого блока в регистре PER2_CLOCK и провести его инициализацию,​ котораяпо сутизаключается в задании полинома и стартового значения:​
  
 <​code>​ <​code>​
Строка 55: Строка 55:
 } }
 </​code>​ </​code>​
-Поэтому,​ основные настройки,​ в данном примере,​ задать полином и начальное значение+Поэтому,​ основные настройки,​ в данном примере, ​- это ​задание ​полинома и начального значения
-Когда блок настроен,​ можно разрешать его работу,​ а затем заполнять FIFO данными. В стандартном примере входными данными является массив из 9 элементов,​ но как мы помним блок контрольный суммы в своём распоряжении имеет FIFO только на 4 отсчёта,​ поэтому загружая данные,​ не забываем ожидать ​в FIFO появление свободного отсчёта.+Когда блок настроен,​ можно разрешать его работу,​ а затем заполнять FIFO данными. В стандартном примере входными данными является массив из 9 элементов,​ нокак мы помнимблок контрольный суммы в своём распоряжении имеет FIFO только на 4 отсчёта,​ поэтомузагружая данные,​ необходимо дождаться появления свободного отсчёта ​в FIFO.
 <​code>​ <​code>​
 for(i = 0; i < CRC_ARRAY_SIZE;​ i++){ for(i = 0; i < CRC_ARRAY_SIZE;​ i++){
Строка 64: Строка 64:
 </​code>​ </​code>​
  
-Итак, после прогона всего массива элементов мы получим конечное значение контрольный суммы, рассчитанное аппаратным блоком микроконтроллера. Это значение в примере сравнивают со значением CRC полученным с помощью функции программного расчёта CRC, на вход которой подаются тот же массив исходных данных. При программном расчёте контрольной суммы использована следующая функция,​ очевидно взятаяс просторов интернета,​ где входными данными ​ является указатель на массив данных и его размерность.+Итак, после прогона всего массива элементов мы получим конечное значение контрольный суммы, рассчитанное аппаратным блоком микроконтроллера. Это значение в примере сравнивают со значением CRCполученным с помощью функции программного расчёта CRC, на вход которой подаётся тот же массив исходных данных. При программном расчёте контрольной суммы использована следующая функция,​ очевидновзятая с просторов интернета,​ где входными данными ​ является указатель на массив данных и его размерность.
 <​code>​ <​code>​
 uint16_t Crc16(uint8_t * pcBlock, uint16_t len) uint16_t Crc16(uint8_t * pcBlock, uint16_t len)
prog/spec/crccode.txt · Последние изменения: 2019/05/06 18:11 — katya