Перейти к содержанию
    

STM32F407: Параллельный АЦП на DCMI - конфликт с записью в GPIO->ODR

Привет! Использую АЦП с параллельным интерфейсом совместно с STM32F407VG. Как только во время работы DMA происходит запись в регистр GPIOD->ODR в результатах оцифровки появляются помехи.

Из Errata нашел следующий пункт, где говорится о невозможности совместной работы DMA2 и GPIO:

Quote

DMA2 data corruption when managing AHB and APB peripherals in a
concurrent way
Description
When the DMA2 is managing AHB Peripherals (read- or write-sensitive devices such as
peripherals embedding FIFOs or GPIOs) and also APB transfers in a concurrent way, this
generates a data corruption (multiple DMA access). When this condition occurs:
• The data transferred by the DMA to the AHB peripherals could be corrupted in case of
a FIFO target.
• For memories, it will result in multiple access (not visible by the Software) and the data
is not corrupted.
• For the DCMI, a multiple unacknowledged request could be generated, which implies
an unknown behavior of the DMA.
AHB peripherals embedding FIFO are DCMI, CRYPTO, and HASH. Also we can consider
external FIFO controlled by the FSMC and GPIO Output Data register as AHB write
sensitive peripherals.
On sales types without CRYPTO, mainly impacted peripheral is the DCMI peripheral which
embeds a FIFO. External FIFO controlled by the FSMC and GPIOs when used as parallel
output are also impacted.
Workaround
Avoid concurrent AHB (DCMI, CRYPTO, HASH, FSMC with external FIFO, or GPIOs output
data register) and APB transfer management using the DMA2.

 

1. Существуют ли варианты обхода этого ограничения? Дело в том, что после завершения DMA транзакции из DCMI в SRAM нужно сгенерировать импульс VSYNC, чтобы запустить следующую транзакцию.

2. Быть может, DCMI можно использовать без VSYNC?

3. Существуют ли процессоры с параллельным интерфейсом и поддержкой Sleep & Stop mode?

Изменено пользователем #Eugene

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://www.st.com/content/ccc/resource/technical/document/application_note/group0/c0/ef/15/38/d1/d6/49/88/DM00373474/files/DM00373474.pdf/jcr:content/translations/en.DM00373474.pdf

надеюсь читали. А для генерации VSYNC  можно таймер задействовать, используя его же для счета принятых по DCMI данных. Возможна конечно синхронизация DCMI по цифровым кодам без VSYNC, но она  не удобна, требует FPGA, а тогда проще на FSMC все посадить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, #Eugene сказал:

3. Существуют ли процессоры с параллельным интерфейсом и поддержкой Sleep & Stop mode?

Так может вообще использовать АЦП с последовательным интерфейсом или встроенный в МК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, jcxz said:

Так может вообще использовать АЦП с последовательным интерфейсом или встроенный в МК?

А почему не на RC и компараторе? Наверное, параллельный интерфейс к АЦП не просто так нужен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, khach said:

https://www.st.com/content/ccc/resource/technical/document/application_note/group0/c0/ef/15/38/d1/d6/49/88/DM00373474/files/DM00373474.pdf/jcr:content/translations/en.DM00373474.pdf

надеюсь читали. А для генерации VSYNC  можно таймер задействовать, используя его же для счета принятых по DCMI данных. Возможна конечно синхронизация DCMI по цифровым кодам без VSYNC, но она  не удобна, требует FPGA, а тогда проще на FSMC все посадить.

Да, читал этот документ.

В случае с таймером для генерации VSYNC - какой лучше выбрать источник тактирования для него?

 

1 hour ago, jcxz said:

Так может вообще использовать АЦП с последовательным интерфейсом или встроенный в МК?

Нужно от 3.5 до 20 MSPS, параллельный в самый раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, #Eugene сказал:

Нужно от 3.5 до 20 MSPS, параллельный в самый раз.

В самый раз по какой причине? Необходима гальваническая развязка или разрядность требуется большая или ещё почему? Просто есть МК со встроенным АЦП и там нет проблем с синхронизацией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

jcxz, с внешним АЦП проще добиться требуемой разрядности, чем с внутренним. Параллельный выбран из-за того, что требуется на 10...20 MSPS работать, с последовательным это еще и к бОльшему потреблению приведет. Сейчас для экспериментов на 12 бит, планируется поставить на 14 бит.

Изменено пользователем #Eugene

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

47 минут назад, jcxz сказал:

 Просто есть МК со встроенным АЦП и там нет проблем с синхронизацией.

Мне вот тоже интересно МК с встроенным АЦП на 20MSPS и хотя бы 12 разрядов. И RAM желательно не 40 Кбайт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, #Eugene сказал:

jcxz, с внешним АЦП проще добиться требуемой разрядности, чем с внутренним. Параллельный выбран из-за того, что требуется на 10...20 MSPS работать, с последовательным это еще и к бОльшему потреблению приведет. Сейчас для экспериментов на 12 бит, планируется поставить на 14 бит.

 

Проще применить CPLD + SRAM, а потом МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

khlenar, Не факт, что проще. Этот проц загружен всего на 20% при обработке на 7MSPS. В особенности интересуют варианты экономии энергии, переводом процессора в спячку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, HardEgor said:

 Мне вот тоже интересно МК с встроенным АЦП на 20MSPS и хотя бы 12 разрядов. И RAM желательно не 40 Кбайт.

LPC4370

6 hours ago, #Eugene said:

 3. Существуют ли процессоры с параллельным интерфейсом и поддержкой Sleep & Stop mode?

про sleep&stop немного не понял, но у блэкфинов(bf592 или bf700 если usb надо) параллельный порт по-человечески сделан, по сравнению с DCMI.

да и у пиков32 ещё вроде бы выглядит неплохо.

4 minutes ago, #Eugene said:

Этот проц загружен всего на 20% при обработке на 7MSPS. В особенности интересуют варианты экономии энергии, переводом процессора в спячку.

это что за обработка такая, среднее значение посчитать? 20% от 160МГц и 7 MSPS это аж целых четыре такта на отсчёт.

по потреблению у небольших дсп, C55 или блэкфинов, мВт/МГц может поменьше в результате выйти чем у stm32. а учитывая что они за такт могут сделать, так тем более.

но те процессоры что могут что-то осмысленное сделать с потоком 20мспс спят обычно довольно плохо, тревожно, потребляя при этом довольно много, иногда наверное проще какую-нибудь "8ми битную" мелочь рядом поставить которая будет усыплять рубильником по питанию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, HardEgor сказал:

Мне вот тоже интересно МК с встроенным АЦП на 20MSPS и хотя бы 12 разрядов. И RAM желательно не 40 Кбайт.

Уже написали - LPC4370. Хотя он всего 12 бит, а ТСу нужно 14.

2 часа назад, _pv сказал:

но те процессоры что могут что-то осмысленное сделать с потоком 20мспс спят обычно довольно плохо, тревожно, потребляя при этом довольно много, иногда наверное проще какую-нибудь "8ми битную" мелочь рядом поставить которая будет усыплять рубильником по питанию.

При требовании малого потребления LPC4370 будет хорош: для быстрой обработки есть M4 на 204МГц, а для экономной работы - два других M0-ядра на выбор. Правда не знаю - можно ли там полностью отключать M4 (и второе M0) работая только на одном M0.

2 часа назад, #Eugene сказал:

В особенности интересуют варианты экономии энергии, переводом процессора в спячку.

У LPC4370 можно попробовать работать на одном M0-ядре. Оно всяко будет потреблять меньше чем M4.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, _pv сказал:

LPC4370

Вот спасибо, добрые люди. Еще и отладка недорогая под него нашлась:OM13054 , вдруг кому пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, #Eugene said:

В случае с таймером для генерации VSYNC - какой лучше выбрать источник тактирования для него?

PIXCLK использовал. Т.е таймер отсчитывал число принятых слов, а на предпоследнем в пакете перезапускал  модуль АЦП.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...