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

 
 
> STM32F0 и CRC16, как быть с байтами?
toweroff
сообщение Dec 21 2015, 20:14
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Всем привет

Сабж и непонятное подсчитывание

Включил в AHB
Полином (при считывании - все верно, 0x8005)
Прописал 0 в INIT
Дернул по ИЛИ RESET в CR

Далее скармливаю ему в DR байты (иначе не получится по поступлению данных)

Ну и не сходится

Как вообще правильно работать с CRC? Данные должны быть соразмерны полиному?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
toweroff
сообщение Dec 22 2015, 07:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(spf @ Dec 22 2015, 06:41) *

Цитата(slavokhire5 @ Dec 22 2015, 09:42) *

разве я спрашивал о сути CRC или программной реализации? вопрос только об аппаратном модуле CRC у STM32F0

Цитата(VAI @ Dec 22 2015, 08:23) *
А я всегда думал, что блок расчета CRC в STM32 считает CRC32...
Вот здесь я выкладывал 2 функции, программную и железную для STM32. Результат их работы одинаков. И да, на вход блока CRC32 должны подаваться 32-х битные слова.
В "железной" функции по ссылке применена "uint32_t __rbit( uint32_t )", Кеил её прекрасно понимает. Она реверсирует слово. И, похоже, в Cortex-M0 такой команды нету...
А здесь я сейчас нашел статейку про аппаратный блок расчета CRC в STM32...


спасибо, буду посмотреть

а у F0 таки да, можно менять и полином, и размер полинома и начальное значение
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 22 2015, 08:23
Сообщение #3


Гуру
******

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



Цитата(toweroff @ Dec 22 2015, 10:45) *
а у F0 таки да, можно менять и полином, и размер полинома и начальное значение
У F0x0 - нельзя. Впрочем, там кроме разрядности и собственно полинома еще и зеркалирование данных задается. Может нужно отзеркалировать ваш полином и входные/выходные данные?


--------------------
На любой вопрос даю любой ответ
"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
SSerge
сообщение Dec 22 2015, 08:42
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Сергей Борщ @ Dec 22 2015, 15:23) *
У F0x0 - нельзя.

Вы оба правы wink.gif
У F030 и F070 полином не изменяемый, а у остальных: F0x1, F0x2 и F0x8 можно дополнительно грузить полином и настраивать его длину 7, 8, 16, 32 бита.
Для обоих в реф. мануалах пишут что можно писать байтами, полусловами или словами.

Хорошо бы код посмотреть повнимательнее, потому что DR описан как __IO uint32_t DR;
и если просто писать в CRC->DR то запись всегда будет происходить словами.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Feb 5 2016, 07:20
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(SSerge @ Dec 22 2015, 10:42) *
Вы оба правы wink.gif
У F030 и F070 полином не изменяемый, а у остальных: F0x1, F0x2 и F0x8 можно дополнительно грузить полином и настраивать его длину 7, 8, 16, 32 бита.
Для обоих в реф. мануалах пишут что можно писать байтами, полусловами или словами.

Подниму тему, у меня вопрос именно про CRC в STM32F070.

Хочу использовать CRC 16-битный. Можно ли для этого задействовать аппаратный модуль данного МК ?

Очень мутно написано в рефмануале про возможность выбора длины и вида полинома, в тексте есть такое:
Цитата
Uses CRC-32 (Ethernet) polynomial: 0x4C11DB7
X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1
• Alternatively uses a fully programmable polynomial with programmable size (7, 8, 16,
32 bits).
• Handles 8-,16-, 32-bit data size
• Programmable CRC initial value

Но в списке регистров не вижу ничего, позволяющего "Alternatively uses a fully programmable polynomial with programmable size".
То есть только CRC32 с полиномом 0x4C11DB7 ?

И что будет считать быстрее: использовать имеющийся табличный расчет CRC16, или все-таки можно пробовать приспособить этот аппаратный модуль под что-то, дающее на выходе циклически рассчитанное 16-битное значение?
Вопрос именно в скорости вычислений, нужно минимизировать задержку от момента появления данных до их отправки.

Хм.Или вообще уйти от CRC на что-то ксоровидное, канал довольно чистый (межплатное соединение внутри корпуса), если аппаратный модуль не приклеивается...
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Feb 5 2016, 13:19
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Ruslan1 @ Feb 5 2016, 10:20) *
Хм.Или вообще уйти от CRC на что-то ксоровидное, канал довольно чистый (межплатное соединение внутри корпуса), если аппаратный модуль не приклеивается...


Скажу банальность, но XOR - плохо.
Лично наступал на грабли "при отвалившемся проводе принимаем 0xFF, контрольная сумма сходится". Хотя б байты складывать...


(дополнил)

Цитата(toweroff @ Feb 5 2016, 16:04) *
Там все просто, пишем данные в регистр и после записи последнего слова имеем рассчитанную CRC

Вот интересно мне, сиё для кого написано было?..

Цитата(SSerge @ Dec 22 2015, 11:42) *
У F030 и F070 полином не изменяемый, а у остальных: F0x1, F0x2 и F0x8 можно дополнительно грузить полином и настраивать его длину 7, 8, 16, 32 бита.

Цитата(Ruslan1 @ Feb 5 2016, 10:20) *
Подниму тему, у меня вопрос именно про CRC в STM32F070.
Хочу использовать CRC 16-битный.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Feb 5 2016, 15:34
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(esaulenka @ Feb 5 2016, 15:19) *
Скажу банальность, но XOR - плохо.
Лично наступал на грабли "при отвалившемся проводе принимаем 0xFF, контрольная сумма сходится". Хотя б байты складывать...

Да, понимаю, спасибо.
Кстати, у меня было как-то, что CRC16 у разных пакетов данных сходились: делал базу на всего-то пару тысяч записей (примерно по 260 байт), и делал индексирование для быстрого поиска, индексом(сигнатурой) была CRC16 блока. И данные заведомо разные (там в том числе и дата-время были в блоке, и номер записи). Но вот повторяющиеся сигнатуры встречались, и нередко. Пришлось дополнительно еще и дату-время проверять у вытащенной по индексу записи, CRC16 в качестве уникальной сигнатуры не хватало sm.gif

Но у меня условия будут тепличные (длина линии связи сантиметров пять), да и просто не придет такой тривиальный пакет (у меня там SLIP фреймы принимать будет), ну и на уровне приложения тоже есть некоторая проверка кроме контрольной суммы.

Цитата(toweroff @ Feb 5 2016, 17:20) *
а ведь и правда...
пятница...

sm.gif
Я почитал- там и CRC32 как-то по-странному нужно задействовать, чтобы совпало с софтовой реализацией (инверсия битов подсовываемого байта ?), то есть не все так просто как хочется.
Чистый маркетинг. Оно есть, но подходит совсем далеко не всем.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- toweroff   STM32F0 и CRC16   Dec 21 2015, 20:14
- - spf   Цитата(toweroff @ Dec 22 2015, 01:14) Как...   Dec 22 2015, 03:41
- - VAI   А я всегда думал, что блок расчета CRC в STM32 счи...   Dec 22 2015, 05:23
|- - Сергей Борщ   Цитата(VAI @ Dec 22 2015, 08:23) А я всег...   Dec 22 2015, 07:44
- - slavokhire5   Если вы пишете расчет контрольной суммы для переда...   Dec 22 2015, 06:42
|- - spf   Цитата(toweroff @ Dec 22 2015, 12:45) раз...   Dec 22 2015, 07:55
||- - toweroff   Цитата(spf @ Dec 22 2015, 10:55) Теоретич...   Dec 22 2015, 08:08
|- - toweroff   Цитата(SSerge @ Dec 22 2015, 11:42) Вы об...   Dec 22 2015, 11:44
|- - toweroff   Цитата(esaulenka @ Feb 5 2016, 16:19) Вот...   Feb 5 2016, 15:20
- - ViKo   Вот здесь погоняйте свои байты в хвост и в гриву, ...   Dec 22 2015, 12:56
|- - toweroff   Цитата(ViKo @ Dec 22 2015, 15:56) Вот зде...   Dec 22 2015, 13:10
- - toweroff   Все, заработало. Скармливаю побайтно, обращение ...   Dec 22 2015, 16:41
|- - Сергей Борщ   Цитата(toweroff @ Dec 22 2015, 19:41) Все...   Dec 22 2015, 16:54
|- - toweroff   Цитата(Сергей Борщ @ Dec 22 2015, 19:54) ...   Dec 22 2015, 17:08
|- - Сергей Борщ   Цитата(toweroff @ Dec 22 2015, 20:08) Пох...   Dec 22 2015, 19:04
|- - toweroff   Цитата(Сергей Борщ @ Dec 22 2015, 22:04) ...   Dec 22 2015, 19:15
- - toweroff   Там все просто, пишем данные в регистр и после зап...   Feb 5 2016, 13:04


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:07
Рейтинг@Mail.ru


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