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

STM32F4xx, работа с FSMC через DMA

Ситуация. Есть STM32F4xx с внешней шиной, на которой висят SRAM и NAND.

 

Вздумалось мне оптимизировать код, и в функции чтения NAND конструкцию

    for (i = 2112/4; i; i--)
        *buffer32 ++ = (*(volatile uint32_t *)(BANK_NAND_ADDR | NAND_DATA_AREA));

заменил работой с DMA (использую DMA2, Stream0)

 

Всё работает прекрасно, пока буфер находится во внутренней памяти. Но стоит перенести его во внешнюю память, DMA ломается.

Счётчик данных уменьшается на 32 dword'а (я 32-битными данными работаю, адреса выровнены), регистр FIFO сообщает, что FIFO пустое.

А дальше - всё - счётчик данных "тикать" больше не хочет, биты в регистре статуса не устанавливается, enable не сбрасывается.

 

Это фича такая? Что-то я нигде описания не нашёл...

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


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

Это фича такая? Что-то я нигде описания не нашёл...

А errata на этот счет что говорит?

У 427 на эту тему (FMC через DMA) ахтунг есть)

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


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

errata на статическую память коротенькая, это в более новых камнях с SDRAM треш и угар какой-то...

 

Методом тыка обнаружил, что отключение burst приводит к нормальной работе.

Документация только требует, чтобы для burst адреса все были выровнены (это я делаю, причём с запасом - там требования к границе 1 килобайт, я выравниваю на мегабайт - в тестовом коде не жалко). Больше никаких требований нету...

 

Странно всё это. И жалко - burst во внутреннее ОЗУ работает на 10% быстрее.

 

 

Update.

Как и следовало ожидать, самдурак.

В документации есть раздел "FIFO threshold and burst configuration" - там многие варианты запрещены. Почему оно работало с внутренним ОЗУ - загадка...

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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