Как стать автором
Обновить

Комментарии 37

Если честно, то вся статья это «делайте по инструкции» и китайские программаторы не имеют сигнала Reset.
Ясен перец, что если у вас виснет контроллер, то подключаться нужно только при сигнале сброса. Но если вы фьюзы правильно пропишете, то и это не поможет.
У STM32 нет «фьюзов». Его вообще невозможно окирпичить! Даже если у автора руки совсем из задницы и он залочит прошивку, все равно можно перешить МК.
Чтобы убить возможность прошивки STM32, нужно убить одну из ножек PA14/PA15 или PA9/PA10 (чтобы нельзя было прошить через UART бутлоадер), PA11/PA12 (чтобы нельзя было прошить через DFU) и PB6/PB7 (чтобы нельзя было через I2C прошить); ну и, само-собой, SWD/JTAG.
Лично я предпочитаю работать через DFU с теми МК, у которых он есть. Если же нет, то либо бутлоадер на UART1, либо SWD (но SWD крайне редко, т.к. случаи, когда используемые им ноги ни для чего не нужны — чуть ли не единичны). В Makefile я добавляю минимум три цели для прошивки: DFU, бутлоадер и SWD.

P.S. А статья сама по себе яйца выеденного не стоит, т.к. содержит общеизвестную информацию. Это как написать статью «почему Солнце всходит на востоке».
Его вообще невозможно окирпичить! Даже если у автора руки совсем из задницы и он залочит прошивку, все равно можно перешить МК.

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

Потому, что сейчас софт пишут сплошь мамкины ардуинщики, которые ни даташитов не читали, ни как защита работает не понимают. Level 2 protection включаете, который есть на ВСЕХ STM32 кроме STM32F1xx, и у вас отключается JTAG/SWD на пару с встроенным бутлоадером и чего вы будете потом с таким контроллером делать? Снять защиту может только код из прошивки.

Это «окирпичивание» соблюдается при осознанном действии, не знаю, что необходимо сделать, чтобы случайно включить Level 2 protection.

Элементарно. Случайно ошиблись при установке Options. Или специально ставите (любой нормальный софт должен проверять/ставить защиту программно, чтобы не украли прошивку), а в прошивочке косячок и она окирпичивается. Или софт при массовом производстве при программировании случайно поставили, когда защиту ставили (вы же защищаете прошивку?).
Level 2 снять невозможно ни снаружи чипа, ни изнутри. Это необратимая операция.
Отлично снимается стираем чипа из прошивки.
Read protection Level 2

When RDP level 2 is activated, all protections provided in Level1 are active and the chip is fully protected. The RDP option byte and all other option bytes are frozen and can no longer be modified. The JTAG, SWV (single-wire viewer), ETM, and boundary scan are disabled.

When booting from Flash memory, the memory content is accessible to user code. However, booting from SRAM or from system memory bootloader is no more possible.

This protection is irreversible (JTAG fuse), so it’s impossible to go back to protection levels 1 or 0.

Работает только самопрограммирование, но Option бит не снимается.
Да, действительно. Я, просто, совершенно точно снимал level 2 из прошивки на каком-то из STM32. Но это могло быть что-то из старых STM32F2xx или STM32Fxx, которые уже outdated.
LOL! Даже не знаю, что ответить… У вас STM32 начинается и заканчивается на STM32F1xx? :)
Ключевые слова — Level 2 protection. Это есть у ВСЕХ STM32 кроме STM32F1xx.
Берёте STM32L0xx, STM32L1xx, STM32F2xx, STM32F3xx и т.д., включаете Level 2 protection в RDP и у вас отключаются SWD/JTAG и System boot memоry — как будете раскирпичивать?
Элементарно, подключаешься по SWD и делаешь сброс — и чип прошивается

Попробуйте на своём контроллере, расскажите всем о ваших успехах

SWD отключается при Level 2.

Была статья в сети с исследованием. Вскрываем чип, ильтрафиолетом светим кристалл :) очень "простой" метод.

Инфильтраолетом. От слова infiltration.

Во-первых, некоторые чипы имеют защиту от полировки. Так себе защита, но процесс получения работоспособного шлифованного чипа усложняет. Тогда уже проще электронным микроскопом считать прошивку или поменять биты.
И при облучении много другого потрётся.

Отучаемся говорить за всех. Это у вашего допотопного f103 нет фьюзов.
А у G0xx их фигова туча. И окирпичить его как нефиг делать

Собственно, только у f1xx и нет.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Только для STM32F1xx и то, с некоторой вероятностью. Для остальных — теоретически возможно, но практически при правильной настройке чипа и правильной прошивке (нужно же ещё и программную защиту обязательно делать) нереализуемо.

Автор, твоя статья запоздала лет так на 10. В G серии пин boot инженеры догадались развести на ногу swd. И… опаньки.

Посмотрите, пожалуйста, документ STM32G031x4/x6/x8 datasheet DS12992 Rev 1, от июня 2019 года. Раздел 3.5 «Boot Modes», стр. 15. Там все описано.
Продублирую: подайте на Boot0 (он же SWCLC, он же PA14) высокий уровень, подключитесь к UART1 (PA9, PA10) и действуйте, как описано во второй части публикации. У Вас все получится.
В самый раз было начинать читать мануалы. И метод RTFM сработал!
Дополню эту замечательную прописную истину.

Если читать мануалы (включая их обновления и Errata) до того, то будет ещё больше пользы: освежаешь в памяти подзабытое, открываешь для себя то о чем даже не подозревал, обращаешь внимание на детали (которые порой имеют решающее значение), видишь реальный опыт применения другими.

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

Это реальный profit, рекомендую!
Спасибо за дополнение, коллега!
В самый раз было начинать читать мануалы. И метод RTFM сработал!

Как Вы понимаете, это была самоирония.

В отечественных миландрах, 1986ВЕ и 9х, и 1, и 3, примерно ровно два этих метода и работает, по крайней мере я именно их и нашёл. Либо под резетом запускать, либо, если не помогает, припаивайся свистком к лапкам уарта, перетыкивай пины бутов. В итоге я такими способами не оживил только одну единичку.

Каждый, кто работал впервые миландрами — обязан залочить jtag, используя его выводы как gpio :)
С китайскими программаторами вся переделка заключается в том, чтобы подключиться к ноге reset сбрасываемого микроконтроллера и далее её ручками на землю посадить в правильный момент. Обычно срабатывает раза с пятого, если чип не увели в супер-защищенный режим, а в нём вся эта статья просто бессмысленна.
В китайским программаторах нужно просто носто кидать ещё один провод по плате программатора — у них reset только для варианта STM8 подключён.
Т.е. в софте reset реализован, gpio дрыгается, только нет пина?
Именно так. Точнее, даже пин есть, но он подключен к reset, который дёргается для STM8, а для STM32 другой пин дёргается. Нужно кидать проводник от резистора перед контактом Reset до 18го пина контроллера. Заодно можно обрезать SWIM, который только для STM8 и кинуть от него провод на 31й пин контроллера и получить SWO, чтобы поиметь не зависящую от USART отладочную выдачу.
Это для знаменитых китайских свистков ST-Link. И вообще, перешить в JLink и радоваться.
Как-то так, помнится.
Интересно, спасибо!
Зарегистрируйтесь на Хабре , чтобы оставить комментарий