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

SmartFusion2 отладка в DDR

Доброго времени суток!

Столкнулся со следующей проблемой, в разрешении которой и прошу помощи:

Необходимо вести отладку ПО в DDR, т.е. объем eSRAM маловат, а отлаживаться в eNVM не хочется.

Проект сконфигурирован так, что MDDR замапан на адреса 0x00000000. Файл программы слинкован соответствующим образом с помощью стандартного скрипта.

Перед загрузкой выполняются скрипты инициализации (обнуление регистров, настройка MDDR). Они так же стандартные. Далее программа успешно грузится в DDR и запускается, но не генерируются ни прерывания, ни исключения. Таблицу векторов проверил, она лежит в 0x00000000, все четко. Ссылки на адреса обработчиков корректные. Значение VTOR 0x00000000. Не могу понять в чем проблема. Стоит только замапать в 0x00000000 в eNVM и слинковать в eSRAM так все становиться ок.

Если подытожить, то получается, что исключения и прерывания не генерируются при звмапаной в 0x00000000 MDDR

PS: Чип M2S150TS, отладка Advanced development kit

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


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

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

1 Проверить возможность записи в любую ячейку памяти из под отладчика (вероятно это у вас получается, судя по тому что написали выше вы)

2 Проверить положение галочки "eNVM", на сколько я помню, в конфигураторе ядра памяти или вообще самого ядра процессора в Либеро. Возможно это выбор места, откуда должна стартовать программа ядра процессора. Не помню точно. На сколько вспомитается, это можно сделать и из под отладчика. Т.е. установить нужные биты в конфиг регистрах, и вызвать сброс только проц. ядра.

3. Проверить куда смаплена ваша ДДР, и куда смаплен старт, т.е. физически как память была скажем на адресе 0хА0000000, так там и состанется, но этот адрес можно смапить на адрес 0х00000000. Т.е. адреса разные, а физичеки будет доступ к одному и тому же.

4 Проверить, загрузилась ли программа вообще в ДДР.

5 Возможно после всех этих манипуляций, придется загрузить программу в ДДР, и вызвать сброс проц. ядра, без сброса всей микросхемы SM2.

6 Проверить, прыгает ли указатель на адрес куда вам нужно, в итоге, после сброска проц. ядра.

Еще были какие-то танцы с бубнами с линкерскриптом. Т.е. пришлось ручками править чего-то в линкере, чтобы все работало как хочется. В автомате он генерирует не корректно.

Не судите строго, воспоминания обрывочные.

Написал только потому, что в свое время было очень мало информации по SM2. Приходилось много экспериментировать.

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


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

10 hours ago, slkhome said:

Тема еще актуальна?

Спасибо. Решение было следующее: послу загрузки программы в ddr необходимо выполнить в openocd команду soft_reset_halt. После данной процедуры все работает соответствующим образом

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


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

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

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

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

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

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

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

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

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

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