Нужна помощь с прошивкой STM32

serenya

rcopen.com/forum/f4/topic404604 закончилась окирпичиванием приемника. Пытался слить прошивку с рабочего приемника, но она залочена. Со словами “все равно не работает” через SWD залил прошивку, на которую пытался обновиться. Оригинальная прошивка имеет расширение .frk, и по всей видимости перекодируется программой для прошивки. Я же просто переименовал ее в bin и залил через STM32 ST-LINK Utility. Стало ни лучше ни хуже. Есть мысль попробовать обмануть родную утилиту от FrSky, залить бутлодырь который идет в пустых STM32 с завода (камень STM32F103C8T6). Если я правильно понимаю процесс, то камень постоянно находится в режиме загрузки через UART и бутлодырь т.к. прозвонка показал: BOOT0 нога 44 через 10кОм висит на +5В. BOOT1 нога 20 через резистор висит на земле. т.е.

The STM32F10xxx bootloader is activated by applying pattern1 (described in Table 2:
Bootloader activation patterns

Pattern1 Boot0(Pin) = 1 and Boot1(Pin) = 0

(AN2606)
Для прошивки утилитой от FrSky необходимо коротить выходы 1 и 2 приемника, которые висят на 18 и 19 ногах STM, т.е. переход в режим программирования программный. Возможно (я очень на это надеюсь) для программирования в данном случае используется заводской бутлоадер (шанс конечно мизерный) и программный переход ведет на заводской бутлоадер.Что бы это проверить хочу вернуть камень к “заводским настройкам”. Может кто подсказать как это сделать? Может кто подскажет какой-то другой способ реанимировать приемник? Производитель прошивку скорее всего не даст, хотя на форуме отписал на удачу.

MPetrovich
serenya:

залил через STM32 ST-LINK Utility

Данная утилита предназначена для работы с программатором ST-LINK: www.st.com/web/en/catalog/tools/PF251168?s_searcht…
Для прошивки по UART используется программа STM32 and STM8 Flash loader demonstrator: www.st.com/web/en/catalog/tools/PF257525

serenya:

Если я правильно понимаю процесс, то камень постоянно находится в режиме загрузки через UART и бутлодырь т.к. прозвонка показал: BOOT0 нога 44 через 10кОм висит на +5В. BOOT1 нога 20 через резистор висит на земле. т.е.

Не думаю. То, что ноги соединены так, это ещё не всё. В самой программе, которая заливается, может быть переход из режима загрузки в режим выполнения программы (RUN).

serenya:

Для прошивки утилитой от FrSky необходимо коротить выходы 1 и 2 приемника, которые висят на 18 и 19 ногах STM, т.е. переход в режим программирования программный.

Я не могу знать, что удумали китайские программеры, но такой вариант не исключён.

serenya:

хочу вернуть камень к “заводским настройкам”

Что есть “заводские настройки”? Для перепрошивки, частичного или полного стирания FLASH-памяти МК скачайте прогу Flash loader demonstrator, ссылку на которую я давал выше. Прочитайте мануал по этой проге, законнектитесь через UART и творите что хотите.

serenya
MPetrovich:

Данная утилита предназначена для работы с программатором ST-LINK

serenya:

через SWD залил прошивку

Именно ST-LINKом

MPetrovich:

Для прошивки по UART используется программа STM32 and STM8 Flash loader demonstrator:

Ее я попробовал в первую очередь, после того как приемник перестал определяться в фирменной утилите FrSky, подключиться не смог.

MPetrovich:

Не думаю. То, что ноги соединены так, это ещё не всё. В самой программе, которая заливается, может быть переход из режима загрузки в режим выполнения программы (RUN)

Здесь мы долго можем гадать на кофейной гуще.

MPetrovich:

Что есть “заводские настройки”?

Хочу иметь загрузчик, с которым камень идет с завода для возможности программирования по UART.
Я правильно понимаю что этот самый загрузчик мог слететь и по этому я не смог достучаться до камня через Flash loader demonstrator, или он аппаратный и я просто что-то не так делал?

MPetrovich
serenya:

Хочу иметь загрузчик, с которым камень идет с завода для возможности программирования по UART.

Считайте, что он уже у Вас есть - лежит в микроконтроллере.

serenya:

Я правильно понимаю что этот самый загрузчик мог слететь

Не слышал о таком никогда, но всё когда-нибудь случается в первый раз. Может Вы первый? Короче: маловероятно, что загрузчик слетел, поскольку он, скорее всего, аппаратный.

serenya:

или он аппаратный и я просто что-то не так делал?

Во Вы и сами к этому пришли. Видно что-то не так. Проверьте по порядку: подтянуты ли RX и TX к плюсу через резюки, есть ли на них высокий уровень, проверьте установки порта, с которым Вы связываетесь. Должно быть: Рort Name-тот порт, который определяеься при подключении моста USB-UART; Baud Rate-115200; Parity-Even; Echo-Disabled. Ну и сам мост проверьте - определяется ли при подключению к компу, замкните RX и TX и плюньте что-нибудь из любой терминальной проги - если на приёме будет то, что передали - всё ОК. В общем, последовательно и не торопясь проверить всё железо. Удачи.

serenya

FTDI рабочая, постоянно пользую. Не удачная прошивка через нее же была и приемник определился и начал прошиваться, т.е. с уровнями, настройками и.т.д. порядок. Есть еще один момент, производитель дабы подзаработать выпустил свой собственный конвертер USB-UART, а что бы его покупали инвертировал сигналы и в нем и в железках прошиваемых им. Но это легко обходится программным инвертированием уровней ФТДИ через их утилиту. Итого имеем инверсный UART со стороны приемника и ФТДИ.

MPetrovich
serenya:

FTDI рабочая, постоянно пользую. Не удачная прошивка через нее же была и приемник определился и начал прошиваться, т.е. с уровнями, настройками и.т.д. порядок.

Тогда я не понял что не так. Если приёмник “начал прошиваться”, то значит UART работает(работал). ОК. В данный момент исправность аппаратной части сохранена или Вы не проверяли?

serenya:

производитель дабы подзаработать выпустил свой собственный конвертер USB-UART, а что бы его покупали инвертировал сигналы и в нем и в железках прошиваемых им.

Бутлодер в микроконтроллере от этого не перестал работать в том же режиме, как его выпустили с фабрики, поскольку он аппаратный. Инверсия сигналов в мосте продаваемом вместе с приёмником не отменяет заводских настроек UART микроконтроллера.

serenya
MPetrovich:

Тогда я не понял что не так

В момент прошивки произошел сбой по моей вине.

MPetrovich:

В данный момент исправность аппаратной части сохранена или Вы не проверяли?

Аппаратную часть я не проверял, но я ее и не трогал, только распаял SWD на проводках.

MPetrovich:

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

Вечером попробую еще раз законнектиться через Flash loader demonstrator. Но даже если и получится подключиться, залить прошивку не выйдет т.к. ее нет в нормальном виде (hex/bin). И все равно приемник не распознается родной прогой т.к. переход в режим прошивки программный, а от родной прошивки не осталось и следа. Похоже круг замкнулся. Вечером еще помучаю его, и если ничего не выйдет (99,9%) и производитель не даст прошивку (99,9999%) приемник отправится на органы.

MPetrovich
serenya:

залить прошивку не выйдет т.к. ее нет в нормальном виде (hex/bin).

А в каком она виде? Расширение не то? Посмотрите в блокноте - может это обычный hex-файл просто прилепили другое расширение.

serenya:

приемник не распознается родной прогой т.к. переход в режим прошивки программный

Вот это я не понял. Это как происходит, если никаких команд в приёмник не поступает, поскольку он не видит компа.
Попробуйте в лоб: переименуйте расширение заливаемого файла на hex/bin и залейте в микроконтроллер по стандартному УАРТу.

serenya
MPetrovich:

А в каком она виде? Расширение не то? Посмотрите в блокноте - может это обычный hex-файл просто прилепили другое расширение.

Расширение frk, оригинальное от FrSky. Смотрел блокнотом, на хекс не похож совсем, по этому

serenya:

Я же просто переименовал ее в bin и залил через STM32 ST-LINK Utility

через SWD.

serenya:

и по всей видимости перекодируется программой для прошивки

MPetrovich:

Вот это я не понял.

Для перехода в режим прошивки на приемнике необходимо поставить перемычку между 1 и 2 каналом. После подачи питания приемник программно распознает переход и переходит в режим загрузки по UART, но бутлоадер в этом режиме какой-то не стандартный.

MPetrovich:

и залейте в микроконтроллер по стандартному УАРТу.

Приемник по UART не определяется ни в ST-LINK Utility ни в фрскаевской утилите, (ФТДИ на всякий случай проверил терминалкой) что не удивительно т.к. сейчас в камне залито черти что. Но он не определялся и до экспериментальной прошивки переименованным файлом. Похоже что все же заводской бутлоадер возможно попортить, или я все же что-то делаю не так. Правильно ли я понял даташиты по установке выводов BOOT (писал в первом сообщении)? Никаких ресетов не надо дергать?
Спасибо Вам большое за помощь. Производитель на форуме молчит, прошивку ожидать не приходится, да я бы и сам не дал. Приемник отправится на органы.

MPetrovich
serenya:

Похоже что все же заводской бутлоадер возможно попортить

Я сейчас глянул мануал по бутлодерам. Похоже, что всё таки там на заводе во флэш заливают, таки, прогу-бутлодер. Она расписана в Figure 6. Bootloader for STM32F10xxx with USART1. Так что мои утверждения по поводу аппаратного бутлодера были неверны. Вероятно не исключён вариант того, что Вы залезли в тот раздел памяти, где лежала прога-бутлодер и его повредили. К сожалению для Вашего камня в мануале не указывают где именно в памяти находится бутлодер.

serenya:

Правильно ли я понял даташиты по установке выводов BOOT (писал в первом сообщении)?

Вроде бы правильно.

serenya:

Никаких ресетов не надо дергать?

Ресет надо нажимать два раза: первый раз когда устанавливается режим бутлодера и второй раз когда программа залилась и перемычка с ноги Boot0(Pin) убирается, т.е. Boot0(Pin)=0 и Boot1(Pin)=0. Или оба раза передёрнуть питание.
Если не в лом, то можно попробовать написать свой бутлодер по блок схеме из мануала Figure 6., откомпилить его и залить через SWD ST-LINKом. Но это, конечно, на любителя.

Сейчас подумал ещё и возникла вот какая мысль: по уму(и по мануалу), та часть памяти, где лежит бутлодер залочена и стереть её можно только сняв защиту. В мануале описывается возможность раскурочивания бутлодера, но там описывается именно процедура снятия защиты с определённых секторов памяти. Каким образом Вы могли разлочить память под бутлодер - загадка…

serenya
MPetrovich:

с ноги Boot0(Pin) убирается, т.е. Boot0(Pin)=0 и Boot1(Pin)=0

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

MPetrovich:

можно попробовать написать свой бутлодер

Это точно нет, овчинка выделки не стоит.

MPetrovich:

Каким образом Вы могли разлочить память под бутлодер

А был ли мальчик заводской бутлоадер? Может его потерли при прошивке и оставили только свой фрскаевский? Это объясняет почему он так легко испортился, ведь первый раз я не трогал область бута а соединиться с камнем после неудачной прошивки не смог.

MPetrovich
serenya:

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

Это как? Boot0(Pin) через резюк соединён с 3В, а Boot1(Pin) через резюк с землёй? Тогда, по логике вещей, ресет после загрузки программный, а когда включаешь питание камень сразу в режиме загрузки. Но в таком случае не понятно как же девайс работает в нормальном режиме?
А чо за проблема? припаяйте проводки и тумблер параллельно резистору от Boot0(Pin) к земле.

serenya:

А был ли мальчик заводской бутлоадер? Может его потерли при прошивке и оставили только свой фрскаевский?

Чёт не очень в это верится. Китайцы лишний раз не почешутся, а тут свой бутлодер. Сомневаюсь я.

serenya:

ведь первый раз я не трогал область бута а соединиться с камнем после неудачной прошивки не смог.

Не понял. В первый раз не трогали, а в какой раз трогали? И откуда вы знаете, что вообще производили действия с областью памяти бутлодера?

serenya

Когда я залил переименованную в bin прошивку не известно какие области памяти она затронула. После этого я уже очистил память полностью.
Китайцы вполне могли замутить свой бут т.к. производитель не маленький. Они же не поленились закодировать прошивку.

MPetrovich

Попробуйте всё таки инициировать стандартный STMовский бутлодер воспользовавшись мануалом и припаяв проводки к нужным ногам.

serenya

Даже если STMовский бут заработает, это ничего не даст т.к. HEXа нет, а фрскаевская прошивка работает не с STMовским бутом. Вот что мне ответили на форуме FrSky:

.hex файл является конфиденциальной, и мы не можем предоставить его вам.

Если HEX конфиденциален, то скорее всего они приняли меры что бы их прошивку в формате frk не могли прошить в стороннее железо. Помимо дешифровки их программой прошивки в HEX, скорее всего еще и бут у них свой, иначе секретности никакой.

MPetrovich

В другой Вашей ветке rcopen.com/forum/f4/topic404604 в первом сообщении написано, что Вы уже делали перепрошивку на другом приемнике и все получилось. Если это так, то можно попробовать считать с того приемыша прошивку. Только считывать нужно в режиме стандартного STMовского бутлодера, для чего нужно убрать резюк 10кОм, притягивающий BOOT0 нога 44 на + питания, а вместо него припаять тумблер на проводочках. Далее: подключить FTDI-мост, замкнуть тумблер(коротнуть BOOT0 на землю) и подать питание на чип. После этого запустить Flash loader demonstrator настроить его как я уже писал выше и попытаться связаться с чипом. Должно получиться. Потом попробовать скачать с флэша прошивку в файл. Есть, правда, опасение, что китайцы попытались залочить флэш, но вроде бы во Flash loader demonstrator (как я понял) можно снимать любую защиту с флэша.

serenya

Не знаю на счет флеш лоадера, а через swd и прогу от stm считать не получилось, залочено считывание. Не думаю что через юарт получится, иначе грош цена такой защите.

MPetrovich

Не попробовав, не узнаешь…
P.S. Не удивлюсь если модеры скоро прикроют эту тему. Кроме нас с Вами никто не участвует в обсуждении.

serenya

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

28 days later
murom

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

  1. При прошивке контроллер (после определенных действий) остается в режиме бутлодера, который переписывает область основной программы контроллера.
  2. Родная утилита от FrSky передает файл .frk в приемник без изменений блоками по 400 байт + 2 байта контрольной суммы, которые она рассчитывает сама. Приемник на это отвечает, что блок принят и он верный. Затем передается следующий блок данных, а ползунок в программе передвигается на некоторый процент вперед. Вывод: при прошивке родной утилитой произошел некий программный или аппаратный сбой, после которого приемник не смог ответить утилите и прошивка зависла.
  3. Причин сбоя прошивки может быть очень много. Из аппаратных наиболее вероятны проблемы с цепями питания или выход из строя контроллера. Это в первую очередь и стоит проверить.
MPetrovich
murom:

Может быть уже поздно

Лучше поздно, чем никогда. Пока тема не закрыта можно (и нужно, на мой взгляд) высказываться. Тем более, что Ваша информация весьма полезна.
А Вы каким образом раскопали как работает

murom:

Родная утилита от FrSky

? Анализатором подключались?

murom

OllyDbg.
Для frsky_update_rev11.exe:
402D41 - считаем контрольную сумму,
402C10 - передаем данные в приемник.
Если не осилите, то можно использовать программы для слежения за COM портом

serenya
murom:

Это в первую очередь и стоит проверить

Это проверял - проц живой. Получилось это так

serenya:

Но как-то так неудачно получилось, я и сам толком не понял как, то ли палец 2 раза клацнул по мышке, то ли нечаянно нажал второй раз “прошить”, в общем процесс прошивки остановился на 17% и все, проценты не бегут, фтди не подмигивает.

murom:

402D41 - считаем контрольную сумму, 402C10 - передаем данные в приемник.

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

murom
  1. Контроллер живой, т.к. его удалось прошить через STM32 ST-LINK.
  2. Загрузчик с завода никуда не делся, для его изменения нужно входить в другой режим программирования. Следовательно должен работать Flash loader demonstrator.
    Подробнее www.radiohlam.ru/teory/stm32_3.htm.
  3. Скорее всего сдох стабилитрон на 3,3В, т.к. при подаче напряжения от программатора контроллер работает, а от батареи нет. Проверьте напряжение на 1 ноге контроллера (считать от метки на корпусе, метка должна быть в верхнем левом углу), должно быть 3,3В.
Vovets
serenya:

Со словами “все равно не работает” через SWD залил прошивку

При этом с большой вероятностью затерев бутлоадер, который единственный мог расшифровать оригинальную прошивку. Если она, конечно, была зашифрована асимметричным алгоритмом.

Если алгоритм симметричный, либо вообще нет шифрования, тогда, чисто теоретически, можно разломать оригинальную программу для прошивки, расшифровать оригинальную прошивку и залить её через SWD. Но всё равно останется вопрос с оригинальным бутлоадером.

На практике, думаю, кирпич.