Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F429 Внутренняя RAM и внешняя SDRAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
Есть процессор STM32F429 c внешней памятью IS42S16400J-7TLI .
Есть библиотека компрессии JPEG , которая тестировалась на ПК, и не заработала на МК.
Оказалось, что одни и те же вычисления во внутренней памяти МК и в SDRAM дают разные результаты.
Какие именно вычисления-понять сложно , т.к. библиотека чужая.
Тесты (чтение/запись, логические операции) SDRAM проходит.
При изменении частоты процессора 45 / 90 / 180 МГц результат кардинально не меняется, хотя какая-то зависимость вроде бы есть.

Вопрос: Какие именно обращения к SDRAM заставляют её работать не правильно ? Где и как искать решение проблемы?

Заранее спасибо !
501-q
Hi!

STM32F42xx and STM32F43xx Errata sheet:

When the FMC is used as stack, heap or variable data, an interrupt occurring during a CPU
read access to the FMC may results in read data corruption or hard fault exception. This
problem does not occur when read accesses are performed by another master or when
FMC accesses are done when the interrupts are disabled.

Илья
Непомнящий Евгений
Вот это нифига ж себе. Надо читать ерраты sm.gif
gazpar
Оффтоп.

Когда искал варианты реализации JPEG, самое удобное, что нашёл, stm32-dcmi-jpeg

Проверял на stm32f429zit6, работает отлично.
Нужно только правильно конвертировать своё RGB изображение в YUV, или камеру настроить так, чтобы выдавала картинку сразу в YUV.

А теперь по делу.

У меня была следующая ситуация:
1) Собрал проект с ОСРВ под f429zi, кучу расположил в SDRAM. Всё работало чётко, никаких ошибок.
2) Плата питалась от блока питания, а блок питания включен в пилот. При подаче питания кнопкой пилота SDRAM сгорела.
3) Заменили SDRAM на новую, контроллер стал мазать по адресам в SDRAM и, соответственно, уходить в HardFault.
4) Если SDRAM не использовать, то f429zi работает, вроде бы, как надо.

Результаты разные при операциях в SDRAM и RAM могут быть из-за какой-то неполадки в контроллере, по причине промахов по адресам во внешней памяти.

Вот такой алгоритм:
Код
for(uint32_t i=0; i < 500; i++){
        some_num[i] = 100 + i;
    }

for(uint32_t i=0; i < 50; i++){
    printf("We read from SDRAM: %d\r\n",some_num[i]);
}

Выдаёт такой результат:
KnightIgor
Цитата(501-q @ Dec 11 2015, 05:14) *
STM32F42xx and STM32F43xx Errata sheet:

ОТ (SCNR):
Такое заявление в errata равносильно намёку, SDRAM не использовать вообще кроме как для буфера с чтением по DMA, то есть, для видеобуфера. Это же надо так лажануться в дизайне, чтобы обращение к SDRAM по чтению требовало запрета прерываний! Я в шоке... Интересно, -M7 тем же страдает?!
adnega
Цитата(501-q @ Dec 11 2015, 07:14) *
Hi!

STM32F42xx and STM32F43xx Errata sheet:

When the FMC is used as stack, heap or variable data, an interrupt occurring during a CPU
read access to the FMC may results in read data corruption or hard fault exception. This
problem does not occur when read accesses are performed by another master or when
FMC accesses are done when the interrupts are disabled.

Илья

Там же: This limitation is present only in revision “A” devices. It is fixed in revision “Y”, “1” and “3”.
Насколько мне известно, у ТС ревизия "1".

Кста, насчет ES я бы внимательно ознакомился с п 2.1.10 PA12 GPIO limitation.
Цитата
When PA12 is used as GPIO or alternate function in input or output mode, the data read
from Flash memory can be corrupted. This behavior is observed only when the following
conditions are met:
• The device operates from a 2.7 to 3.6 V VDD power supply whatever the temperature
range
• Flash memory Bank2 is used or the dual bank feature is enabled.
Impacted products
• STM32F42xxI and STM32F43xxI part numbers
MiklPolikov
Отключил PA12 , отключил прерывания.
Провожу эксперимент:

Код
unsigned char  *p_sdram=(unsigned char *)(0xD0000000);

for(i=0; i<1000; i++)
         p_sdram[i]=i;


Вижу неправильное содержание памяти.

Этот же эксперимент с указателем unsigned short int , unsigned int проходит нормально

Вопрос: в чём может быть проблема ? Это может быть связано с настройкой LATENCY и WS во flash контроллере ?
aaarrr
DQMx правильно подключены?
Tarbal
А можете ваш цикл когда он пишет неправильно в машинных (ассемблерных) командах показать? Я бы первым делом посмотрел в отладчике по шагам в дизассемблере.
MiklPolikov
Проблема решилась. Была непропаяна нога FMC_NBL0
т.к. она иногда всё-таки контачила и работать начинало, безудержное веселье с отладкой продолжалось почти неделю.
Ruslan1
Цитата(MiklPolikov @ Dec 12 2015, 05:24) *
Проблема решилась. Была непропаяна нога FMC_NBL0
т.к. она иногда всё-таки контачила и работать начинало, безудержное веселье с отладкой продолжалось почти неделю.

Мда, само написание этого поста в пять часов утра говорит о многом sm.gif
Примите поздравления sm.gif

А если разрешить прерывания и так далее- не падает? Интересно, этот кейс из ерраты они действительно закрыли в новых редакциях?
MiklPolikov
Цитата(Ruslan1 @ Dec 12 2015, 15:05) *
А если разрешить прерывания и так далее- не падает? Интересно, этот кейс из ерраты они действительно закрыли в новых редакциях?


Когда всё налажу обязательно проверю. Запрещение прерываний мне сильно мешает, т.к. компрессия jpeg длится ~1c
501-q
Цитата(Ruslan1 @ Dec 12 2015, 17:05) *
Интересно, этот кейс из ерраты они действительно закрыли в новых редакциях?

Я думаю, закрыли. Но нужно либо контролировать что впаяно, либо писать программу универсально.

Илья
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.