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

 
 
> И снова LPC4337 + SSP + DMA, При выполнении memset, std::fill валится связь
haker_fox
сообщение Apr 28 2018, 01:11
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Добрый день!

В моём проекте в целом работает связь микроконтроллера по ssp с флешками n25q128. Для транзакций задействован DMA. Были в своё время проблемы, не очень чётко описанные в документации, но они давно решены (тема тут.

Но недавно выползла новая проблемка. Как я уже сказал, запись/чтение на флешки работает отлично. Никаких сбоев. SSP не использует прерываний, они разрешены лишь только для диагностики. (overrun/timeout). И вот если во время обмена данными в одной из задач выполняется memset в массив, либо std::fill в вектор, то вывалвается прерывание overrun по SSP. Я ни как не могу разобраться в чём дело. У меня есть теория, которую пока не могу ни опровергнуть, ни подтвердить. Возможно, что DMA и процессор не могут поделить шины. И если проц начинает копирование данных, т.е. интенсивно использовать шины, то DMA (не смотря на то, что у него есть fifo, у SSP есть fifo) не успевает вычитать данные с шины. И там наступает переполнение. Если это так, то подскажите, пожалуйста. как грамотно разрулить ситуацию?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Apr 28 2018, 05:16
Сообщение #2


Гуру
******

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



Цитата(haker_fox @ Apr 28 2018, 04:11) *
Если это так, то подскажите, пожалуйста. как грамотно разрулить ситуацию?

Приоритеты у приёмного и передающего каналов DMA какие? Надеюсь у RxDMA приоритет выше, чем у TxDMA?
Burst используете и какие размеры? С блокировкой шины или без? И как они соотносятся с размерами кешей?
И к каким областям памяти обращаются DMA и CPU - одной или разным?

Цитата(haker_fox @ Apr 28 2018, 04:11) *
Как я уже сказал, запись/чтение на флешки работает отлично. Никаких сбоев. SSP не использует прерываний, они разрешены лишь только для

Как же "отлично" если Вы даже не отладили работу в реальной программе, одновременно с другими процессами???
Отладка одновременной работы со штатной работой CPU (или даже лучше - более сильно нагруженной работой), одновременно с работой других DMA-каналов - это обязательный этап при отладке работы DMA. А желательно даже проверить при максимально возможной нагрузке на процессор, которой не будет в реальной работе. Стресс-тест вобщем.
Если Вы этого не делали - значит Вы ничего и не отладили.

PS: И почему кстати SSP, а не SPIFI?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Apr 28 2018, 06:22
Сообщение #3


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (jcxz @ Apr 28 2018, 13:16) *
Надеюсь у RxDMA приоритет выше, чем у TxDMA?

Да.
QUOTE (jcxz @ Apr 28 2018, 13:16) *
Burst используете и какие размеры?

Tx Burst 4 байта, Rx Burst 1 байт (4 работает неустойчиво, этом мы с вам в предыдущей теме по ссылке выше выяснили).
QUOTE (jcxz @ Apr 28 2018, 13:16) *
С блокировкой шины или без? И как они соотносятся с размерами кешей?

Об этом ничего не знаю... Что за блокировка? И как про кеши узнать?
QUOTE (jcxz @ Apr 28 2018, 13:16) *
И к каким областям памяти обращаются DMA и CPU - одной или разным?

Разные.
QUOTE (jcxz @ Apr 28 2018, 13:16) *
Если Вы этого не делали - значит Вы ничего и не отладили.

Ну так как раз в процессе отладки, поскольку над проектом несколько человек работают.
QUOTE (jcxz @ Apr 28 2018, 13:16) *
PS: И почему кстати SSP, а не SPIFI?

Так был удобно, ибо на шине кроме флешек висит ещё с десяток устройств.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post



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

 


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


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