Polaris 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба Доброго всем времени суток! У меня с одной из плат случилась небольшая заминка, объяснить которую я не могу. Плата некоторое время была у заказчика (соответственно, там никакой информации о неправомерных действиях не вытрясти). Сейчас забрали ее назад, все прекрасно работает, но как только начал пользоваться своим загрузчиком, обнаружил, что он реагирует на команды, демонстрирует процесс прошивки, но ничего во флэш не прошивает. Проверка Lock Bits выяснила, что стоит запрещение использования SPM/LPM как в секции кода, так и в секции бутлоадера. Мемори лок не установлен, поэтому программа шьется через JTAGICE нормально (LockBit=0xC3). Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно. Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика. Плата единственная в своем роде, до сих пор с подобным поведением не сталкивался, загрузчик работал без вопросов. С чем может быть связано такое поведение? Отчего установились локи? Может быть, кто-то уже встречал подобное??? Спасибо за ответы!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба Плата единственная в своем роде, до сих пор с подобным поведением не сталкивался, загрузчик работал без вопросов. Два варианта, (даже три) 1. Битый проц. 2. Сами залочили и забыли. 3. Если заказчик от нее отказался, то вероятно скопировал и залочил :) Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно Локи менять нельзя их можно только стереть командой Chip-Erase. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bodja74 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба проверить локи может и сама программа ,доработайте ее и проблемы отпадут само собой. Попытка изменить локи ни к чему не приводит, JTAGICE пробует это сделать, но безуспешно. Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика. Изменить локи ,можно только к большей защите .читаем даташит. Или стереть ,на...г все. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Polaris 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба проверить локи может и сама программа ,доработайте ее и проблемы отпадут само собой. Изменить локи ,можно только к большей защите .читаем даташит. Или стереть ,на...г все. :) О, действительно, тормознул :) Локи снял. Но вот почему они установились?? Локи проверить-то можно, но снять-то их программно с сохранением загрузчика вряд ли получится, так что эффекта от этого не будет :( Два варианта, (даже три) 1. Битый проц. 2. Сами залочили и забыли. 3. Если заказчик от нее отказался, то вероятно скопировал и залочил :) Локи менять нельзя их можно только стереть командой Chip-Erase. 1 - возможно 2 - вряд ли, уж очень странное распределение 3 - вряд ли, квалификация не позволит залезть, да и смысла нет А за подсказку со стиранием - спасибо :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bodja74 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба О, действительно, тормознул :) Локи снял. Но вот почему они установились?? Без "нужных" локов ,не запускаем програму ,я про это имел ввиду. У вас программа изначально не запустится. Локи проверить-то можно, но снять-то их программно с сохранением загрузчика вряд ли получится, так Я электронщик ,а не экстрасенс,и не верю в случайности ,и можно в такой ситуации или обвинить себя или заказчика ,как исключить себя из такой ситуации ,я написал выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба ... Проверка Lock Bits выяснила, что стоит запрещение использования SPM/LPM как в секции кода, так и в секции бутлоадера. Мемори лок не установлен... ...Как я мог изменить их раньше - тоже не знаю, подозреваю, что это произошло у заказчика. ...С чем может быть связано такое поведение? Отчего установились локи? ... Если я правильно понял ваше сообщение, то перед передачей плат заказчику, лок-биты на плате не были установлены, а после получения плат назад - были. Если это так, то вполне вероятно, что лок-биты прошил сам МК при сбое программы. Как раз те лок-биты, что у вас активировались (BLB12 BLB11 BLB02 BLB01) можно самопрограммировать. А биты, которые остались целы (LB2 LB1) самопрограммировать нельзя. Делайте выводы. Или на плате проблемы с питанием, или высока вероятность появления больших импульсных помех по питанию, или не включен brown-out reset... Хотя, сама возможность самопрограммирования лок-битов, даже при наличии всех механизмов защиты, не позволяет со 100% уверенностью исключить самопроизвольную возможность их взведения :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VDG 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба вряд ли, квалификация не позволит залезть, да и смысла нет А вот попробовать на "а вдруг..?" и потыркать на галочки в программаторе ума у него вполне хватит. К Вам что никогда не обращались "посмотреть считать"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Polaris 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба А вот попробовать на "а вдруг..?" и потыркать на галочки в программаторе ума у него вполне хватит. К Вам что никогда не обращались "посмотреть считать"? У заказчика есть исходники, причем на Си, программатора у них нет, так что это очень маловероятно. Смотреть там ну абсолютно нечего было. Если я правильно понял ваше сообщение, то перед передачей плат заказчику, лок-биты на плате не были установлены, а после получения плат назад - были. Если это так, то вполне вероятно, что лок-биты прошил сам МК при сбое программы. Как раз те лок-биты, что у вас активировались (BLB12 BLB11 BLB02 BLB01) можно самопрограммировать. А биты, которые остались целы (LB2 LB1) самопрограммировать нельзя. Делайте выводы. Или на плате проблемы с питанием, или высока вероятность появления больших импульсных помех по питанию, или не включен brown-out reset... Хотя, сама возможность самопрограммирования лок-битов, даже при наличии всех механизмов защиты, не позволяет со 100% уверенностью исключить самопроизвольную возможность их взведения :( Да, биты точно установлены не были, перед отправкой платы прошли контроль загрузки новой версии, все прошло нормально. Да, я почитал только что даташит по меге128, действительно программно можно установить только эти биты, это хорошая зацепка. Но вот по поводу ресета - это странно, потому что включен как внутренний brown-out, так и внешний супервизор стоит... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Polaris 0 21 ноября, 2008 Опубликовано 21 ноября, 2008 · Жалоба Сегодня ситуация повторилась. Произошло это при заливании прошивки из-под IAR при помощи JTAGICE (копия). Плата та же самая, хотя работаю не только с ней. Прошивка удачно залилась, но затем обнаружилось, что установлены те же LockBits. Может ли это быть связано с битым контроллером? Не встречалось ли ни у кого подобного? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Polaris 0 17 февраля, 2009 Опубликовано 17 февраля, 2009 · Жалоба Доброго всем времени суток! Сегодня снова получил плату с залоченным содержимым. Ситуация туманная, поэтому опишу подробнее - на изделии стоит самописный загрузчик для обновления прошивки, загрузчик не привязан к бут-области, но физически находится там (если совсем точно - в самом низу флэша, сверху него находится прошивка), для уменьшения размера прошивки в 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 0 17 февраля, 2009 Опубликовано 17 февраля, 2009 · Жалоба Мало данных. 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 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба Мало данных. 1. Та же самая плата или в этот раз другая >> Произошло это при заливании прошивки из-под IAR при помощи JTAGICE (копия). 2. При заливании или после (напр откл/вкл питания)? Плата уже другая. Думаю, что JTAGICE уже не при чем, в прошлый раз это явление обнаружилось после того, как несерийная плата вернулась, и я начал с ней работать отладчиком, думаю, что там локи установились в процессе обновления, но так как обновление было завершено, ничего страшного не случилось, в этот раз обновление было прервано, в итоге заметить явление удалось раньше. С чем связан сбой - не знаю, у меня этот загрузчик пишется в процессе тестирования свежей платы, после чего пишется через него прошивка, этот процесс проводился уже как минимум пару сотен раз, еще какое-то количество раз переписывал прошивку с помощью загрузчика, ни одного сбоя замечено не было. Хотя, возможно, какие-то платы оказались залочеными, тут я не могу быть уверенным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться