Цитата(KRS @ Apr 22 2010, 16:36)

Так вы из флеша пытаетесь запустить штатный код?
Т.к. бутлоадер частично инициализирует переферию, в частности на 23xx, 24xx PLL. Возможно вы его неккорректно отключаете или переинециализируете. И чип виснет.
Так и есть! Через IAR глянул, что творится в процессоре - висим на while (!PLLSTAT_bit.PLOCK);.
Цитата
Это уже проблемы Вашей программы. Загрузчик запускает исполнение с любого адреса. А чего там у Вас не работает ему не ведомо.
Не забудьте только добавить A или T. А какого, Вы запускаете с какого-то магического адреса, а не с того, с которого он стартует по включению питания, т.е. 0 ?
Магическим адресом является, по сути, адрес таблици векторов прерываний(как я понял), а не 0. Разницы, кстати, замечено не было.
Собственно, проблема ясна. Теперь о путях решения:
1)Правильно инициализировать PLL. Но есть проблема. Не факт, что все прошивки, заливаемые моей утилитой, будут моими, и PLL там будет адекватно проинициализирован.
2)После заливки основной программы прошивать по адресу 0x40000000 прошивку, которая будет делать сброс по WDT и все. После такого сброса можно быть уверенным, что процессор перешел а дефолтовые настройки.
3)Сбросить процессор программно через свою утилиту сразу после загрузки flash. При помощи какого-нибудь недокументированного способа. Но возможно ли это?
Что посоветуете? Писать микроутилиту для RAM, как бы долго это не был?
Цитата(zltigo @ Apr 22 2010, 16:58)

исходя из кода эти телодвижения для какого-то неведомого контроллера, который ответит на '?'
"Bootloader" я лично таких НЕ знаю. Наверное какие-нибудь старинные версии загрузчиков.
Не забудьте только добавить A или T.
Самого удивило! G без выбора режима, а на ? не Synchronized. Вот, собственно, потому и спросил.