|
RESET LPС1768, Не выполняется старт |
|
|
|
Aug 20 2012, 17:38
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Непонятки получились с ресетом. При подаче питания контроллер не стартует, только при нажатии на кнопку сброса, она предусмотрена для обновления прошивки. Ножка ресет подтянута на 3.3В резистором 10кОм. Поставил керамику на землю 0,1мкФ, ноль результата. Супервизор питания - тоже самое. Сброс и старт программы только через нажатие кнопки. Да и то не сразу, бывает пару-тройку раз приходится нажать или подержать нажатой 3-4 сек. В чем тут может быть дело?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 20)
|
Aug 22 2012, 05:44
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Ножка P2.10 тоже подтянута на питание 3.3В через резистор 47кОм. Это моя первая работа на ARM, многих нюансов не знаю. Есть отладочная плата китайского производства, на ней проц стартует без проблем. В разводке на моей плате вроде все нормально, я не новичек. Дляна проводника до кнопки Сброс и резистор около 15мм, не думаю, что это много
|
|
|
|
|
Aug 22 2012, 17:47
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(shreck @ Aug 22 2012, 09:38)  Очень многие ARM'ы требуют от источника питания определенной скорости нарастания напряжения. Обеспечивает ли ваш источник это? Неоднократно с таким сталкивался. Ваш вопрос вполне уместен. ИП - импульсник на LM2576. Я бы тоже так подумал и гадал. Но свои точки над и ставит супервизор, я его ставил, фронт включения у супервизора, естественно, крутой. Но это не помогает. В том то и проблема. Какая-то строанная ситуация. На первый взгляд - простая.
|
|
|
|
|
Aug 24 2012, 08:08
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940

|
Вот мой вариант. Использую постоянно. 10 из 10 при включении. Тот же LM2576, но на 5В и степдаун на 3,3 В 1 А на стабилизаторе IRU1206. Но у меня много периферии на 5 В и на 3,3 В поэтому такие токи. супервизор DS1816 со слежением за 3,3 В. Внутри у него подтяжка 5к на 3,3 В и дергает полевиком на землю. R29 10кОм, у Вас 47 кОм. R30 шунтирующий для правильной работы ISP (чтоб супервизор не мешался программатору ISP). Ну и C39 от нечистой силы
Прикрепленные файлы
rst.pdf ( 20.38 килобайт )
Кол-во скачиваний: 296
|
|
|
|
|
Aug 24 2012, 17:52
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(theBMV @ Aug 24 2012, 11:08)  Вот мой вариант. Использую постоянно. 10 из 10 при включении. Тот же LM2576, но на 5В и степдаун на 3,3 В 1 А на стабилизаторе IRU1206. Но у меня много периферии на 5 В и на 3,3 В поэтому такие токи. супервизор DS1816 со слежением за 3,3 В. Внутри у него подтяжка 5к на 3,3 В и дергает полевиком на землю. R29 10кОм, у Вас 47 кОм. R30 шунтирующий для правильной работы ISP (чтоб супервизор не мешался программатору ISP). Ну и C39 от нечистой силы  Спасибо, надо разобраться. Уже в понедельник опробую Ваш вариант.
|
|
|
|
|
Aug 26 2012, 16:56
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(TAutomatic @ Aug 24 2012, 20:52)  Спасибо, надо разобраться. Уже в понедельник опробую Ваш вариант. Похоже, у меня схема практически идентичная. У меня только вопрос к Вам. У Вас используется супервизор с открытым коллектором, судя по документации. А подтяжки наверх нет. Есть толко резистор на ресет, это я так понял, защита от втекающего тока на выход супервизора при использовании ISP. Тогда достаточно было бы и 100 ом, зачем там 10 кОм? Это просто, вопрос для общего развития, зачем вы так сделали? Может я чего то не понимаю.
|
|
|
|
|
Aug 31 2012, 07:19
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(theBMV @ Aug 27 2012, 22:28)  В супервизоре внутри подтяжка 5 кОм. Он не с открытым коллектором Ну а 10 кОм последовательно - так туда можно меньше, всё правильно. Это шунтирующий, чтобы втекающий в супервизор ток в момент сброса супервизором не влиял на Reset при подключенном ISP. Просто в даташите написано 3.3v Econoreset With Open Drain Output. Ну да Бог с ним, не в этом дело. У Вас работает так, да и хорошо. Дело в другом, собрали второй экземпляр устройства-там сброс работает нормально. Интересно, в чем разница. Схема и номиналы элементов, естественно, одинаковые.
Сообщение отредактировал TAutomatic - Aug 31 2012, 07:20
|
|
|
|
|
Oct 3 2012, 16:38
|
Группа: Участник
Сообщений: 11
Регистрация: 26-07-05
Пользователь №: 7 090

|
Смущает очень медленный внешний сброс у LPC1768. Приблизительно 5-7 секунд! Для сброса используется формирователь MCP130T-300I, который формирует 300 ms импульс. Какие догадки?
|
|
|
|
|
Oct 5 2012, 08:14
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940

|
Цитата(AlexPo @ Oct 3 2012, 20:38)  Смущает очень медленный внешний сброс у LPC1768. Приблизительно 5-7 секунд! Для сброса используется формирователь MCP130T-300I, который формирует 300 ms импульс. Какие догадки? Частота токового генератора в пределах нормы? Могу Вам предложить замерять время захвата PLL. Т.е. инициализируете МК на внутреннем RC, инициализируете TMR0, и Код . . . T0TC = 0; while(!PLL0STAT_bit.PLOCK); uTime = T0TC; . . . потом uTime посмотрите.
Сообщение отредактировал theBMV - Oct 5 2012, 08:15
|
|
|
|
|
Oct 17 2012, 06:57
|
Группа: Участник
Сообщений: 11
Регистрация: 26-07-05
Пользователь №: 7 090

|
Решил отписаться по по поводу медленного сброса. Возможно будет полезно. В программе была объявлена глобальная переменная (экземпляр класса) с инициализацией большого массива. Вызов конструктора осуществлялся в low_level_init до (!!!) включения основного генератора и инициализации PLL. Таким образом, большой объем работы выполнялся на частоте IRC. Естественно, решил создавать переменную динамически после инициализации PLL. Вся работа теперь осуществляется на частоте 100 МГц вместо 4-х! Кстати! Некорректная работа с указателями при инициализации переменных в low_level_init может приводить к выбросу исключения. А поскольку, состояние памяти случайно, то и ошибка может возникать нерегулярно.
P.S. Спасибо theBMV.
|
|
|
|
|
Oct 22 2012, 05:24
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Не стал заводить ещё одну тему. Спрошу тут. Как правильно программно перезапустить lpc1768 ? Щас используется такой код: Код DBGSTRINFO("Reset!\n\n\n\n"); portDISABLE_INTERRUPTS(); for (int i = 0; i < 35; i++) { NVIC_DisableIRQ((IRQn_Type) i); NVIC_ClearPendingIRQ((IRQn_Type) i); } SCB->VTOR = 0x0; //bootloader_start_addr; asm volatile ( "ldr r0, =0 \n" "msr control, r0 \n" // init control reg like reset did "ldr r0, =0x0 \n" "ldr sp, [r0] \n"//init stack pointer reg on start_bootloader_addr "ldr r0, =0x4 \n" "ldr pc, [r0] \n"//init program counter reg on start_bootloader_addr+4 - jump to user code ); Прошивка перезапускается, но виснет в процессе загрузки. Если передёрнуть питания, то стартует нормально.
Сообщение отредактировал Terminator - Oct 22 2012, 05:25
|
|
|
|
|
Oct 22 2012, 06:07
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Terminator @ Oct 22 2012, 08:24)  Как правильно программно перезапустить lpc1768 ? Использовать бит SYSRESETREQ регистра AIRCR или сброс по срабатыванию собаки путем ее запуска и записи в нее неправильного ключа. QUOTE (Terminator @ Oct 22 2012, 08:24)  Прошивка перезапускается, но виснет в процессе загрузки Значит где-то в процессе инициализации предполагается начальное состояние какого-либо регистра, а после вашего "перезапуска" состояние этого регистра изменено. Например, в настройках PLL. А некоторые регистры вообще не реагируют на повторную запись, например - регистр управления собакой. Поэтому программно вернуть проц полностью в исходное состояние другими методами невозможно - только вызвав честный сброс одним из двух вышеупомянутых методов.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 22 2012, 08:43
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Цитата(Сергей Борщ @ Oct 22 2012, 13:07)  Использовать бит SYSRESETREQ регистра AIRCR или сброс по срабатыванию собаки путем ее запуска и записи в нее неправильного ключа. Цитата Note: support for SYSRESETREQ is not included in LPC17xx devices. This bit reads as 0. Это из мануала к процу. Цитата(Сергей Борщ @ Oct 22 2012, 13:07)  Значит где-то в процессе инициализации предполагается начальное состояние какого-либо регистра, а после вашего "перезапуска" состояние этого регистра изменено. Например, в настройках PLL. А некоторые регистры вообще не реагируют на повторную запись, например - регистр управления собакой. Поэтому программно вернуть проц полностью в исходное состояние другими методами невозможно - только вызвав честный сброс одним из двух вышеупомянутых методов. Вроде всё уже перерыл. Буду копать дальше ... P. S. однако SYSRESETREQ сработал.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|