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

 
 
> STM32F429 Внутренняя RAM и внешняя SDRAM, Работают по разному
MiklPolikov
сообщение Dec 11 2015, 04:10
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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

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

Заранее спасибо !


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gazpar
сообщение Dec 11 2015, 06:52
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



Оффтоп.

Когда искал варианты реализации 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]);
}

Выдаёт такой результат:


Сообщение отредактировал gazpar - Dec 11 2015, 07:21
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post



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

 


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


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