Перейти к содержанию
    

Mega128 - самопроизвольная установка Lock Bits

Доброго всем времени суток!

 

У меня с одной из плат случилась небольшая заминка, объяснить которую я не могу. Плата некоторое время была у заказчика (соответственно, там никакой информации о неправомерных действиях не вытрясти). Сейчас забрали ее назад, все прекрасно работает, но как только начал пользоваться своим загрузчиком, обнаружил, что он реагирует на команды, демонстрирует процесс прошивки, но ничего во флэш не прошивает. Проверка Lock Bits выяснила, что стоит запрещение использования SPM/LPM как в секции кода, так и в секции бутлоадера. Мемори лок не установлен, поэтому программа шьется через JTAGICE нормально (LockBit=0xC3).

Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно. Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика.

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

С чем может быть связано такое поведение? Отчего установились локи? Может быть, кто-то уже встречал подобное???

Спасибо за ответы!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Два варианта, (даже три)

1. Битый проц.

2. Сами залочили и забыли.

 

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

 

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

Локи менять нельзя их можно только стереть командой Chip-Erase.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проверить локи может и сама программа ,доработайте ее и проблемы отпадут само собой.

Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно. Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика.

Изменить локи ,можно только к большей защите .читаем даташит.

Или стереть ,на...г все. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проверить локи может и сама программа ,доработайте ее и проблемы отпадут само собой.

 

Изменить локи ,можно только к большей защите .читаем даташит.

Или стереть ,на...г все. :)

О, действительно, тормознул :) Локи снял. Но вот почему они установились??

Локи проверить-то можно, но снять-то их программно с сохранением загрузчика вряд ли получится, так что эффекта от этого не будет :(

 

Два варианта, (даже три)

1. Битый проц.

2. Сами залочили и забыли.

 

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

Локи менять нельзя их можно только стереть командой Chip-Erase.

1 - возможно

2 - вряд ли, уж очень странное распределение

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

 

А за подсказку со стиранием - спасибо :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О, действительно, тормознул :) Локи снял. Но вот почему они установились??

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

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

Локи проверить-то можно, но снять-то их программно с сохранением загрузчика вряд ли получится, так

Я электронщик ,а не экстрасенс,и не верю в случайности ,и можно в такой ситуации или обвинить себя или заказчика ,как исключить себя из такой ситуации ,я написал выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... Проверка Lock Bits выяснила, что стоит запрещение использования SPM/LPM как в секции кода, так и в секции бутлоадера. Мемори лок не установлен...

...Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика.

...С чем может быть связано такое поведение? Отчего установились локи? ...

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

 

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

А биты, которые остались целы (LB2 LB1) самопрограммировать нельзя. Делайте выводы.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вряд ли, квалификация не позволит залезть, да и смысла нет

А вот попробовать на "а вдруг..?" и потыркать на галочки в программаторе ума у него вполне хватит. К Вам что никогда не обращались "посмотреть считать"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот попробовать на "а вдруг..?" и потыркать на галочки в программаторе ума у него вполне хватит. К Вам что никогда не обращались "посмотреть считать"?

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

 

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

 

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

А биты, которые остались целы (LB2 LB1) самопрограммировать нельзя. Делайте выводы.

 

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

 

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

Да, биты точно установлены не были, перед отправкой платы прошли контроль загрузки новой версии, все прошло нормально. Да, я почитал только что даташит по меге128, действительно программно можно установить только эти биты, это хорошая зацепка. Но вот по поводу ресета - это странно, потому что включен как внутренний brown-out, так и внешний супервизор стоит...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня ситуация повторилась. Произошло это при заливании прошивки из-под IAR при помощи JTAGICE (копия). Плата та же самая, хотя работаю не только с ней. Прошивка удачно залилась, но затем обнаружилось, что установлены те же LockBits. Может ли это быть связано с битым контроллером? Не встречалось ли ни у кого подобного?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго всем времени суток!

Сегодня снова получил плату с залоченным содержимым. Ситуация туманная, поэтому опишу подробнее - на изделии стоит самописный загрузчик для обновления прошивки, загрузчик не привязан к бут-области, но физически находится там (если совсем точно - в самом низу флэша, сверху него находится прошивка), для уменьшения размера прошивки в 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В, чего ему не хватает??? Нестабильности работы платы ранее замечено не было, не в режиме обновления прошивки все работает без сбоев.

Заранее спасибо!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мало данных.

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 будет одинаковое число, то совсем прекрасно, остается только найти какой указатель принимает такое значение в основной программе..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мало данных.

1. Та же самая плата или в этот раз другая

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

2. При заливании или после (напр откл/вкл питания)?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...