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

bf533 sdram инициализация массива

и настройка сдрам и pll настраиваются в init. В основном приложеннии ничего не трогаю из этого.

Это правильно. :)

 

в ldr или в ldf ?

Да, расширение файла ldf, но сам файл образа у них называется ldr. Вот, кстати, смотрелка для него.

 

Если правильно отработала утилита elfloader.exe (ей сообщили правильные опции), то в загрузочном образе будет секция с флагом INIT и он будет в первых рядах, а где-то за ней должна быть секция с данными, в заголовке которой должен быть адрес массива в SDRAM и его размер. Этим вьювером всё это вполне удобно проинспектировать - адреса, размеры и флаги он показывает читабельно.

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


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

Это правильно. :)

Да, расширение файла ldf, но сам файл образа у них называется ldr. Вот, кстати, смотрелка для него.

 

Если правильно отработала утилита elfloader.exe (ей сообщили правильные опции), то в загрузочном образе будет секция с флагом INIT и он будет в первых рядах, а где-то за ней должна быть секция с данными, в заголовке которой должен быть адрес массива в SDRAM и его размер. Этим вьювером всё это вполне удобно проинспектировать - адреса, размеры и флаги он показывает читабельно.

 

открыл этой программой одну из старых прошивок (там массив лежал в самом начале sdrama - с адреса 0x68)

И вижу две прошивки , init и рабочую : DXE0 и DXE1 , в DXE1 вижу свой массив с правильного адреса заполненный правильными данными.

Ничего тогда не понимаю.

Может прошивка так быстро грузится что пишет в сдрам данные, а сдрам ещё в "промежуточном состоянии" находится ? Может после init прошивки нужно какую-то паузу создать?

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


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

Может прошивка так быстро грузится что пишет в сдрам данные, а сдрам ещё в "промежуточном состоянии" находится ? Может после init прошивки нужно какую-то паузу создать?

Это вряд ли - если контроллер настроен, то он сразу работает. Вы можете в init добавить свой код, чтобы поэкспериментировать, в т.ч. и паузу. И потом, у вас, вы сказали, там нули лежат. А это означает, что данные-то туда грузятся - если бы контроллер не работал, то там лежал бы "мусор". Такое впечатление, что там кто-то поверх нули записывает. Посмотрите, не ли случайно ещё одной секции с этим же адресом и флагом ZEROFILL?

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


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

Такое впечатление, что там кто-то поверх нули записывает. Посмотрите, не ли случайно ещё одной секции с этим же адресом и флагом ZEROFILL?

..других данных на тот же адрес в файле нет.

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


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

..других данных на тот же адрес в файле нет.

эмулятор есть? Поставьте watchpoint на первое слово вашего массива и увидите кто в него и что пишет.

Также можно записать перед стартапом какое-нить значение (при помощи эмулятора) в одну из ячеек массива и посмотреть после стартапа её содержимое.

Возможно у вас кто-то портит этот массив.

Отлаживать своё ПО можете только Вы сами, удалённо это не сделать.

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


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

эмулятор есть?.

..ооо! эмулятора нет, но в VDSP есть симулятор, может поможет?

 

..ооо! эмулятора нет, но в VDSP есть симулятор, может поможет?

..хотя симулятор без сдрамки наверное не поможет :( . Ну на работе есть отладочная плата аналога под блекфин, там правда сдрам другой , посмотрю на ней.

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


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

Создал свою секцию в файле ldf

 init_sdram RUNTIME_INIT
     {
	 INPUT_SECTION_ALIGN(4)
     	 INPUT_SECTIONS($OBJECTS(init_sdram))
     } > MEM_SDRAM0_BANK1

 

Массив стал выводиться но только почему-то по пол слова правильно , т.е.

Массив записан так :

 

#pragma section ("init_sdram",RUNTIME_INIT)
unsigned short buf_sdram3[buf_size3]={0xabcd,0xabcd,0xabcd};

 

а выводится это:

buf_sdram3:
AB00 AB00 AB00 AB00

 

Почему?

 

Причём если ручками записать по адресу массива двухбайтное слово - то оно записывается правильно, и читается правильно.

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


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

а выводится это:

buf_sdram3:
AB00 AB00 AB00 AB00

 

Почему?

А в ldr файле в соответствующий секции тоже такие же значения лежат?

 

У меня в коде инициализирумый массив описан так:

//------------------------------------------------------------------------------
#pragma section("sdram1")
TCoordinates BrightnessIcon[46] =
{
    {1,8}, {2,2}, {2,8}, {2,13}, {3,3}, {3,12}, {4,6}, {4,7}, {4,8}, {4,9},
    {5,5}, {5,6}, {5,9}, {5,10}, {6,4}, {6,5}, {6,10}, {6,11}, {7,4}, {7,11},
    {8,1}, {8,2}, {8,4}, {8,11}, {8,13}, {8,14}, {9,4}, {9,11}, {10,4}, {10,5},
    {10,10}, {10,11}, {11,5}, {11,6}, {11,9}, {11,10}, {12,6}, {12,7}, {12,8}, {12,9},
    {13,3}, {13,12}, {14,2}, {14,8}, {14,13}, {15,8}
};
//------------------------------------------------------------------------------

А в линкерном скрипте

        sdram1
        {
            INPUT_SECTION_ALIGN(4)
            INPUT_SECTIONS($OBJECTS(sdram1) $LIBRARIES(sdram1))
        } >MEM_SDRAM1

Не помню никаких проблем.

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


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

А в ldr файле в соответствующий секции тоже такие же значения лежат?

 

я ничего не понимаю - посмотрел гляделкой LdrViewer.exe в файле NewProject.ldr и не нашёл там своего массива, хотя он (пусть половинчато) выводится и в файле NewProject.map.xml есть :

 

<OUTPUT_SECTION name='init_sdram' id='03D85970' memory_id='00582A08' type='SHT_PROGBITS' start_address='0x4' word_size='0x80' word_size_unmapped='0x0' word_size_reserved='0x0' >
<INPUT_SECTIONS>
<INPUT_SECTION id='03858170' name='init_sdram' start_address='0x4' size='0x80' element_at='0x0' >
<INPUT_FILE><![CDATA[.\Release\main.doj]]></INPUT_FILE>
<SYMBOL name='_buf_sdram3' address='0x4' size='0x80' binding='GLOBAL'><DEMANGLED_NAME><![CDATA[buf_sdram3]]></DEMANGLED_NAME></SYMBOL>
<SYMBOL name='._buf_sdram3.end' address='0x84' size='0x0' binding='LOCAL'><DEMANGLED_NAME><![CDATA[]]></DEMANGLED_NAME></SYMBOL>

NewProject.rar

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


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

я ничего не понимаю - посмотрел гляделкой LdrViewer.exe в файле NewProject.ldr и не нашёл там своего массива, хотя он (пусть половинчато) выводится и в файле NewProject.map.xml есть :

Да, я тоже не вижу в ldr (в моём есть такие секции - в адресом пространстве SDRAM, т.е. утилита отображает исправно). Если есть в мапе, следовательно, должно быть и в dxe. Если из dxe в ldr не попадает, надо смотреть процесс генерации образа - утилита elfloader. У меня её запуск:

 

COMMON_FLAGS = ' -proc ADSP-' + Processor + ' -si-revision ' + DeviceRev
...
LDRFLAGS  = COMMON_FLAGS
LDRFLAGS += ' -Width 16'

...

LOADER + LDRFLAGS + ' -Init ' + <исполняемый init>

 

где: LOADER - elfloader.exe

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


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

А вы не из под VisualDSP работаете?

Нет, IDE VisialDSP++ только для отладчика использую (точнее, использовал, пока не перелез на линух, кодирование и сборка внешними тулзами (slickedit + scons)).

 

У вас тоже нет препятствий напрямую запустить любой инструмент из пакета. Попробуйте руками (утилитой elfloader.exe) ldr файл сгенерировать.

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


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

По прежнему выводит по пол слова:

 

вывод моего терминала:

buf_sdram3:

AA00 BB00 CC00 DD00 EE00 1100 2200 3300

 

Хотя если пишу после включения ручками в память - пишет и читает нормально, но при условии что пишу по чётному адресу.

А если пытаюсь записать двухбайтное слово по нечётному адресу в памяти - всё зависает, почему?

tst1.rar

init_code.rar

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


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

Хотя если пишу после включения ручками в память - пишет и читает нормально, но при условии что пишу по чётному адресу.

А если пытаюсь записать двухбайтное слово по нечётному адресу в памяти - всё зависает, почему?

У Blackfin есть требование по выравниванию. Однобайтные обращения можно делать по любому адресу, двухбайтные (halfword) - только по чётным адресам, четырёхбайтные (word) - только по адресам, кратным четырём. Если это нарушить, то возникает аппаратное исключение. Это всё описано в документации. Поэтому у вас проц и виснет.

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


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

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

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

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

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

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

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

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

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

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