|
bf533 sdram инициализация массива |
|
|
|
Aug 30 2016, 12:14
|

отэц
    
Группа: Свой
Сообщений: 1 660
Регистрация: 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 компилю программу, вывожу массив на экран - там одни нули. Вроде как не проинициализировался, почему?
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Apr 7 2017, 11:49
|

отэц
    
Группа: Свой
Сообщений: 1 660
Регистрация: 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 и больше не меняется.
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Apr 8 2017, 06:50
|
Гуру
     
Группа: Свой
Сообщений: 4 371
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Lmx2315 @ Apr 7 2017, 13:49)  ..в прошивке есть функция которая по команде выводит массив в терминал, вот и выводит одни нули. Хотя если записать (по команде) в какуюнить часть массива какое-нить число - то оно там сохраняется и выводится. А если туда записать не одно число, а массив в несколько КБ? Он полностью сохраняется? Проверять одну ячейку не корректно - может у Вас там в МК кеш включен  и прочитаете обратно из него, не проверив никак саму SDRAM. Судя по описанию - какие-то проблемы с компиляцией/компоновкой. Проверьте по map-файлу - по какому адресу размещается данный массив? Есть ли записи о его инициализации? Попробуйте перенести его во внутреннее ОЗУ и сравнить что меняется в map. PS: Неужто за полгода так и не решили проблему???  Цитата(dxp @ Apr 8 2017, 08:42)  Правда? Вы это на практике с сабжевым процессором проходили или умозрительно изрекаете? Объясните, как инициализация SDRAM (а это напрямую влияет на её содержимое), висящей на шине ADSP-BF533, может быть осуществлена без контролера SDRAM? Вы думаете, что алгоритм работы SDRAM как-то зависит от МК, к которому она подключена? Причём тут процесс инициализации контроллера? Вы внимательно прочитали что сами написали и мой ответ?? Контроллер может быть настроен, туда занесены данные, потом он может быть перестать быть настроен (процессор может быть сброшен или в sleep уйти например), но данные в SDRAM при этом никак не изменятся.
|
|
|
|
|
Apr 8 2017, 07:27
|

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

|
QUOTE (jcxz @ Apr 8 2017, 13:50)  Вы думаете, что алгоритм работы SDRAM как-то зависит от МК, к которому она подключена? Причём тут процесс инициализации контроллера? Вы внимательно прочитали что сами написали и мой ответ?? Пардоньте, но это вы невнимательно читаете. У меня было: QUOTE Объясните, как инициализация SDRAM SDRAM может быть проиницилизирована только с помощью контроллера SDRAM и никак иначе. Поэтому он и был упомянут. QUOTE (jcxz @ Apr 8 2017, 13:50)  Контроллер может быть настроен, туда занесены данные, потом он может быть перестать быть настроен (процессор может быть сброшен или в sleep уйти например), но данные в SDRAM при этом никак не изменятся. Во-первых, ADSP-BF533 - не МК, и у него процесс загрузки и инициализации весьма отличается от флешовых МК. Во-вторых, то, что вы написали в отцитированном: настроен, перестать быть настроен, опять стать быть настроен... - это ваши фантазии. Автор темы явно написал, что у него проблема при загрузке, т.е. после включения питания - данные массива не инициализируются правильно. Причин тут две: - правильно ли настроен контроллер SDRAM - за это отвечает код в .init секции загрузочного образа - именно это я имел в виду;
- имеется ли секция данных с инициализаторами этого массива в этом же образе.
У меня складывается впечатление, что с ADSP-BF вы дел не имели и пытаетесь экстраполировать свои знания из области МК серии Cortex-M на эту область.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 8 2017, 07:59
|
Гуру
     
Группа: Свой
Сообщений: 4 371
Регистрация: 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 и никак иначе. Да ладно? Наверное те чудаки, которые подключали SDRAM например к AVR по GPIO, этого не знали. Цитата(dxp @ Apr 8 2017, 09:27)  Во-вторых, то, что вы написали в отцитированном: настроен, перестать быть настроен, опять стать быть настроен... - это ваши фантазии. Автор темы явно написал, что у него проблема при загрузке, А Вы сами-то читали, что написал автор темы? А написал он, что у него сперва грузится одно ПО, которое инитит МК, PLL и SDRAM-контроллер, потом грузится другое ПО. Обычно при загрузке любого ПО, оно при старте настраивает периферию МК, в том числе PLL и контроллер SDRAM. Вот как раз именно та ситуация, о которой я и пишу. Очевидно Вы не имели опыта работы с SDRAM, а у меня в нескольких проектах именно так и делается: инитится PLL+SDRAM, затем они используются, потом они переинитятся на другие частоты, но при этом содержимое в SDRAM сохраняется. Прочитайте выделенное несколько раз, пока не поймёте. Потому что между первой инициализацией и повторной переинициализацией контроллера SDRAM, данные у меня в SDRAM сохраняются, хотя контроллер её в это время не настроен. Цитата(dxp @ Apr 8 2017, 09:27)  У меня складывается впечатление, что с ADSP-BF вы дел не имели и пытаетесь экстраполировать свои знания из области МК серии Cortex-M на эту область. И ещё раз - при чём тут Cortex или не Cortex? Да, с ADSP я не работал. Алгоритм работы SDRAM как-то от этого меняется??? Могу Вас успокоить - с SDRAM я работал и на OMAP L-137 (ARM9+DSP), а не только на Cortex-M.
|
|
|
|
|
Apr 8 2017, 09:28
|

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

|
Цитата(jcxz @ Apr 8 2017, 09:50)  А если туда записать не одно число, а массив в несколько КБ? Он полностью сохраняется? Проверять одну ячейку не корректно - может у Вас там в МК кеш включен  и прочитаете обратно из него, не проверив никак саму SDRAM. Судя по описанию - какие-то проблемы с компиляцией/компоновкой. Проверьте по map-файлу - по какому адресу размещается данный массив? Есть ли записи о его инициализации? Попробуйте перенести его во внутреннее ОЗУ и сравнить что меняется в map. PS: Неужто за полгода так и не решили проблему???  ..по map файлу массив попадает куда нужно и массив и переменную совал в сдрам . Менял им значения при работе , тестил содержимое сдрам записью туда нескольких килобайт чисел и потом проверкой их. Пока считаю что sdram настраивается корректно. Но почему-то инится нулями. з.ы. Я тогда начал разбираться и забросил, а сейчас время появилось. Обидно - все интерфейсы у блекфина попробовал и так или иначе запустил , а со SDRAMом какие-то проблемы . И подозрение такое что просто где-то туплю.
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Apr 8 2017, 09:53
|

Adept
     
Группа: Свой
Сообщений: 3 419
Регистрация: 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 упомянутой выше утилитой, и сразу станет ясно, где проблема.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 8 2017, 11:24
|
Гуру
     
Группа: Свой
Сообщений: 4 371
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Lmx2315 @ Apr 8 2017, 11:28)  ..по map файлу массив попадает куда нужно и массив и переменную совал в сдрам . Менял им значения при работе , тестил содержимое сдрам записью туда нескольких килобайт чисел и потом проверкой их. Пока считаю что sdram настраивается корректно. Но почему-то инится нулями. Я спрашивал - если просто этой секции, в которую линкуется проблемный массив, назначить целевой регион вместо SDRAM внутреннюю ОЗУ, то его содержимое становится правильным или нет? Смотрите Инициализация си-переменных (и конструкторы статических объектов) выполняется си-стартап кодом. Инит контроллера SDRAM может выполнятся как в си-коде (после си-стартапа), так и до си-стартапа (в асм как правило, но можно и си-функцию написать). Если есть какие-то инициализированные переменные (хоть нулями хоть другими константами или конструкторами), то нужен 2ой вариант. Ещё конечно возможен инит контроллера SDRAM скриптом эмулятора (полезно для отладки кода в SDRAM), но здесь не Ваш случай. Вы пишете, что у Вас контроллер SDRAM инитит загрузчик, потом он грузит образ рабочей прошивки в ОЗУ и запускает его. А сама рабочая прошивка ничего не делает ни с PLL ни с контроллером SDRAM. Так? Возможно она меняет какую-то периферию или перепрограммирует какую-то ногу контроллера? И если секция, в которую линкуется массив, инициализируемая, для неё должна быть в образе прошивки секция-инициализатор с начальными данными, которую потом исполнит стартап-код. Она есть?
|
|
|
|
|
Apr 8 2017, 12:55
|

отэц
    
Группа: Свой
Сообщений: 1 660
Регистрация: 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 упомянутой выше утилитой, и сразу станет ясно, где проблема. спасибо  Цитата(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; } Цитата Возможно она меняет какую-то периферию или перепрограммирует какую-то ногу контроллера? И если секция, в которую линкуется массив, инициализируемая, для неё должна быть в образе прошивки секция-инициализатор с начальными данными, которую потом исполнит стартап-код. Она есть? я тогда не пойму почему если массив лежит не всдраме то в прошивке всё есть и инициализатор тоже по видимому , а если в сдраме то всё вдруг пропадает?
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|