Добрый день!
Наверняка многие из тех, кто "щупал" STM32F429, знают, что в этом контроллере STMicroelectronics допустила серьезную ошибку в аппаратной части модуля FMC - невозможно одновременно получить доступ к статической и динамической памяти без предварительного переключения последней в режим автоматической регенерации. Для программ, у которых четко однозначно распределено выделение и обращение к памяти во времени эта проблема не является существенной. Однако, в большинстве других приложений эта проблема - по сути катастрофа. Я разрабатываю графическое встраиваемое приложение, на плате установлена статическая NOR Flash память и SDRAM. Поскольку графических примитивов у меня довольно много, я разместил их в NOR Flash. SDRAM же у меня выполняет функцию графического буфера. Стандартная схема работы этого приложения - контроллер TFT-матрицы (LTDC) "прозрачно" (т. е. в неизвестно какой момент времени) для процессора через выделенный DMA (опять же, не видимый для программиста) отправляет пиксели на экран. Графический ускоритель DMA2D в это время копирует примитивные изображения в ту же SDRAM (в ту же экранную область). Получается несколько потоков претендуют на одну периферию, и тут контроллер FMC устанавливает арбитраж между DMA LTDC и DMA2D. Работает это, когда графические примитивы расположены во внутренней памяти микроконтроллера. Но стоит "натравить" DMA2D на источник NOR Flash, как все попадает в позицию Errata (нельзя достучаться до статической и динамической памяти одновременно), ведь по сути контроллер FMC должен "разрулить" следующие передачи:
1) SDRAM (экранный буфер) -> экран;
2) NOR Flash -> SDRAM (копирование графических примитивов).
И как видно, как раз на втором пункте и будет "затык". При обращении к NOR Flash SDRAM не перейдет в режим автоматической регенерации, данные в ней станут некорректными. Казалось бы, можно "руками" передать команду автоматической регенерации SDRAM, прежде чем обращаться к NOR Flash, и выхода из нее, чтобы вновь обращаться к SDRAM, но ведь первый пункт (запросы DMA LTDC) работает асинхронно. Если ее и контролировать, на экране будут жуткие мерцания частей изображений (как раз "затыки" между обращениями к SDRAM и NOR Flash).
Производитель исправил ошибку в 3 ревизии микроконтроллера. Но, пройдя по большинству интернет-магазинов электронных компонентов, никакой информации о ревизии нет (ну, наверное, в этом есть логика).
В микроконтроллере STM32F446 эта проблема уже полностью исчезла, но тут другая проблема - этот микроконтроллер максимум в 100-выводном корпусе.
А микроконтроллеров STM32F7-серии и подавно еще пока что нет в продаже.
Кто сталкивался, как решали проблему?