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

 
 
> STM32F4 DMA+CRC, Любопытно. Кто-нибудь реализовывал?
SasaVitebsk
сообщение Oct 3 2013, 06:07
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Есть аппаратная возможность. Но реализована частично. Я так понимаю передаёшь пакет - CRC считается. А по окончанию пакета надо всунуть эти 2 байта в ручном режиме. Неудобно получается. Кто-нибудь реализовывал сам подход или минусы перекрывают плюсы? Особенно интересно в плане работы с SPI DataFlash.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Oct 4 2013, 05:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Ну смысл такой... Есть у меня та же 45db081. В ней я храню различные архивы. Данных, нештатных ситуаций и т.п. Но кроме того я там храню конфигурацию прибора. Эта конфигурация загружается в момент включения прибора и определяет алгоритм его работы. Эту информацию я храню в защищённом режиме. Также я храню указатели на архивы и прочую информацию, которую скидываю по свалу питания, и восстанавливаю при включении. Поэтому запись должна выполнятся максимально быстро и защищаться CRC.

CRC с теми ограничениями, о которых я писал выше - я подключил. Далее попробую ПДП подключить с CRC.
===
А вообще любопытно. Я не смотрел пока, но по сути ведь HASH процессор тоже может свёртку делать. По сути можно и им CRC считать. Надо будет почитать повнимательнее.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 4 2013, 05:58
Сообщение #3


Гуру
******

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



Цитата(SasaVitebsk @ Oct 4 2013, 09:24) *
Поэтому запись должна выполнятся максимально быстро и защищаться CRC.

Это всего лишь означает, что CRC нужно вычислять заранее.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 7 2013, 06:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(scifi @ Oct 4 2013, 08:58) *
Это всего лишь означает, что CRC нужно вычислять заранее.

Это не получится. Тепловычислитель. Я делаю рассчёты. Расчёты производятся от 0.1 сек до 3 сек и идут непрерывно. В случае пропадания питания, я должен остановить расчёт, а по включению выполнить, так называемый догон. Где некоторое время расчёты осущ. по последним полученным значениям, а потом переход к договорным.
Кое что я могу подготовить зарание и я это делаю.
===
Идея то обалденная. Такое бы вообще во все модули включить! Неплохо было бы к UARTу пришпандорить, к примеру.
Записываешь полином и получаешь CRC. Конечно лучше было бы ещё инициализацию делать, как предлагает Сергей Борщ или хотя бы должен быть механизм пропуска служебной информации. Так как не всегда требуется всё подряд считать. Например передача USART по Modbus протоколу представляла бы следующее:
1. Инициализировал CRCTX регистр
2. Подготовил данные в буфере
3. Передал буфер с пом. ПДП
4. Передал 2 байта CRC вручную
Заманчиво ... ))
Беда только что ST вечно что-нибудь немного недодумает, либо криво реализует.
===
Итак для тех кто будет пытаться применить этот узел (аппаратный расчёт CRC при работе с SPI контроллером).
Если с какими-нибудь своими устройствами, то наверное всё Ок. Не могу сказать. Единственное, на что стоит обратит внимание, так это на то, что при работе с 8-ми битными данными у вас будет CRC8, c 16-ти битными - CRC16.
При работе с флэш памятью типа AT45DB возникают следующие проблемы:
1. По SPI вы посылаете комманды на м/х и данные. А считать требуется только данные.
2. Как работать с битом NEXT я не разобрался. Похоже его надо перед каждым байтом слать, но что-то у меня не получилось им управлять. Расчёт CRC всё равно производится.
Но, собственно, всё равно в режиме DMA он не работает.
3. Бит CRCEN корректно устанавливается/сбрасывается только при выключ. SPI. И сбрасывает CRC.
Таким образом, подытоживая, вы можете работать только с одной страницей флэши (или в пределах страницы).
Учитывая, что размер страницы > 256(512) можно CRC хранить в 257(513) байте и написать драйвер автоматического контроля. При этом можно задействовать DMA.
Учитывая, что CRC8 всё равно расчитан на объём ~256, то получается большего всё равно нет смысла добиваться.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 20:18
Рейтинг@Mail.ru


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