реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> AT91SAM7S64 в ресете и не выходит из него, Причём так на 6 платах, а год всё работало нормально
Pasha 111
сообщение Feb 27 2009, 20:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Все привет! Делал больше года назад 6 плат для стендов в университете. На платах стоит по одному AT91SAM7S64. Там же разъём USB, подключение блока питания (питание и от USB и от БП: стоит диод для USB и диод на БП, выходы диодов объединяются и идут на линейник 3.3В с кондёрами), светодиоды, кнопочки и т.д. Вообщем типичная отладочная плата + клеммники + драйверы двигателей постоянного тока (A3949).

Целый год всё работало. А потом в течение трёх недель по очереди начали глючить все платы.

Симптомы: при включении (через БП или USB) загораются некоторые лампочки (теже, что и при ресете). При запуске консоля jlinka последний сообщает ID арма, т.е. находит его. При попытке прошить из ИАРа выскакивает сообщение:
Код
Fri Feb 27 23:50:06 2009: Loaded macro file: D:\Programs\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\config\flashloader\Atmel\FlashAT91SAM7Sx.mac
Fri Feb 27 23:50:06 2009: DLL version: V3.92
Fri Feb 27 23:50:06 2009: Firmware: J-Link compiled Jul 30 2008 11:24:37 ARM Rev.5
Fri Feb 27 23:50:06 2009: JTAG speed is initially set to: 32 kHz
Fri Feb 27 23:50:06 2009: TotalIRLen = 4, IRPrint = 0x01
Fri Feb 27 23:50:06 2009: Halting CPU core
Fri Feb 27 23:50:06 2009: Using DBGRQ to halt CPU
Fri Feb 27 23:50:06 2009: Resetting TRST in order to halt CPU
Fri Feb 27 23:50:06 2009: Halting CPU core
Fri Feb 27 23:50:06 2009: Using DBGRQ to halt CPU
Fri Feb 27 23:50:06 2009: Resetting TRST in order to halt CPU
Fri Feb 27 23:50:08 2009: Fatal error: Unable to halt ARM core

Session aborted!
Fri Feb 27 23:50:09 2009: Failed to load flash loader: D:\Programs\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\config\flashloader\Atmel\FlashAT91SAM7Sx.out


Что может быть? Неужели процы погорели? crying.gif
Вся схемотехника стандартная, везде всё залито полигоном. Студенты приличные, никто никуда ничего вроде не тыкал. Скоро лабы начнутся, надо что-то делать! help.gif

Да, забыл сказать, когда горели платы их подключали только по USB, т.е. никаких БП и двигателей не погключали (драйверы A3949 питаются от БП до диода на линейник).

Ещё забыл сказать: все напряжения (+3.3В, +1.8В) в полном порядке (+/- 0.1В)

На ножке резета высокий уровень
Go to the top of the page
 
+Quote Post
KAlex
сообщение Feb 28 2009, 09:39
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Железный erase(55 нога на плюс при включении питания), а потом прошить, пробовали?
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Feb 28 2009, 10:59
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Пробовал - никакой реакции на +3.3В на erase. Как при замыкании на включёном девайсе так и при замыкании до включения и последующем включении sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 28 2009, 11:27
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А скорость нарастания питания в порядке?
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Feb 28 2009, 13:04
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



aaarrr
Не могу проверить - осциллографа нет sad.gif Напряжение берётся или от USB или от БП - всё одно и тоже. Конденсаторы все той ёмкости, что атмеловцы рекомендуют.

KAlex
Получилось! Видимо прошлый раз плохо проводком замкнул ножку erase на +3.3В. Теперь проц прошивается один раз, а потом таже хрень и невозможность повторно прошить без eras'а.

Решил сразу прошить и запустить в отладчике по Ctrl+D.
Проц успешно дошёл до функции main(), далее нормально выполнился код по инициализации кварца и PLL'а. После выполнения строчки
Код
    // Enable User Reset and set its minimal assertion to 960 us
    AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5 << 24);

вывалилась ошибка

Если нажать "Пропустить" то вываливается ошибка "faild to read next instruction" и так до упора пока "Отмена" не нажал. Что может быть??

Я закомментировал эту строчку инициализации reset'а и прошил ещё раз. Всё заработало, только теперь, естественно, нет реакции при нажатии на reset. Работают USB, PWM, PIO, ADC!

На плате есть 4 кнопочки. Так вот одна всегда как бы нажата (0 вольт). Посмотрел, а ножка PA25, на которой кнопка висит, прозванивается с землёй sad.gif Щас посмотрю что ещё на землю упало.

Что это, как вы думаете? (Может ПП с течением времени испортилась и начала коротить с полигоном?)

UPD. Прозвонил все ножки на АРМе: кроме тех, что GND, на землю замыкается только PA25. Не знаю, чей это глюк (кнопки, проца или печатной платы), ибо другие платы домой не взял - не могу проверить. Во всяком случае на плате уже можно провести лабы, что уже хорошо. Хорошо бы с остальными платами так же было....
Но разобраться, что произошло, всё равно хочется. Ни у кого никаких идей нет?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 28 2009, 13:13
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Pasha 111 @ Feb 28 2009, 16:04) *
Но разобраться, что произошло, всё равно хочется. Ни у кого никаких идей нет?

Я бы расставил вероятности так (в порядке убывания):
1. Убит вывод процессора
2. Сломалась кнопка
3. Глюк платы (почти невероятно)
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Feb 28 2009, 13:28
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Я тоже так подумал, правда не ясно, как мог убиться вывод, который кнопкой на GND просто замыкался и был настроен в вход...
Кстати, на ножке резета 2.6В. На совсем другой (но работающей) плате, где тоже SAM7S64 стоит, на резете тоже 2.6В, видимо, это нормально. Сгорел контроллер сброса в проце? о_О
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 28 2009, 13:30
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Pasha 111 @ Feb 28 2009, 16:28) *
на резете тоже 2.6В, видимо, это нормально. Сгорел контроллер сброса в проце? о_О

Нет, это не нормально.
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Feb 28 2009, 14:18
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Хм... Посмотрел: на всех платах, где специально pull-up резистор на +3.3В не стоит, на резете 2.6-2.8В стоит и всё работает.
Попробовал заменить строчку так:
AT91C_BASE_RSTC->RSTC_RMR = 0 | (unsigned int)(0xA5 << 24);
Т.е. я запретил сброс. Теперь после выполнения строчки ошибка не возникает. Т.е. проблема была не с записью в регистр, а с тем, что проц сразу же после её выполнения ресетился. Но на ножку резета я специально зацепил +3.3В. Что может глючить?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 28 2009, 14:31
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Pasha 111 @ Feb 28 2009, 17:18) *
Хм... Посмотрел: на всех платах, где специально pull-up резистор на +3.3В не стоит, на резете 2.6-2.8В стоит и всё работает.

Ошибся я малость - глюк с pull-up'ом описан в еррате.

Цитата(Pasha 111 @ Feb 28 2009, 17:18) *
Т.е. проблема была не с записью в регистр, а с тем, что проц сразу же после её выполнения ресетился. Но на ножку резета я специально зацепил +3.3В. Что может глючить?

Надеюсь, не напрямую?

Прежде чем включать сброс от пина, нужно дождаться окончания генерации сброса наружу, т.е. NRSTL в RSTC_SR должен стоять в '1'.
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Feb 28 2009, 21:10
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Изменил код так:
Код
while(!(AT91C_BASE_RSTC->RSTC_RSR & AT91C_RSTC_NRSTL)) {};
AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5 << 24);

Программа при выполнении зависает в цикле и не выходит. Т.е. тогда процессор не был в ресете, а просто ресетился с огромной скоростью, т.к. программа всегда доходила до записи в mode register и происходил сброс.
Так, собственно, почему процессор стал себя так вести и почему весь год было всё нормально? Как исправить?

Привожу кусок кода. Сначала выполняется стандартный код от атмела (асм и сишник с lowlevelinit). Потом

Код
int main()
{
    Init();

    ............
}

void Init()
{
    SetClock(1, 6); // <--- для кварца 16.000 MHz
    //SetClock(5, 26); // <--- для кварца 18.432 MHz

    uint32 RSR = 0;
    while(!(RSR & AT91C_RSTC_NRSTL))
    {
        RSR = AT91C_BASE_RSTC->RSTC_RSR;
    }
    AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5 << 24);

    ...............
}

void SetClock(uint8 div, uint8 mul)
{
    AT91PS_PMC pPMC = AT91C_BASE_PMC;
    // Set MCK at 48 000 000
    pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & div) |
                     (AT91C_CKGR_PLLCOUNT & (28<<8)) |
                     (AT91C_CKGR_MUL & ((mul - 1)<<16)));

    // Wait the startup time
    while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
    while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
    // Selection of Master Clock and Processor Clock
    pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2;
    while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
    // Select the PLL clock divided by 2
    pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK ;
    while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
}


Всё зависает на while(!(RSR & AT91C_RSTC_NRSTL))

Пробовал комментировать вызов SetClock(), чтобы только атмеловская lowlevelinit выставила частоту (пусть и не 48 МГц, т.к. у меня кварц 16 МГц) - не помогло.
Go to the top of the page
 
+Quote Post
Dir
сообщение Mar 1 2009, 12:30
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(Pasha 111 @ Feb 28 2009, 15:28) *
Я тоже так подумал, правда не ясно, как мог убиться вывод, который кнопкой на GND просто замыкался и был настроен в вход...
Кстати, на ножке резета 2.6В. На совсем другой (но работающей) плате, где тоже SAM7S64 стоит, на резете тоже 2.6В, видимо, это нормально. Сгорел контроллер сброса в проце? о_О


Вообще то выходы проца, соединенные с кнопкой, убиваются статикой на ура. Особенно в зимнее время при низких температурах и малой влажности. Чтобы этого не происходило даже специальные тактовые кнопки изобрели: с металлической оправкой пластмассового штифта кнопки и 5 закороченным на землю выводом. Если у вас тактовая кнопка с 4 выводами и вы живете в Сибири, то в январе-феврале такое событие как умирание входа проца у вас почти со 100-процентной вероятностью должно было произойти. Решение очевидное: использовать кнопки с 5 заземляющим электродом + специальная защита входа от статики: последовательный резистор на кнопку, с другой стороны стабилитрон или BAV99 c одним выводом на землю, а вторым на +питания.
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 2 2009, 16:28
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Настоятельно рекомендую поставить J-Flash. И поиграться с настройками.
rdikeygen, если надо, брошу.
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Mar 5 2009, 23:41
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Dir
Ну в прошлом году платы успешно пережели январь, февраль, март и т.д. не понятно, почему именно сейчас возникли глюки. А вот диоды, да, я поставить не догадался sad.gif На входах АЦП, мышинально уже, поставил BAT54S (сдвоенный диод в SOT23), а вот на кнопки почему-то нет.

KAlex
Простите, торможу, что такое J-Flash?

Принёс домой остальные платы и купил новый проц. Завтра посмотрю, одинакого ли себя ведут остальные платы, а на одной из них ещё АРМ перепаяю, посмотрю на разницу в работе с новым процом и старыми.
Go to the top of the page
 
+Quote Post
Dir
сообщение Mar 6 2009, 19:30
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(Pasha 111 @ Mar 6 2009, 01:41) *
Dir
Ну в прошлом году платы успешно пережели январь, февраль, март и т.д. не понятно, почему именно сейчас возникли глюки. А вот диоды, да, я поставить не догадался sad.gif На входах АЦП, мышинально уже, поставил BAT54S (сдвоенный диод в SOT23), а вот на кнопки почему-то нет.


Абисняю wink.gif
В прошлом году кнопочки были новенькие, а в этом - уже замусоленные пальцами, заслюнявленные чихами и кашлями. Статический заряд через новенькие кнопочки не хочет сбегать на вход проца по поверхности кнопки, а через замусоленные делает это с удовольствием и чем ниже температура, тем меньше влажность и заряда на студентах накапливается больше. А поскольку кнопки 4-х выводные и через защитный ободок и 5 ножку заряд не стекает на землю, то он делает свое черное дело с входом проца. Тем более, как оказалось, вы его даже резистором и диодами не защитили.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016