Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-сен-26 13:15

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-29 09:35 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
Здравствуйте!
Процессор 1901ВЦ1T переводится в режим пониженного потребления.
RTC настраивается на пробуждение через 5 минут.
Система работает, но иногда (зависимость от чего-либо не обнаружена) зависает.
Выход из сна происходит (на выводе Standby повесили светодиод), но висит в обработчике Hard Fault
встроенного BOOTROM (адрес 0x1C).
Есть идеи, почему так происходит и как это побороть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-29 13:12 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
Уточните пожалуйста:
- Как часто происходят зависания?
- Происходят ли зависания если будить через вывод WakeUp?
- Как проверяется то, в каком месте зависает МК? Дело в том, что вектор прерывания по адресу 0х1С является зарезервированным. Переходов на этот адрес быть не должно.
- Какой выбран режим загрузки МК (выводы Mode)?
- Что делается в программе при рестарте?

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-29 14:51 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
Зависимость частоты появления зависания от чего-либо не выявлена.
Может зависнуть несколько раз в день, может работать сутки, а потом зависнуть.
При пробуждении через вывод Wakeup просыпается стабильно хорошо.
При обнаружении зависания подключаем JTAG в режиме "соединение без прошивки кода",
и видим что стоим в "вечном" цикле по адресу 0x1C. Анализ кода bootrom показал что по данному адресу
находится обработчик исключения HardFault, анализ стека - UNDEFINSTR.
режим загрузки MODE = 001. До программы при рестарте управление не доходит, зависает в загрузчике.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-29 16:45 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
Сделал проект, запустил дожидаться.

RTC тактируется от LSI или LSE? а Ядро?
или может быть свой проект выложить сможете?

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-29 17:00 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
код засыпания
Код:
      //включаем генератор LSI
      BKP->REG_0F |= BKP_REG_0F_LSI_ON;
      while(!(BKP->REG_0F & BKP_REG_0F_LSI_RDY)); //ждем стабилизации LSI
   
      //переключаемся на тактирование от LSI
      RST_CLK->CPU_CLOCK       = RST_CLK_CPUclkLSI;
      RST_CLK->DSP_CLOCK       = 0;
      RST_CLK->PLL_CONTROL    = 0;

      while((BKP->RTC_CS&(1<<6)) != 0);         //wait until write data in RTC   
   
      //выключаем HSI
      BKP->REG_0F   &= ~BKP_REG_0F_HSI_ON ;
   
      //выключаем HSE
      RST_CLK->HS_CONTROL    = 0;

      while((BKP->RTC_CS&(1<<6)) != 0);         //wait until write data in RTC   

      tmp   = BKP->REG_0E;
      tmp   &= ~(BKP_REG_0E_LOW_Msk| BKP_REG_0E_SelectRI_Msk);
      tmp   |=   (4 << BKP_REG_0E_LOW_Pos) | (4 << BKP_REG_0E_SelectRI_Pos);
      BKP->REG_0E = tmp;

      RST_CLK->PER_CLOCK = RST_CLK_PCLK_BKP;// | RST_CLK_PCLK_RST_CLK;


          SetWakeupTime (60*5); //проснуться  через 5 минут


      // Set SLEEPDEEP bit of Cortex System Control Register
      SCB -> SCR |= SCB_SCR_SLEEPDEEP_Msk;

      while((BKP->RTC_CS&(1<<6)) != 0);         //wait until write data in RTC   
      BKP->REG_0F |= BKP_REG_0F_STANDBY;

      __WFI();
      
      while(1);


так "будильник" взводим
Код:
void SetWakeupTime (uint32_t seconds)
{
     BKP_RTC_WaitForUpdate();
      BKP_RTC_SetAlarm(BKP_RTC_GetCounter() + seconds - 1);
      BKP_RTC_WaitForUpdate();
     BKP->RTC_CS |= BKP_RTC_FLAG_ALRF;                  //clear ALRF in RTC_CS
   
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-29 17:03 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
Проблема может быть еще и аппаратная. Так как у нас несколько тестовых плат, такой эффект наблюдается на двух.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-29 18:08 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
Выход в режим Standby - это выключение внутреннего источника питания ядра - Подробнее: https://startmilandr.ru/doku.php/doc:doclist:sleep
Все кроме RTC, LSI, LSE выключится.

Поэтому по коду:
- Переводить ядро на LSI не нужно, достаточно только RTC (варианты тактирования RTC - https://startmilandr.ru/doku.php/doc:doclist:core_clock)
- Выставлять SleepDeep не нужно , это отдельный режим работы.
- После BKP->REG_0F |= BKP_REG_0F_STANDBY код выполняться не будет, поэтому в __WFI нет необходимости.

Выход из Standby равносилен ресету - т.е. выполнится полный рестарт программы.
Выход из SleepDeep происходит на следующую инструкцию.

Я бы попробовал убрать SleepDeep, вдруг он чем мешает.

Тест запущу завтра на весь день, пока зависание не проявилось.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-30 09:14 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
Спасибо за подсказку. Внесем изменения и попробуем потестировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-31 09:30 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
За 8 часов непрерывного теста зависания на демо-плате не произошло.

Прилагаю проект на котором тестировал:
- МК мигает светодиодом 5 раз
- Уходит в Standby
- Через ~7 сек выходит из Standby по прерыванию от RTC.
- Возвращается к миганию и так по циклу.


Вложения:
1901_StandBy_RTC.zip [559.38 КБ]
Скачиваний: 61

_________________
Отдел технической поддержки support@milandr.ru
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-янв-31 09:42 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
У нас за сутки есть зависание.
Если выходим из Standby через 5 секунд, то работает без зависаний (не было за время теста)
Зависает при цикле 5 минут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-фев-05 10:48 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
Здравствуйте!
Продолжает "зависать" при проcыпании.

Зависает в обработчике HardFault BootRom-а (адрес 0x1c - зацикливается).
Состояние регистров и стека всегда одинаковое:
R0 - 0x400E8000
R1 - 0
R2 - 0
R3 - 0x70
R4 - 0
R5 - 0x4002001C

R13 - 0x20007FE0
LR - FFFFFFF9
R15 - 0x1C
PSR - 0x41000003

в стеке по 0x20007FE0:
0x4000e800
0x0
0x0
0x70
0
0xc5 <- адрес инструкции вызвавшая исключение (в BootRom)
0xA2
0x41000000

Есть идеи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-фев-05 18:06 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
Выставил воскрешение на 5 минут, в HardFault повесил лампочку, но за пол дня сбоя не поймал.

Выложите код, который получился либо сюда, либо на почту support@milandr.ru
Скажите какая маркировка на корпусе микросхемы, сравним ревизии.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-фев-08 09:28 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 158
Откуда: ПКК "Миландр"
За два дня сбоя не произошло, ревизия кристалла 1625, отладочная плата.

В окне дизассембла в режиме отладки можно посмотреть, что расположено в памяти:
(По правой мыши - Show Disassambly at address... - выбор адреса (например с 0))

0x0000005C 4770 BX lr

Это возврат из функции по адресу входа - регистр lr

UNDEFINSTR - это флаг того, что считанное слово не является инструкцией и не может быть выполнено. Если смотреть в дизассемблере то видно, что некоторые данные дизассемблер не интерпретирует как команды.

У себя воспроизвести поведение мне не удалось.

Исправление от 09.02.20118:
Судя по всему инструкция, которая привела к исключению указана в РС = 0хА2, в ассемблере это:
0x000000A2 E92D4FF0 PUSH {r4-r11,lr}

_________________
Отдел технической поддержки support@milandr.ru


Последний раз редактировалось Vasiliy 2018-фев-09 13:47, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-фев-08 17:53 
Не в сети

Зарегистрирован: 2017-фев-14 11:21
Сообщения: 75
Здравствуйте, Владислав!
Написала Вам письмо с адреса support@milandr.ru с несколькими вопросами и с просьбой прислать кристалл для анализа(если такое поведение характерно только для одного кристалла из всей партии).

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Зависает в исключении при Weakup-е
СообщениеДобавлено: 2018-фев-20 10:33 
Не в сети

Зарегистрирован: 2011-сен-19 08:43
Сообщения: 33
Здравствуйте!
Кристалл установлен на образце. Ревизия кристалла 1508.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB