Easyelectronics.ru

Электроника для всех
Текущее время: 23 янв 2018, 15:07

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: [Решено] STemWin/SDRAM вываливается в HardFault
СообщениеДобавлено: 26 дек 2017, 20:12 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1657
Откуда: Донецк, ДНР
Привет всем и с наступающим НГ.

Вот уже несколько месяцев довольно часто (честно говоря почти всегда :D ) ловлю следующее - STemWin заканчивает свою жизнь в HardFaultHandler, если её буфер размещён в SDRAM. Если его положить во внутренний SRAM проца - всё крутится как часы. Но в этом случае его размеров, увы, не хватает.
Драйвер дисплея - LIN16 из STemWin. Пытался ставить кастомный драйвер - то же самое.

Окружение - F439, SDRAM 32 MB, LTDC, 800х480.

Если использовать FreeRTOS, то валится не STemWin, а FreeRTOS, где-то в недрах асм вставки:
Код:
static void prvPortStartFirstTask( void )
{
   __asm volatile(
               " ldr r0, =0xE000ED08    \n" /* Use the NVIC offset register to locate the stack. */
               " ldr r0, [r0]          \n"
               " ldr r0, [r0]          \n"
               " msr msp, r0         \n" /* Set the msp back to the start of the stack. */
               " cpsie i            \n" /* Globally enable interrupts. */
               " cpsie f            \n"
               " dsb               \n"
               " isb               \n"
               " svc 0               \n" /* System call to start first task. */
               " nop               \n"
            );
}


Кто-нибудь может подсказать, с чем это может быть связано?
Спасибо.

PS
Натыкался на такие же жалобы в интернете - решения не нашёл.
На форумах про FreeRTOS пишут типа таблица векторов изменилась... По-моему фигня какая-то - я даже бут-лоадеры не пользую вообще.


Последний раз редактировалось hd44780 06 янв 2018, 12:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 26 дек 2017, 20:28 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 981
А у ртоса как куча распределена? Куда положена она? Просто вот в чем фишка. Сажать целиком кучу в SDRAM - крайне неэффективно из-за задержек памяти. Видеобуфер не должен быть вообще под РТОС, он должен быть вне её. К видеобуферу в SDRAM лучше всего обращаться пакетно через ДМА, а не через очередь РТОС, иначе при одиночных запросах можно как раз и получить "отказ доступа" к адресу памяти. Причем, через ДМА обращения должны быть такой длины, чтобы не перекрывать запросов LTDC, которые возобновятся после опустошения FIFO LTDC.
Так же, какова частота памяти? Вернее, её соотношение с пиксельной частотой дисплея. Нормальным будет не менее чем 5:1 при 16-битной шине памяти, иначе память будет не успевать обрабатывать запросы LTDC и запись нового кадра в буфер.
Кароче говоря, проблемы связаны с пропускной способностью шины памяти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 26 дек 2017, 20:58 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1657
Откуда: Донецк, ДНР
Куча ртос в SRAM проца. Пытался сажать её в SDRAM (ещё до того, как оно глючить начало) - тормозило оно жутко, здесь Вы правы. Потому я так и не делал. Попробовал пару раз и забросил.
Т.е. в SDRAM фреймбуфер, простые переменные, куча malloc, буферы разные (массивы огромного размера) в SDRAM живут нормально.

С видеобуфером в STemWin же работает ихний драйвер. А до запуска STemWin я в том же видеобуфере малюю как хочу (без ДМА) - хоть бы раз чего повисло (даже в задаче FreeRTOS)...

Частота памяти - 90 MHz (снижал до 60 - пофиг), дисплея - 50 вроде (как помнится из ДШ на дисп можно опустить до 40). Память да, 16-битная.
Про соотношение 5 к 1, честно говоря, не понял. 90/5 = 18 MHz - маловато для PCLK будет. Или я не те частоты считаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 26 дек 2017, 21:32 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 981
Есть такой докУмент - AN4861, и там есть табличка максимального пиксельного клока в пересчете на количество и битность слоев. 5:1 - это я исходя из усредненных практических случаев, потому что именно такое соотношение получается в общем, при использовании SDRAM не только для одного лишь видеобуфера
Нехватку скорости шины вы заметите по подергиванию и срыву горизонтальной синхронизации в дисплее, в том числе и в момент перерисовки картинки в буфере.
Частота пиксельного клока в дисплее 480*800 может быть вдвое ниже, 25 МГц, 500*830*60 Гц = 24,9 МГц.

Про EmWin - не в курсе, я не пользуюсь этой приблудой.
В прниципе, Hard Fault в большинстве случаев означает невозможность получить доступ к желаемому адресу памяти. Может, банально неверно настроен драйвер?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 26 дек 2017, 21:57 
Заглядывает иногда

Зарегистрирован: 17 апр 2013, 21:00
Сообщения: 111
Буфер в SDRAM 16 бит, 800*480, пока (год) не вываливается...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 26 дек 2017, 21:58 
Старожил

Зарегистрирован: 18 июл 2016, 21:17
Сообщения: 640
Вроде для пиксельного клока у дисплея жестко задана только верхняя граница, и то, я на разных дисплеях ее превышал в 2-3 или даже больше раз. А нижнюю границу можно опускать пока мерцание не будет сильно заметно глазами. Для эксперимента хоть вообще поставить 5-10 кадров в сек...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 09:00 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2474
Хм у меня везде буфер stemwina в sdram, проблем ни разу не было. Доберусь, скину проект в личку. А sdram тест нормально проходит, долговременный?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 10:16 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1657
Откуда: Донецк, ДНР
Hold писал(а):
Хм у меня везде буфер stemwina в sdram, проблем ни разу не было. Доберусь, скину проект в личку. А sdram тест нормально проходит, долговременный?


Я тоже больше года проблем не видел :D ...
Да, тест проходит с песнями. Правда не долговременный, а разовый. Тестировал килобайтовыми блоками. Блок заполнял с RNG.
Сегодня попробую погонять подольше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 10:50 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2474
долговременный - имется в виду считывание ячейки не сразу после записи, а спустя некоторое время, для проверки надежного хранения. Может где буфера друг на друга заползают? У меня размещением блоков в SDRAM занимается линкер, вручную адреса не прописываю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 12:37 
Заглядывает иногда

Зарегистрирован: 22 янв 2014, 11:26
Сообщения: 159
Как тут уже писали - проблема может крыться в том что эмвин не делит шину с LTDC. Я у себя так и не понял как решить это. Но я выводил на моник, там частоты запредельные. Просто решил - что стм нужна ддр2 и на этом всё )). С наступающим всех.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 12:50 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2474
Ну, на шине все же есть арбитр, хардфаулта не должно быть. Кстати да, с какой частотой гоните данные на экран и какого формата? ARGB8888 требует немалого канала для такого разрешения. И какая ширина ШД SDRAM? У себя сталкивался с ограничением пропускной способности шины.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 13:28 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1657
Откуда: Донецк, ДНР
У меня шина FMC 16 бит, LTDC - 1 слой, RGB565.
С тестом SDRAM что-то странное.
Вот так проходит:
Код:
    for ( j = 0; j < 1024; j ++ )
       test_data[j] = RNG->DR & 0xFF;

    is_ok = true;
    for ( i = 0; i < sdram_kb_size; i ++ )
    {
        // Запись в SDRAM
       memcpy ( p, test_data, 1024 );

       // Сравнение
       if ( memcmp ( test_data, p, 1024 ) != 0 )
       { // Ошибка
          is_ok = false;
//          break;
          count ++;
       } // if

       p += 1024;
    } // for

Если вот это:
Код:
    for ( j = 0; j < 1024; j ++ )
       test_data[j] = RNG->DR & 0xFF;

перетащить внутрь цикла (т.е. для каждого блока свой набор данных) - валится с тьмой ошибок.

Посмотрю плату, может где-то ножки проца погнулись.. хз, может я где-то что-то зацепил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 13:40 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2474
У себя проверял так.
Для полноценной проверки между записью и чтением можно вставить паузу в 100-1000мс. Этот тест обычно показывает все ошибки непропая по линиям, по адресу можно даже понять какая непропаяна.
Код:
void   SDRAM_TestRTOS( void *pvParameters )
{
   while(1)
   {
      xSemaphoreTake(UsartDebugMutex, portMAX_DELAY);
         RtcPutTimeStamp();
         UsartDebugSendString((const uint8_t*)"[SDRAM]->Start test...\r\n");
      xSemaphoreGive(UsartDebugMutex);

      for (uint32_t i = 0; i< SDRAM_MEMORY_SIZE; i+=4)
      {
         SDRAM_Write32(i,i);
         uint32_t ReadVal = SDRAM_Read32(i);
         if (ReadVal != i)
         {
            xSemaphoreTake(UsartDebugMutex, portMAX_DELAY);
               RtcPutTimeStamp();
               sprintf((char*)UsartDebugBuffer,"[SDRAM]->Test fail, read error:0x%08X = 0x%08X, expected:0x%08X\r\n",(i+SDRAM_START_ADR),ReadVal,i);
               UsartDebugSendString(UsartDebugBuffer);
            xSemaphoreGive(UsartDebugMutex);

            SDRAM_Stat.Stat = SDRAM_ERR;
            vTaskDelete(NULL);
         }
      }
      xSemaphoreTake(UsartDebugMutex, portMAX_DELAY);
         RtcPutTimeStamp();
         UsartDebugSendString((const uint8_t*)"[SDRAM]->Test ok!\r\n");
      xSemaphoreGive(UsartDebugMutex);

      SDRAM_Stat.Stat = SDRAM_OK;
      vTaskDelete(NULL);
   }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 14:31 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 981
Еще - посмотреть тайминги памяти, верно ли выставлены? На высоких частотах это имеет большое значение. Правильно ли выставлен интервал рефреша, правильные ли задержки CAS LAtency, согласованы ли они в памяти и в настройках модуля FMC, просчитаны ли остальные задержки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 16:03 
Заглядывает иногда

Зарегистрирован: 17 апр 2013, 21:00
Сообщения: 111
А ещё стоит посмотреть, не вылез ли размер прошивки за 1МБ и не связано ли это с ерратой по PA12 пину.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 16:29 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1190
ST специально сделало примеры для STM32F746G-DISCO
STemWin + SDRAM + FreeRTOS и еще куча всякой хрени.
И всё работает прекрасно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 16:47 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2474
я кажется с 746 или 429 выдирал драйвер от ST для LTDC+stemwin. Всё вполне заводилось, использовало DMA2D.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 22:05 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1657
Откуда: Донецк, ДНР
Hold писал(а):
У себя проверял так.
Для полноценной проверки между записью и чтением можно вставить паузу в 100-1000мс. Этот тест обычно показывает все ошибки непропая по линиям, по адресу можно даже понять какая непропаяна.

По методам тестирования:
Тесты на запись/чтение байтами/словами/двойными словами (не важно) проходят хоть с задержками, хоть без.
Тесты запись/блоками проходят, если содержимое тестового блока не менять после каждого теста. Если менять - валится почти сразу (3-4-й блок).

embedd писал(а):
А ещё стоит посмотреть, не вылез ли размер прошивки за 1МБ и не связано ли это с ерратой по PA12 пину.

никуда не вылез. Размер тестовой прошивки ~30кил.

x893 писал(а):
ST специально сделало примеры для STM32F746G-DISCO
STemWin + SDRAM + FreeRTOS и еще куча всякой хрени.

У меня нет этой платы. Плата своя, F439. год с лишним работала без проблем.

BusMaster писал(а):
Еще - посмотреть тайминги памяти, верно ли выставлены? На высоких частотах это имеет большое значение. Правильно ли выставлен интервал рефреша, правильные ли задержки CAS LAtency, согласованы ли они в памяти и в настройках модуля FMC, просчитаны ли остальные задержки.

Проверил - нормально всё.
Завтра ещё постараюсь проверить на другой, старой плате с SSD1963. Я уже полтора года ею не пользовался. Там проц, память и схема включения ровно те же, но дисп SSD1963. Но и то всё там работало, несмотря на ревизию Y проца - если кто ещё помнит, там бага с SDRAM+SRAM.
Инит SDRAM 100% списан оттуда, разве что с SPL на порты переделал. С SPL - то же самое.

PS.
LTDC, наверное, ни при чём, т.к. тесты памяти гонял при отключенном LTDC. Он включался только после циклов тестирования.
Потому его, по-моему, дальше можно не рассматривать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 27 дек 2017, 23:24 
Заглядывает иногда

Зарегистрирован: 17 апр 2013, 21:00
Сообщения: 111
hd44780 писал(а):
никуда не вылез. Размер тестовой прошивки ~30кил.

А что там с дефолтным шрифтом по умолчанию? Была проблема, когда его сократить пытался...
Ну и на всякий случай PA12 на выход и в ноль установить.
Ещё как идея: я под видеобуфер (не путать с кучей EMWin) выделил целый метр памяти - там LTDC довольно сильно юзает память за пределами памяти пикселей.
Может, "налезает" что друг на друга.


А как так получилось, что вдруг перестал код работать? Было же всё хорошо?
Повысить задержки на память? Может, последовательные резисторы в шину нужны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 28 дек 2017, 00:48 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 981
hd44780 писал(а):
Тесты запись/блоками проходят, если содержимое тестового блока не менять после каждого теста. Если менять - валится почти сразу (3-4-й блок)..

Ага, а вот эьо уже интересно. Копаем в этом направлении. Работает под РТОС или без нее? А если без РТОС? А по каким адресам тест проводится, особенно интересно, по каким адресам расположен сбойный участок, и не приходится ли он на границу строки или границу банков? Надо выяснить, это чисто программная проблема, или быть может имеет место аппаратная проблема в виде дефектной ножки/дорожки в шине адреса/банка?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 28 дек 2017, 04:22 
Старожил

Зарегистрирован: 18 июл 2016, 21:17
Сообщения: 640
embedd писал(а):
Ещё как идея: я под видеобуфер (не путать с кучей EMWin) выделил целый метр памяти - там LTDC довольно сильно юзает память за пределами памяти пикселей.
Может, "налезает" что друг на друга.

Ничего он не юзает за пределами. Я выделял под видеобуфер меньше памяти, чем нужно (целых 70 кБайт), и в экранную память попадали переменные. Они использовались программой корректно и все работало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 28 дек 2017, 13:31 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1657
Откуда: Донецк, ДНР
BusMaster писал(а):
Работает под РТОС или без нее? А если без РТОС? А по каким адресам тест проводится, особенно интересно, по каким адресам расположен сбойный участок, и не приходится ли он на границу строки или границу банков? Надо выяснить, это чисто программная проблема, или быть может имеет место аппаратная проблема в виде дефектной ножки/дорожки в шине адреса/банка?


RTOS нет, LTDC выключен, включается только после завершения тестов. Так что он влиять не может.
Перед тестами инитится только проц и SDRAM.
На каких смещениях валится внутри килобайтовых блоков, пока не знаю, не смотрел ещё. Но посмотрю.

embedd писал(а):
Ну и на всякий случай PA12 на выход и в ноль установить.

На PA12 у меня вообще USB висит (D+). Я его, правда, не включал, ну попробую включить...

PS.
Прогнал эти же тесты на F429Discovery - всё проходит, независимо от метода тестирования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 28 дек 2017, 14:40 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1190
То есть всё как обычно.
Дело было не в бобине.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 28 дек 2017, 18:51 
Заглядывает иногда

Зарегистрирован: 17 апр 2013, 21:00
Сообщения: 111
bw429 писал(а):
Ничего он не юзает за пределами. Я выделял под видеобуфер меньше памяти, чем нужно (целых 70 кБайт), и в экранную память попадали переменные. Они использовались программой корректно и все работало.


Давно было, помню проблемы были, пока "руками" не разнёс массивы в LCDConf:
Show

Я предлагаю идеи поиска возможной проблемы, есть вероятность, что что-то сможет помочь в решении.
upd.
hd44780, а код инита памяти можете показать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin вываливается в HardFault, если её буфер в SDRAM
СообщениеДобавлено: 28 дек 2017, 19:23 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1657
Откуда: Донецк, ДНР
embedd писал(а):
hd44780, а код инита памяти можете показать?


Ловите 2 варианта - SPL/регистры. Чип SDRAM - MT48LC16M16A2, 32 метра, 16-битная шина. ДШ на него в инете легко находится.
Таких массивов, как у Вас, у меня вообще нет. Один фреймбуфер по адресу 0xC0000000, т.е. с начала SDRAM. Его размер - 800*480*2 = 768000 байт. Слой LTDC один.
Для всего остального - секция линкера, которая сейчас отключена, работаю по адресам напрямую.

По существу сказать пока нечего. Подключаю USB флэшку, чтобы скинуть в файл сбойные адреса, чтобы внимательно их рассмотреть (может где-то ножка какая-то отошла или ещё чего). Пока не закончил.


Вложения:
fmc_sdram_spl.c [15.76 Кб]
Скачиваний: 10
fmc_sdram_regs.c [5.6 Кб]
Скачиваний: 9
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: hybroid


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB