Easyelectronics.ru

Электроника для всех
Текущее время: 21 июл 2018, 04:56

Часовой пояс: 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
Сообщения: 1702
Откуда: Донецк, ДНР
Привет всем и с наступающим НГ.

Вот уже несколько месяцев довольно часто (честно говоря почти всегда :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
Сообщения: 1957
А у ртоса как куча распределена? Куда положена она? Просто вот в чем фишка. Сажать целиком кучу в SDRAM - крайне неэффективно из-за задержек памяти. Видеобуфер не должен быть вообще под РТОС, он должен быть вне её. К видеобуферу в SDRAM лучше всего обращаться пакетно через ДМА, а не через очередь РТОС, иначе при одиночных запросах можно как раз и получить "отказ доступа" к адресу памяти. Причем, через ДМА обращения должны быть такой длины, чтобы не перекрывать запросов LTDC, которые возобновятся после опустошения FIFO LTDC.
Так же, какова частота памяти? Вернее, её соотношение с пиксельной частотой дисплея. Нормальным будет не менее чем 5:1 при 16-битной шине памяти, иначе память будет не успевать обрабатывать запросы LTDC и запись нового кадра в буфер.
Кароче говоря, проблемы связаны с пропускной способностью шины памяти.


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1702
Откуда: Донецк, ДНР
Куча ртос в 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
Сообщения: 1957
Есть такой докУмент - 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
Сообщения: 112
Буфер в SDRAM 16 бит, 800*480, пока (год) не вываливается...


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

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


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

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


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

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


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


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2657
долговременный - имется в виду считывание ячейки не сразу после записи, а спустя некоторое время, для проверки надежного хранения. Может где буфера друг на друга заползают? У меня размещением блоков в 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
Сообщения: 2657
Ну, на шине все же есть арбитр, хардфаулта не должно быть. Кстати да, с какой частотой гоните данные на экран и какого формата? ARGB8888 требует немалого канала для такого разрешения. И какая ширина ШД SDRAM? У себя сталкивался с ограничением пропускной способности шины.


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1702
Откуда: Донецк, ДНР
У меня шина 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
Сообщения: 2657
У себя проверял так.
Для полноценной проверки между записью и чтением можно вставить паузу в 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
Сообщения: 1957
Еще - посмотреть тайминги памяти, верно ли выставлены? На высоких частотах это имеет большое значение. Правильно ли выставлен интервал рефреша, правильные ли задержки CAS LAtency, согласованы ли они в памяти и в настройках модуля FMC, просчитаны ли остальные задержки.


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

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


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

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


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

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


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1702
Откуда: Донецк, ДНР
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
Сообщения: 112
hd44780 писал(а):
никуда не вылез. Размер тестовой прошивки ~30кил.

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


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


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

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

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


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

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

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


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

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


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

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

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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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