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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> bf533 sdram инициализация массива
Lmx2315
сообщение Aug 30 2016, 12:14
Сообщение #1


отэц
*****

Группа: Свой
Сообщений: 1 578
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Добрый день уважаемые!
(Работаю в VisualDSP 5.1.2)
Подскажите что я делаю не так:
1.Сделал initcode.dxe для инициализации SDRAM - загружаю его в проекте.
Сдрам работает ,если там разместить массивы всё пишется и читается .

2. Я добавил заранее заполненный массив :
Код
#pragma section ("my_data_section",RUNTIME_INIT)
unsigned short buf_sdram3[64]={0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xab
cd,0xabcd,0xabcd,
0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xa
bcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,
0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xa
bcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,
0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd};


в .ldf файле прописал :
Код
  my_data_section RUNTIME_INIT
        {
        INPUT_SECTION_ALIGN(4)
        INPUT_SECTIONS( $OBJECTS(my_data_section) )
        }>MEM_SDRAM0_BANK0


компилю программу, вывожу массив на экран - там одни нули.
Вроде как не проинициализировался, почему?


--------------------
"..не нравятся мои выборы? ..приходите в мой суд."
Узурпатор П.
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Sep 5 2016, 17:17
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



А как проверяете массив? В окне просмотра переменных или по адресу? В настройках есть галочка "уничтожать неиспользуемые переменные". если он у вас нигде кроме объявления не находится в тексте, то компилятор просто мог стереть этот блок.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 6 2016, 05:59
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 767
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lmx2315 @ Aug 30 2016, 18:14) *
компилю программу, вывожу массив на экран - там одни нули.
Вроде как не проинициализировался, почему?

А где у Вас инитится SDRAM? Как я понимаю - firmware у Вас грузится bootROM-ом откуда-то (флешь?) частично в SDRAM, потом стартует. После старта firmware внутри него делаете инит SDRAM?
Или может меняете какую-то частоту, от которой тактируется SDRAM? Не выходит ли она за допустимые пределы? Или может за допустимые пределы на новой частоте выходят предустановленные тайминги в регистрах контроллера SDRAM?
Если так - то перед этим надо SDRAM перевести например в режим Self Refresh и только в таком состоянии можно поменять тактовую SDRAM.
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Apr 7 2017, 11:49
Сообщение #4


отэц
*****

Группа: Свой
Сообщений: 1 578
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(kolobochishe @ Sep 5 2016, 20:17) *
А как проверяете массив? В окне просмотра переменных или по адресу? В настройках есть галочка "уничтожать неиспользуемые переменные". если он у вас нигде кроме объявления не находится в тексте, то компилятор просто мог стереть этот блок.


..в прошивке есть функция которая по команде выводит массив в терминал, вот и выводит одни нули.
Хотя если записать (по команде) в какуюнить часть массива какое-нить число - то оно там сохраняется и выводится.
Проверяю и через указатель на память и буквально по индексу массива.


Цитата(jcxz @ Sep 6 2016, 08:59) *
А где у Вас инитится SDRAM? Как я понимаю - firmware у Вас грузится bootROM-ом откуда-то (флешь?) частично в SDRAM, потом стартует. После старта firmware внутри него делаете инит SDRAM?
Или может меняете какую-то частоту, от которой тактируется SDRAM? Не выходит ли она за допустимые пределы? Или может за допустимые пределы на новой частоте выходят предустановленные тайминги в регистрах контроллера SDRAM?
Если так - то перед этим надо SDRAM перевести например в режим Self Refresh и только в таком состоянии можно поменять тактовую SDRAM.


..у меня грузится initcode , потом грузится основная прошивка - массив инициализирован в ней.
Частота PLL и sdram устанавливается в initcode и больше не меняется.


--------------------
"..не нравятся мои выборы? ..приходите в мой суд."
Узурпатор П.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 8 2017, 01:42
Сообщение #5


Adept
******

Группа: Свой
Сообщений: 3 371
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Нули - это подозрительно. Если SDRAM контроллер не настроен, то в SDRAM лежит "мусор".

Посмотрите содержимое образа - там должна быть секция, которая инициализирует массив по этому адресу. В вашем случае это должна быть секция с данными, а поведение такое, как будто секция ZEROFILL. Посмотреть содержимое образа можно утилитой LdrLoader.exe, подсунув ей .ldr файл (на самом деле он hex), утилита легко находится на просторах интернета.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Apr 8 2017, 05:44
Сообщение #6


отэц
*****

Группа: Свой
Сообщений: 1 578
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..спасибо, посмотрю в будни.
Я заметил что если я какой проинициализированый массив или функцию переносил в sdram , то прошивка почему-то уменьшалась.


--------------------
"..не нравятся мои выборы? ..приходите в мой суд."
Узурпатор П.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 8 2017, 06:38
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 767
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(dxp @ Apr 8 2017, 03:42) *
Нули - это подозрительно. Если SDRAM контроллер не настроен, то в SDRAM лежит "мусор".

Содержимое SDRAM никак не зависит от настроенности контроллера SDRAM.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 8 2017, 06:42
Сообщение #8


Adept
******

Группа: Свой
Сообщений: 3 371
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (jcxz @ Apr 8 2017, 13:38) *
Содержимое SDRAM никак не зависит от настроенности контроллера SDRAM.

Правда? Вы это на практике с сабжевым процессором проходили или умозрительно изрекаете?

Объясните, как инициализация SDRAM (а это напрямую влияет на её содержимое), висящей на шине ADSP-BF533, может быть осуществлена без контролера SDRAM?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 8 2017, 06:50
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 767
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lmx2315 @ Apr 7 2017, 13:49) *
..в прошивке есть функция которая по команде выводит массив в терминал, вот и выводит одни нули.
Хотя если записать (по команде) в какуюнить часть массива какое-нить число - то оно там сохраняется и выводится.

А если туда записать не одно число, а массив в несколько КБ? Он полностью сохраняется?
Проверять одну ячейку не корректно - может у Вас там в МК кеш включен rolleyes.gif и прочитаете обратно из него, не проверив никак саму SDRAM.
Судя по описанию - какие-то проблемы с компиляцией/компоновкой. Проверьте по map-файлу - по какому адресу размещается данный массив? Есть ли записи о его инициализации?
Попробуйте перенести его во внутреннее ОЗУ и сравнить что меняется в map.

PS: Неужто за полгода так и не решили проблему??? 05.gif

Цитата(dxp @ Apr 8 2017, 08:42) *
Правда? Вы это на практике с сабжевым процессором проходили или умозрительно изрекаете?
Объясните, как инициализация SDRAM (а это напрямую влияет на её содержимое), висящей на шине ADSP-BF533, может быть осуществлена без контролера SDRAM?

Вы думаете, что алгоритм работы SDRAM как-то зависит от МК, к которому она подключена? laughing.gif
Причём тут процесс инициализации контроллера? Вы внимательно прочитали что сами написали и мой ответ??
Контроллер может быть настроен, туда занесены данные, потом он может быть перестать быть настроен (процессор может быть сброшен или в sleep уйти например), но данные в SDRAM при этом никак не изменятся.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 8 2017, 07:27
Сообщение #10


Adept
******

Группа: Свой
Сообщений: 3 371
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (jcxz @ Apr 8 2017, 13:50) *
Вы думаете, что алгоритм работы SDRAM как-то зависит от МК, к которому она подключена? laughing.gif
Причём тут процесс инициализации контроллера? Вы внимательно прочитали что сами написали и мой ответ??

Пардоньте, но это вы невнимательно читаете. У меня было:

QUOTE
Объясните, как инициализация SDRAM


SDRAM может быть проиницилизирована только с помощью контроллера SDRAM и никак иначе. Поэтому он и был упомянут.


QUOTE (jcxz @ Apr 8 2017, 13:50) *
Контроллер может быть настроен, туда занесены данные, потом он может быть перестать быть настроен (процессор может быть сброшен или в sleep уйти например), но данные в SDRAM при этом никак не изменятся.

Во-первых, ADSP-BF533 - не МК, и у него процесс загрузки и инициализации весьма отличается от флешовых МК. Во-вторых, то, что вы написали в отцитированном: настроен, перестать быть настроен, опять стать быть настроен... - это ваши фантазии. Автор темы явно написал, что у него проблема при загрузке, т.е. после включения питания - данные массива не инициализируются правильно.

Причин тут две:
  • правильно ли настроен контроллер SDRAM - за это отвечает код в .init секции загрузочного образа - именно это я имел в виду;
  • имеется ли секция данных с инициализаторами этого массива в этом же образе.


У меня складывается впечатление, что с ADSP-BF вы дел не имели и пытаетесь экстраполировать свои знания из области МК серии Cortex-M на эту область.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 8 2017, 07:59
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 767
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(dxp @ Apr 8 2017, 09:27) *
Пардоньте, но это вы невнимательно читаете. У меня было:

Вы читать умеете? А понимать смысл прочитанного?
У Вас было то, что написано в сообщении #5. На него я ответил сообщением #7. Причём тут ваше сообщение #8???
Мой ответ из сообщения #7 касается только Вашего #5, он никак не может быть ответом на #8, так как оно было позже.
Вы понимаете, что причина должна быть ранее следствия, и не может быть после?
Вначале - причина, потом - следствие? Улавливаете?
Улавливаете почему моё сообщение #7 не может быть ответом на Ваше #8?

Цитата(dxp @ Apr 8 2017, 09:27) *
SDRAM может быть проиницилизирована только с помощью контроллера SDRAM и никак иначе.

Да ладно? laughing.gif
Наверное те чудаки, которые подключали SDRAM например к AVR по GPIO, этого не знали.

Цитата(dxp @ Apr 8 2017, 09:27) *
Во-вторых, то, что вы написали в отцитированном: настроен, перестать быть настроен, опять стать быть настроен... - это ваши фантазии. Автор темы явно написал, что у него проблема при загрузке,

А Вы сами-то читали, что написал автор темы?
А написал он, что у него сперва грузится одно ПО, которое инитит МК, PLL и SDRAM-контроллер, потом грузится другое ПО. Обычно при загрузке любого ПО, оно при старте настраивает периферию МК, в том числе PLL и контроллер SDRAM.
Вот как раз именно та ситуация, о которой я и пишу.
Очевидно Вы не имели опыта работы с SDRAM, а у меня в нескольких проектах именно так и делается: инитится PLL+SDRAM, затем они используются, потом они переинитятся на другие частоты, но при этом содержимое в SDRAM сохраняется.
Прочитайте выделенное несколько раз, пока не поймёте. Потому что между первой инициализацией и повторной переинициализацией контроллера SDRAM, данные у меня в SDRAM сохраняются, хотя контроллер её в это время не настроен. laughing.gif

Цитата(dxp @ Apr 8 2017, 09:27) *
У меня складывается впечатление, что с ADSP-BF вы дел не имели и пытаетесь экстраполировать свои знания из области МК серии Cortex-M на эту область.

И ещё раз - при чём тут Cortex или не Cortex? Да, с ADSP я не работал. Алгоритм работы SDRAM как-то от этого меняется???
Могу Вас успокоить - с SDRAM я работал и на OMAP L-137 (ARM9+DSP), а не только на Cortex-M.
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Apr 8 2017, 09:28
Сообщение #12


отэц
*****

Группа: Свой
Сообщений: 1 578
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(jcxz @ Apr 8 2017, 09:50) *
А если туда записать не одно число, а массив в несколько КБ? Он полностью сохраняется?
Проверять одну ячейку не корректно - может у Вас там в МК кеш включен rolleyes.gif и прочитаете обратно из него, не проверив никак саму SDRAM.
Судя по описанию - какие-то проблемы с компиляцией/компоновкой. Проверьте по map-файлу - по какому адресу размещается данный массив? Есть ли записи о его инициализации?
Попробуйте перенести его во внутреннее ОЗУ и сравнить что меняется в map.

PS: Неужто за полгода так и не решили проблему??? 05.gif


..по map файлу массив попадает куда нужно и массив и переменную совал в сдрам .
Менял им значения при работе , тестил содержимое сдрам записью туда нескольких килобайт чисел и потом проверкой их.
Пока считаю что sdram настраивается корректно. Но почему-то инится нулями.

з.ы.
Я тогда начал разбираться и забросил, а сейчас время появилось. Обидно - все интерфейсы у блекфина попробовал и так или иначе запустил , а со SDRAMом какие-то проблемы .
И подозрение такое что просто где-то туплю.


--------------------
"..не нравятся мои выборы? ..приходите в мой суд."
Узурпатор П.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 8 2017, 09:53
Сообщение #13


Adept
******

Группа: Свой
Сообщений: 3 371
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (Lmx2315 @ Apr 8 2017, 16:28) *
..по map файлу массив попадает куда нужно и массив и переменную совал в сдрам .
Менял им значения при работе , тестил содержимое сдрам записью туда нескольких килобайт чисел и потом проверкой их.
Пока считаю что sdram настраивается корректно. Но почему-то инится нулями.

Настройка контроллера SDRAM у вас где производится? В init? В основном приложении? Или в обоих?

map файл - это хорошо, но важно, чтобы в ldr была секция, содержащая инициализаторы, с правильным заголовком. И секция init до неё.

QUOTE (Lmx2315 @ Apr 8 2017, 16:28) *
а со SDRAMом какие-то проблемы .
И подозрение такое что просто где-то туплю.

Не отчаивайтесь, там всё просто и надёжно работает, за 10+ лет интенсивного использования BF533 + SDRAM (да там ещё на этой же шине FPGA с самописным контроллером) ни одной проблемы не помню. Вам надо просто посмотреть потроха ldr упомянутой выше утилитой, и сразу станет ясно, где проблема.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 8 2017, 11:24
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 767
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lmx2315 @ Apr 8 2017, 11:28) *
..по map файлу массив попадает куда нужно и массив и переменную совал в сдрам .
Менял им значения при работе , тестил содержимое сдрам записью туда нескольких килобайт чисел и потом проверкой их.
Пока считаю что sdram настраивается корректно. Но почему-то инится нулями.

Я спрашивал - если просто этой секции, в которую линкуется проблемный массив, назначить целевой регион вместо SDRAM внутреннюю ОЗУ, то его содержимое становится правильным или нет?
Смотрите
Инициализация си-переменных (и конструкторы статических объектов) выполняется си-стартап кодом. Инит контроллера SDRAM может выполнятся как в си-коде (после си-стартапа), так и до си-стартапа (в асм как правило, но можно и си-функцию написать).
Если есть какие-то инициализированные переменные (хоть нулями хоть другими константами или конструкторами), то нужен 2ой вариант. Ещё конечно возможен инит контроллера SDRAM скриптом эмулятора (полезно для отладки кода в SDRAM), но здесь не Ваш случай.
Вы пишете, что у Вас контроллер SDRAM инитит загрузчик, потом он грузит образ рабочей прошивки в ОЗУ и запускает его. А сама рабочая прошивка ничего не делает ни с PLL ни с контроллером SDRAM. Так?
Возможно она меняет какую-то периферию или перепрограммирует какую-то ногу контроллера?
И если секция, в которую линкуется массив, инициализируемая, для неё должна быть в образе прошивки секция-инициализатор с начальными данными, которую потом исполнит стартап-код. Она есть?

Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Apr 8 2017, 12:55
Сообщение #15


отэц
*****

Группа: Свой
Сообщений: 1 578
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(dxp @ Apr 8 2017, 12:53) *
Настройка контроллера SDRAM у вас где производится? В init? В основном приложении? Или в обоих?

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

Цитата
map файл - это хорошо, но важно, чтобы в ldr была секция, содержащая инициализаторы, с правильным заголовком. И секция init до неё.


в ldr или в ldf ?

Цитата
Не отчаивайтесь, там всё просто и надёжно работает, за 10+ лет интенсивного использования BF533 + SDRAM (да там ещё на этой же шине FPGA с самописным контроллером) ни одной проблемы не помню. Вам надо просто посмотреть потроха ldr упомянутой выше утилитой, и сразу станет ясно, где проблема.


спасибо sm.gif

Цитата(jcxz @ Apr 8 2017, 14:24) *
Я спрашивал - если просто этой секции, в которую линкуется проблемный массив, назначить целевой регион вместо SDRAM внутреннюю ОЗУ, то его содержимое становится правильным или нет?

вот массив
Код
#pragma section ("sdram0_bank1")
unsigned short buf_sdram3[64]={0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xab
cd,0xabcd,0xabcd,
0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xa
bcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,
0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xa
bcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,
0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd,0xabcd};

если строку с прагмой коментю то содержимое массива выводится.
Цитата
Вы пишете, что у Вас контроллер SDRAM инитит загрузчик, потом он грузит образ рабочей прошивки в ОЗУ и запускает его. А сама рабочая прошивка ничего не делает ни с PLL ни с контроллером SDRAM. Так?

верно, рабочая прошивка не трогает ни плл ни сдрам .
CODE
int main(void)
{
int i=0;
u32 z1=0;

sysreg_write(reg_SYSCFG, 0x32); // Initialize System Configuration Register
// Set_PLL(27,4); // инициализация PLL 400 МГЦ ядро и 100 МГЦ
// InitSDRAM(); //память инициализируем заранее!!!
Init_Flags();
Init_Timers(); //инициализация таймера
//spi_cs(1);
SPIInit (100, 0); // инициализация SPI - 6
UART_init (115200); // инициализация UArrrRT UART_init (38400);UART_SPD_K615
//init_SPORT0 (50000000); //инициализация канала SPORT0
//init_SPORT1 (1562500); //инициализация канала SPORT1
//SPORT0_enable();
CPUAccel();
//Init_RTC();
Init_Interrupts();
time_sekund=0; //обнуление счётчика времени

rx_wr_index0=0;
rx_rd_index0=0;
rx_counter0 =0;

for (i=0;i<40;i++) Transf("\r\n");

Transf("----------\r\n");
Transf("ver:1.900A\r\n");
Transf("----------\r\n");
u_out ("date:",030417);
Transf("----------\r\n");
//WDG_on;
while(1) // вечный цикл
{
AVARIYA_DISP ();
Ethernet_MU ();
//UDP_TIMEOUT_TST(TIMER_UDP_LS_DOWN);
WORK_REGIM ();
};
// return 0;
}

Цитата
Возможно она меняет какую-то периферию или перепрограммирует какую-то ногу контроллера?
И если секция, в которую линкуется массив, инициализируемая, для неё должна быть в образе прошивки секция-инициализатор с начальными данными, которую потом исполнит стартап-код. Она есть?

я тогда не пойму почему если массив лежит не всдраме то в прошивке всё есть и инициализатор тоже по видимому , а если в сдраме то всё вдруг пропадает?


--------------------
"..не нравятся мои выборы? ..приходите в мой суд."
Узурпатор П.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th November 2017 - 17:51
Рейтинг@Mail.ru


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