Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Mega128 - самопроизвольная установка Lock Bits
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Polaris
Доброго всем времени суток!

У меня с одной из плат случилась небольшая заминка, объяснить которую я не могу. Плата некоторое время была у заказчика (соответственно, там никакой информации о неправомерных действиях не вытрясти). Сейчас забрали ее назад, все прекрасно работает, но как только начал пользоваться своим загрузчиком, обнаружил, что он реагирует на команды, демонстрирует процесс прошивки, но ничего во флэш не прошивает. Проверка Lock Bits выяснила, что стоит запрещение использования SPM/LPM как в секции кода, так и в секции бутлоадера. Мемори лок не установлен, поэтому программа шьется через JTAGICE нормально (LockBit=0xC3).
Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно. Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика.
Плата единственная в своем роде, до сих пор с подобным поведением не сталкивался, загрузчик работал без вопросов.
С чем может быть связано такое поведение? Отчего установились локи? Может быть, кто-то уже встречал подобное???
Спасибо за ответы!!!
defunct
Цитата(Polaris @ Nov 18 2008, 15:18) *
Плата единственная в своем роде, до сих пор с подобным поведением не сталкивался, загрузчик работал без вопросов.

Два варианта, (даже три)
1. Битый проц.
2. Сами залочили и забыли.

3. Если заказчик от нее отказался, то вероятно скопировал и залочил smile.gif

Цитата
Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно

Локи менять нельзя их можно только стереть командой Chip-Erase.
bodja74
проверить локи может и сама программа ,доработайте ее и проблемы отпадут само собой.
Цитата(Polaris @ Nov 18 2008, 16:18) *
Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно. Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика.

Изменить локи ,можно только к большей защите .читаем даташит.
Или стереть ,на...г все. smile.gif
Polaris
Цитата(bodja74 @ Nov 18 2008, 15:34) *
проверить локи может и сама программа ,доработайте ее и проблемы отпадут само собой.

Изменить локи ,можно только к большей защите .читаем даташит.
Или стереть ,на...г все. smile.gif

О, действительно, тормознул smile.gif Локи снял. Но вот почему они установились??
Локи проверить-то можно, но снять-то их программно с сохранением загрузчика вряд ли получится, так что эффекта от этого не будет sad.gif

Цитата(defunct @ Nov 18 2008, 15:28) *
Два варианта, (даже три)
1. Битый проц.
2. Сами залочили и забыли.

3. Если заказчик от нее отказался, то вероятно скопировал и залочил smile.gif
Локи менять нельзя их можно только стереть командой Chip-Erase.

1 - возможно
2 - вряд ли, уж очень странное распределение
3 - вряд ли, квалификация не позволит залезть, да и смысла нет

А за подсказку со стиранием - спасибо smile.gif
bodja74
Цитата(Polaris @ Nov 18 2008, 17:01) *
О, действительно, тормознул smile.gif Локи снял. Но вот почему они установились??

Без "нужных" локов ,не запускаем програму ,я про это имел ввиду.
У вас программа изначально не запустится.
Цитата
Локи проверить-то можно, но снять-то их программно с сохранением загрузчика вряд ли получится, так

Я электронщик ,а не экстрасенс,и не верю в случайности ,и можно в такой ситуации или обвинить себя или заказчика ,как исключить себя из такой ситуации ,я написал выше.
Baser
Цитата(Polaris @ Nov 18 2008, 15:18) *
... Проверка Lock Bits выяснила, что стоит запрещение использования SPM/LPM как в секции кода, так и в секции бутлоадера. Мемори лок не установлен...
...Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика.
...С чем может быть связано такое поведение? Отчего установились локи? ...

Если я правильно понял ваше сообщение, то перед передачей плат заказчику, лок-биты на плате не были установлены, а после получения плат назад - были.

Если это так, то вполне вероятно, что лок-биты прошил сам МК при сбое программы. Как раз те лок-биты, что у вас активировались (BLB12 BLB11 BLB02 BLB01) можно самопрограммировать.
А биты, которые остались целы (LB2 LB1) самопрограммировать нельзя. Делайте выводы.

Или на плате проблемы с питанием, или высока вероятность появления больших импульсных помех по питанию, или не включен brown-out reset...

Хотя, сама возможность самопрограммирования лок-битов, даже при наличии всех механизмов защиты, не позволяет со 100% уверенностью исключить самопроизвольную возможность их взведения sad.gif
VDG
Цитата
вряд ли, квалификация не позволит залезть, да и смысла нет

А вот попробовать на "а вдруг..?" и потыркать на галочки в программаторе ума у него вполне хватит. К Вам что никогда не обращались "посмотреть считать"?
Polaris
Цитата(VDG @ Nov 18 2008, 18:26) *
А вот попробовать на "а вдруг..?" и потыркать на галочки в программаторе ума у него вполне хватит. К Вам что никогда не обращались "посмотреть считать"?

У заказчика есть исходники, причем на Си, программатора у них нет, так что это очень маловероятно. Смотреть там ну абсолютно нечего было.

Цитата(Baser @ Nov 18 2008, 16:55) *
Если я правильно понял ваше сообщение, то перед передачей плат заказчику, лок-биты на плате не были установлены, а после получения плат назад - были.

Если это так, то вполне вероятно, что лок-биты прошил сам МК при сбое программы. Как раз те лок-биты, что у вас активировались (BLB12 BLB11 BLB02 BLB01) можно самопрограммировать.
А биты, которые остались целы (LB2 LB1) самопрограммировать нельзя. Делайте выводы.

Или на плате проблемы с питанием, или высока вероятность появления больших импульсных помех по питанию, или не включен brown-out reset...

Хотя, сама возможность самопрограммирования лок-битов, даже при наличии всех механизмов защиты, не позволяет со 100% уверенностью исключить самопроизвольную возможность их взведения sad.gif

Да, биты точно установлены не были, перед отправкой платы прошли контроль загрузки новой версии, все прошло нормально. Да, я почитал только что даташит по меге128, действительно программно можно установить только эти биты, это хорошая зацепка. Но вот по поводу ресета - это странно, потому что включен как внутренний brown-out, так и внешний супервизор стоит...
Polaris
Сегодня ситуация повторилась. Произошло это при заливании прошивки из-под IAR при помощи JTAGICE (копия). Плата та же самая, хотя работаю не только с ней. Прошивка удачно залилась, но затем обнаружилось, что установлены те же LockBits. Может ли это быть связано с битым контроллером? Не встречалось ли ни у кого подобного?
Polaris
Доброго всем времени суток!
Сегодня снова получил плату с залоченным содержимым. Ситуация туманная, поэтому опишу подробнее - на изделии стоит самописный загрузчик для обновления прошивки, загрузчик не привязан к бут-области, но физически находится там (если совсем точно - в самом низу флэша, сверху него находится прошивка), для уменьшения размера прошивки в IAR включена максимальная оптимизация, загрузчик имеет размер в 3 страницы для Mega128 (768 байт), еще одна страница непосредственно под ним предназначена для хранения первой страницы прошивки (думаю, это не особо важно). Я полагаю, что залочивание контроллера происходит при заливке новой прошивки в результате какого-то сбоя. Просмотрев код, сгенерированный IAR, вижу, что он выделил участки записи вот в таком виде:
LDI R30, 0x00
LDI R31, 0x00
OUT RAMPZ, R30
STS SPMCSR, R16
SPM
на них передаются данные, в том числе и в регистре R16. Если произошел сбой и переход на этот адрес, а содержимое R16 не определено, то очевидно, может произойти и запись мусора в регистр локов.
Если снизить уровень оптимизации, то он в явном виде помещает в R16 нужное значение (0x01, 0x03 или 0x05 в зависимости от операции, локи я в загрузчике никак не меняю, так что 0x09 взяться неоткуда), думаю, тут никакой сбой не страшен.
То есть, думаю, что причина самоустановки локов - именно в результате перехода на этот участок при непонятном сбое микроконтроллера. Теперь вопрос - чем может быть вызван такой переход?? БОД в контроллере установлен, есть внешний супервизор на 4,6В, чего ему не хватает??? Нестабильности работы платы ранее замечено не было, не в режиме обновления прошивки все работает без сбоев.
Заранее спасибо!!
defunct
Мало данных.
1. Та же самая плата или в этот раз другая

>> Произошло это при заливании прошивки из-под IAR при помощи JTAGICE (копия).
2. При заливании или после (напр откл/вкл питания)?

Если есть подозрения насчет сбоя, можно- вместо бутлоадера залить в BOOT секцию код ловушки
Напр всю секцию забить парами команд:

LDR R16, i
RJMP print_r16

LDR R16, i + 1
RJMP print_r16
...
LDR R16, n
RJMP print_r16

или если есть возможность зарезервировать один из регистров чтобы компилятор его не пользовал, забить таким кодом:

inc RR
inc RR
...
inc RR
rjmp print_rr - в самой последней ячейке флеш.

(или чем-то подобным)
Погонять плату в работе с этими ловушками. Словите - считайте подтвердили свою догадку... Два раза словите - хорошо, а если еще в r16 будет одинаковое число, то совсем прекрасно, остается только найти какой указатель принимает такое значение в основной программе..
Polaris
Цитата(defunct @ Feb 18 2009, 00:28) *
Мало данных.
1. Та же самая плата или в этот раз другая
>> Произошло это при заливании прошивки из-под IAR при помощи JTAGICE (копия).
2. При заливании или после (напр откл/вкл питания)?

Плата уже другая. Думаю, что JTAGICE уже не при чем, в прошлый раз это явление обнаружилось после того, как несерийная плата вернулась, и я начал с ней работать отладчиком, думаю, что там локи установились в процессе обновления, но так как обновление было завершено, ничего страшного не случилось, в этот раз обновление было прервано, в итоге заметить явление удалось раньше. С чем связан сбой - не знаю, у меня этот загрузчик пишется в процессе тестирования свежей платы, после чего пишется через него прошивка, этот процесс проводился уже как минимум пару сотен раз, еще какое-то количество раз переписывал прошивку с помощью загрузчика, ни одного сбоя замечено не было. Хотя, возможно, какие-то платы оказались залочеными, тут я не могу быть уверенным.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.