реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> вычисление crc14 при помощи железа в stm32
Огурцов
сообщение Aug 16 2013, 07:37
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



возможно ?
Go to the top of the page
 
+Quote Post
Flexz
сообщение Aug 16 2013, 08:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Нет, блок вычисления CRC есть, но полином там Ethernet-овский фиксирован. В линейке F3 можно задать размерность полинома (8-16-32).
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 16 2013, 10:46
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



т.е. основная идея какбы заключается в том, чтобы скармливать контроллеру по 14 бит данных, и результат взять те же 14 бит
если контроллер сдвигает влево, то скармливать данные как младшие биты слова, если вправо - как старшие
полином какой есть - не важно
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 16 2013, 12:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Это уже не CRC14.
Зачем это надо?
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 16 2013, 15:04
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



как зачем, аппаратная реализация должна побыстрее работать
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 16 2013, 16:04
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Огурцов @ Aug 16 2013, 19:04) *
как зачем, аппаратная реализация должна побыстрее работать

Я не об этом. Вы уже сказали, что CRC14 вам не принципиально. Тогда какие цели ставите? Что-нибудь (не так важно, что именно) посчитать аппаратно?
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 16 2013, 17:33
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(scifi @ Aug 16 2013, 17:04) *
Вы уже сказали, что CRC14 вам не принципиально.


не правда, вроде по-русски написано

Цитата
полином какой есть - не важно


Цитата(scifi @ Aug 16 2013, 17:04) *
Тогда какие цели ставите?


crc 14 бит
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 16 2013, 18:16
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



посчитайте CRC16 и возьмите от него 14 любых бит. В ваших терминах это то что вам нужно.

Если у вас входные данные 14 битные, то добейте их двумя нулями до 16 бит. Ибо CRC16 - это не входной размер а как бы величина буфера участвующего в расчете, так CRC16 можно и для 1 байта рассчитать...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 17 2013, 07:24
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Огурцов @ Aug 16 2013, 16:46) *
т.е. основная идея какбы заключается в том, чтобы скармливать контроллеру по 14 бит данных, и результат взять те же 14 бит
если контроллер сдвигает влево, то скармливать данные как младшие биты слова, если вправо - как старшие
полином какой есть - не важно

Между разрядностью полинома и разрядностью данных нет никакой связи.
Go to the top of the page
 
+Quote Post
adnega
сообщение Aug 17 2013, 07:32
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Aug 17 2013, 11:24) *
Между разрядностью полинома и разрядностью данных нет никакой связи.

CRC тем хорош, что если рассчитать вместе буфер с данными и значением CRC этих данных, то получим 0.
По сути это остаток от деления длинного числа полученного последовательной записью всех байтов на
полином. Если полином 16-бит (реально 16+1), то остаток 16 бит. И получается, что 16 битную CRC нельзя добавить
в конец массива 14 битных данных для получения CRC всего блока (данные + CRC) равной 0.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 17 2013, 08:24
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (adnega @ Aug 17 2013, 09:32) *
И получается, что 16 битную CRC нельзя добавить
в конец массива 14 битных данных для получения CRC всего блока (данные + CRC) равной 0.
Вообще-то деление полиномов можно делать хоть побитно, поэтому добавить можно. Другое дело, что автор хочет от 32-битной CRC взять только 14 бит, а в этом случае свойство нулевого остатка потеряется.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 17 2013, 13:10
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(adnega @ Aug 17 2013, 11:32) *
CRC тем хорош, что если рассчитать вместе буфер с данными и значением CRC этих данных, то получим 0.
По сути это остаток от деления длинного числа полученного последовательной записью всех байтов на
полином. Если полином 16-бит (реально 16+1), то остаток 16 бит. И получается, что 16 битную CRC нельзя добавить
в конец массива 14 битных данных для получения CRC всего блока (данные + CRC) равной 0.


это для меня всегда было маленьким чудом, и что-то мне подсказывает что в общем случае это не так. Это для определенного вида полиномов вроде бы верно. Или я где то заблуждаюсь?
Go to the top of the page
 
+Quote Post
adnega
сообщение Aug 17 2013, 13:23
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Golikov A. @ Aug 17 2013, 17:10) *
это для меня всегда было маленьким чудом, и что-то мне подсказывает что в общем случае это не так. Это для определенного вида полиномов вроде бы верно. Или я где то заблуждаюсь?

В общем случае верно всегда, но при неудачном выборе полинома CRC слабо зависит от данных, т.е. не реагирует на изменение битов.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 17 2013, 13:47
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



почему у меня интересно не получилось для модбаса... надо будет почитать...
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 17 2013, 17:34
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Aug 17 2013, 17:47) *
почему у меня интересно не получилось для модбаса... надо будет почитать...

Должен получаться не ноль, а некая константа, которая не зависит от данных (часто - именно ноль). Видимо, зависит от вариаций алгоритма CRC: начальное значение бывает разное, биты инвертируют и т.д.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 17:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01471 секунд с 7
ELECTRONIX ©2004-2016