Size: a a a

2020 December 10

S

Serg in Embedded Group
Гоша
Здравствуйте, подскажите как работать с функционалом кэш контроллера (камень - stm32f746zg)

Сама суть задачи и проблемы:
Исходные данные_
Собрал проект в кубе в связке stm32f746 fw_f7_v1.16.0 + lwip(v2. 1.2)+ freertos (v10.2.1)cmsis v1(v1.02) - генератор проекта STM32CubeMX(v 6.1.0)
IDE - Stm32cubeIDE (v 1.5.0)

Работоспособность сгенеренного кода проверяю с помощью пинга.

При отключенном кэше данных все пингуется - делаю вывод что все ок.(кэш инструкций никак не влияет) на работоспособность.

При включении кэша данных плата перестает пинговаться,
При этом фриртос жив(в одной из задач мигаю светодиодом, чтобы убедиться)

Манипуляции с MPU не помогают.
Ну либо их не достаточно.

Где искать проблему?
Недавно пришлось перечитать все эрраты и на этот камень, и даже на ядро изза проблем с кешом. В F746 ревизия ядра одна из ранних, и кеши довольно багованные сами по себе, со взаимоисключающими параграфами. Нужно иметь это в виду.
источник

Г

Гоша in Embedded Group
Stas Koynov
пинг это всмысле сетевой пинг? там работает ДМА я так понимаю в драйвере! дма работает с памятью! о кэшэ она ничего не знает! вы либо должны использовать области рамы для сетевого стека(буферов) которые в связке с ДМА, которые через МПУ настраиваются как некешыруемы или как их там называют!
Пинг в смысле сетевой пинг, а именно по icmp по ethernet
источник

SK

Stas Koynov in Embedded Group
Гоша
Пинг в смысле сетевой пинг, а именно по icmp по ethernet
вот вам посмотреть нужно есть ли ДМА и все такое в драйвере, или руководство найти упоминание об кэше
общая инфа: http://microsin.net/programming/arm/an4839-level-1-cache-stm32f7.html
источник

Г

Гоша in Embedded Group
Serg
Недавно пришлось перечитать все эрраты и на этот камень, и даже на ядро изза проблем с кешом. В F746 ревизия ядра одна из ранних, и кеши довольно багованные сами по себе, со взаимоисключающими параграфами. Нужно иметь это в виду.
@neonsun Понял, спасибо!
@KoynovStas, звучит логично, те при работе с кэшем данных и дма для буфферов которые по дма кидаются нужно отдельно некэшируемую область выделить?
источник

К1

Ком 123 in Embedded Group
Stas Koynov
пинг это всмысле сетевой пинг? там работает ДМА я так понимаю в драйвере! дма работает с памятью! о кэшэ она ничего не знает! вы либо должны использовать области рамы для сетевого стека(буферов) которые в связке с ДМА, которые через МПУ настраиваются как некешыруемы или как их там называют!
Вот ничего подобного. Даже с дма данные кэшируются. Их же так или иначе проц обрабатывает. А дма просто скидывает/получает данные по адресам.
источник

SK

Stas Koynov in Embedded Group
ну либо так, либо синхронизировать через спец команды из CMSIS смотри статью. (это если вы сами пишите этот кусок - это ваша забота как говориться) если нет, и драйвер не был готов к тому что будет кэш, конвеер, новые фишки и т.п, то либо менять драйвер, либо допиливать руками.
источник

SK

Stas Koynov in Embedded Group
Ком 123
Вот ничего подобного. Даже с дма данные кэшируются. Их же так или иначе проц обрабатывает. А дма просто скидывает/получает данные по адресам.
смотря что мы делаем. кэшируются данные из РАМЫ. ДМА о кэше ничего не знает! она работает напрямую с РАМой. проц работает через кэшь!. если у вас нет пересечений то хорошо! если есть! нужна синхронизация!.
источник

SK

Stas Koynov in Embedded Group
в этой же статье, это даже не статья а перевод апноута, рассматривается ваш случай, когда о том что ДМА не в курсе про кэшь. вышла лажа...
источник

К1

Ком 123 in Embedded Group
Stas Koynov
смотря что мы делаем. кэшируются данные из РАМЫ. ДМА о кэше ничего не знает! она работает напрямую с РАМой. проц работает через кэшь!. если у вас нет пересечений то хорошо! если есть! нужна синхронизация!.
Сама шина дма-да. Но если данные из кэша до запуска дма в рам не попали(валидация кэша), то и в рам им взяться неоткуда.
источник

SK

Stas Koynov in Embedded Group
Ком 123
Сама шина дма-да. Но если данные из кэша до запуска дма в рам не попали(валидация кэша), то и в рам им взяться неоткуда.
у него не работает скорее всего случай. когда из ДМА данные попали в РАМУ. проц обработал их часть из них осталась в Кэше. мы говорим ДМА отдавай назад!. но часть данных в Кэше. ДМА поехала отдавать не валидные данные! вот нужна синхронизации для ДМА на отдачу. и на синхронизацию для проца при обновлении данных от ДМА.. ведь проц может тупо читать кэшированные данные. ему нужно сообщить, что данные в кэше протухли. ДМА нам свежак скачала.
источник

AA

Alexander Anisimov in Embedded Group
Привет)

Пробовал ли кто-то эту штуку: https://vicara.co/nrf52-code-generator?
источник

AA

Alexander Anisimov in Embedded Group
Видимо, это как cube, но только для nRF52832
источник

P.

Pavel . in Embedded Group
Alexander Anisimov
Видимо, это как cube, но только для nRF52832
Для нрф лучше всего зефир (zephyr project)
источник

VK

Valentin Kornienko in Embedded Group
Alexander Anisimov
Привет)

Пробовал ли кто-то эту штуку: https://vicara.co/nrf52-code-generator?
^
источник

A

A in Embedded Group
Может кто посоветовать где в Москве можно купить отладочную плату stm32?
источник

VK

Valentin Kornienko in Embedded Group
У Нордика вроде бы ведь нормально все было с SDK
источник

VK

Valentin Kornienko in Embedded Group
Alexander Anisimov
Привет)

Пробовал ли кто-то эту штуку: https://vicara.co/nrf52-code-generator?
глянул. Красиво
источник

VK

Valentin Kornienko in Embedded Group
Я внимательнее посмотрел, прикольно
источник

AA

Alexander Anisimov in Embedded Group
Pavel .
Для нрф лучше всего зефир (zephyr project)
Это же RTOS просто
источник

VK

Valentin Kornienko in Embedded Group
Alexander Anisimov
Это же RTOS просто
Нет. Там и драйвера есть
источник