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

 
 
> 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
toweroff
сообщение Feb 5 2016, 15:20
Сообщение #7


Гуру
******

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



Цитата(esaulenka @ Feb 5 2016, 16:19) *
Вот интересно мне, сиё для кого написано было?..

а ведь и правда...
пятница...
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
|- - Ruslan1   Цитата(esaulenka @ Feb 5 2016, 15:19) Ска...   Feb 5 2016, 15:34
- - 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 Текстовая версия Сейчас: 20th July 2025 - 17:43
Рейтинг@Mail.ru


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